Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] system paginacji, pomoc
Forum PHP.pl > Forum > PHP
AndyPSV
Witam,

potrzebuje zrobic 1 rzecz, o ktora prosze o pomoc - kod, obrazek - wszystko wstawilem tutaj: http://path-of-power.com/php-paging-php-pa...ages-system,258

To co chce zrobic, to jest to, ze np. kiedy ilosc stron jest wieksza to wyswietla je wszystkie, a ja chce miec opcje, ze pokazuje tylko np. 4 w lewo i 4 w prawo od danej strony;
Myslalem takze o skorzystaniu z "»" (przypisac pod nim) np. przesuwanie o 2 lub wiecej strony; takze dobra opcja byloby np. "ostatnia strona" etc.

Macie jakies rozwiazania na stworzenie najlepszego systemu stronnicowania (najwieksze usability)?


kod wyglada tak:

  1. <?php
  2.  
  3. function _pg($i) {
  4. if(!empty($i)) { if(substr($i,0,1) == 'p') if(ctype_digit(substr($i,1))) $pg = (substr($i,1)-1); } else $pg = 0;
  5. return $pg;
  6. }
  7.  
  8. function _pgs($cnt,$per_pg,$pg,$uri,$_prev,$_next,$class = '',$_goto='') {
  9. if((ceil($cnt/$per_pg)-1) > 0) {
  10. $x = ''; for($i = 0; $i*$per_pg < $cnt; $i++) {
  11. if($pg > 0) $PREV = '<a href=\''.URL.$uri.'/p'.($pg).'\' class="'.$class.'">&larr; '.$_prev.'</a>&nbsp;&nbsp;&nbsp;&nbsp;';
  12. if($pg <> $i) $x .= '<a href=\''.URL.$uri.'/p'.($i+1).'\' class="'.$class.'">'.($i+1).'</a> | '; else $x .= '<b>'.($i+1).'</b> | ';
  13. if($pg < (ceil($cnt/$per_pg)-1)) $NEXT = '&nbsp;&nbsp;&nbsp;&nbsp;<a href=\''.URL.$uri.'/p'.($pg+2).'\' class="'.$class.'">'.$_next.' &rarr;</a>';
  14. } $goto = '<div class="r"><div class="l">'.$_goto.':</div><div class="l indent0"><select name="goto"><option value="1">1</option></select></div></div><div class="f"></div>';
  15. } return "<div class=\"l\">".$PREV.substr($x,0,(strlen($x)-3)).$NEXT."</div>".$goto;
  16. }
  17.  
  18. function _pg_cnt($cnt,$per_pg) {
  19. if(ceil($cnt/$per_pg) > 0) $cnt = ceil($cnt/$per_pg)-1; else $cnt = ceil($cnt/$per_pg); return $cnt;
  20. }
  21.  
  22. ?>
CuteOne
heh czasem jak patrze na Twoje kody to się dziwie, że w ogóle działają ;P nie mówię tu o braku wiedzy ale o przeroście formy nad treścią.

  1. $i = 5; // id strony startowej
  2.  
  3. $min = 1; // to chyba można usunąć ;p
  4. $max = 19; // ilość stron
  5.  
  6. $back = 4; // ile numerów w tył
  7. $next = 4; // ile numerów w przód
  8.  
  9. $min = ($i - $back) < $min ? $min : ($i - $back);
  10. $max = ($i + $next) > $max ? $max : ($i + $next);
  11.  
  12. for($k=$min; $k <= $max; $k++) {
  13.  
  14. // dodaj też gdy $i = $k żeby nie robiło a href ;]
  15. $write .= '<a href="id='.$k.'">'.$k.'</a>';
  16. }
  17.  
  18. echo $write;


ps. to tylko prototyp i może nie działać ;p
AndyPSV
dzieki za pomoc, namieszalem cos takiego:

wszystko dziala, aczkolwiek jeszcze nie jest dokonczone; mysle tez o zamknieciu plikow jezykowych w "$lng"; musze zrobic jeszcze to: http://forum.php.pl/index.php?showtopic=164039 + nonscript

  1. <?php
  2.  
  3. function _pg($i) {
  4. if(!empty($i)) { if(substr($i,0,1) == 'p') if(ctype_digit(substr($i,1))) $pg = (substr($i,1)-1); } else $pg = 0;
  5. return $pg;
  6. }
  7.  
  8. function _pgs($cnt,$per_pg,$pg,$uri,$_prev,$_next,$class = '',$_goto='') {
  9. if((ceil($cnt/$per_pg)-1) > 0) {
  10. $min = 0; $max = $cnt; $back = 3; $next = 3; $min = ($pg - $back) < $min ? $min : ($pg - $back); $max = ($pg + $next) > $max ? $max : ($pg + $next);
  11.  
  12. for($i = $min; $i <= $max; $i++) {
  13. if($pg > 0) $PREV = '<a href="'.URL.$uri.'/p1" class="dk none tip" title="'.$_['goto_first_page'].'">&laquo;</a>&nbsp; <a href="'.URL.$uri.'/p'.($pg).'" class="'.$class.'">&larr; '.$_prev.'</a>&nbsp;&nbsp;&nbsp;&nbsp;';
  14. if($i < (ceil($cnt/$per_pg))) if($pg <> $i) $x .= '<a href="'.URL.$uri.'/p'.($i+1).'" class="'.$class.'">'.($i+1).'</a> | '; else $x .= '<b>'.($i+1).'</b> | ';
  15. if($pg < (ceil($cnt/$per_pg)-1)) $NEXT = '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.URL.$uri.'/p'.($pg+2).'" class="'.$class.'">'.$_next.' &rarr;</a>&nbsp; <a href="'.URL.$uri.'/p'.ceil($cnt/$per_pg).'" class="dk none tip" title="'.$_['goto_last_page'].'">&raquo;</a>';
  16. } $goto = '<div class="r"><script type="text/javascript">$(function(){$("select[name=\'goto\']").change(function(){$("#goto").window.location="'.URL.$uri.'/p".$("#goto").val();});});</script>
  17. <div class="l">'.$_goto.':</div><div class="l indent0"><select name="goto" id="goto"><option value="">&iexcl;</option>';
  18.  
  19. for($k = 1; $k <= ceil($cnt/$per_pg); $k++) {
  20. $pp .= '<option value="'.$k.'">'.$k.'</option>';
  21. } $goto2 .= '</select></div></div><div class="f"></div>';
  22. } return "<div class=\"l dk\">".$PREV.substr($x,0,(strlen($x)-3)).$NEXT."</div>".$goto.$pp.$goto2;
  23. }
  24.  
  25. function _pg_cnt($cnt,$per_pg) {
  26. if(ceil($cnt/$per_pg) > 0) $cnt = ceil($cnt/$per_pg)-1; else $cnt = ceil($cnt/$per_pg); return $cnt;
  27. }
  28.  
  29. ?>
CuteOne
tak oftopem to jak ty się w tym kodzie rozczytujesz ;o ?!
AndyPSV
ten kod to jest wersja dla prawdziwych PRO :-)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.