Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stronicowanie - Paginacja, jak zmienić [ 1 ] [ 2 ] [ 3 ] na [ 1 ] ... [ 3 ]
pafeu
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 9.10.2011

Ostrzeżenie: (0%)
-----


linki do stron wyświetlają się w takiej formie:
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ]
jak zmienić kod aby rezultat wyświetlania wyglądał tak:
[ 1 ] [ 2 ] ... [ 5 ] [ 6 ]

Kod
while ( $start_podstrony < $razem ) {
   if( $podstrona == $ta_strona ) {
         echo ' [ <a href="stronicowanie.php?start=' . $start_podstrony . '"><b>' . $podstrona . '</b></a> ] ';
   } else {
         echo ' [ <a href="stronicowanie.php?start=' . $start_podstrony . '">' . $podstrona . '</a> ] ';
   }

   $start_podstrony  = $start_podstrony + $na_stronie;
   ++$podstrona;
}


Ten post edytował pafeu 27.02.2012, 16:13:42
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
by_ikar
post
Post #2





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Kiedyś zmontowałem taką klasę, która tworzy taką paginację, o którą dokładnie ci chodzi. Właściwie jest to moja pierwsza klasa. Pamiętam że trochę wzorowałem się na klasie @nospora. Kod możesz znaleźć pod adresem: https://gist.github.com/1926421

Używanie:

  1. <?php
  2.  
  3. require '/path/to/Pagination.class.php';
  4.  
  5. $tablica = glob ("*.*g");
  6. $razem = count($tablica1);
  7.  
  8. $pag = new Pagination();
  9. $pag->setTotalCount(count($tablica));
  10. $pag->setCurrentPage(empty($_GET['page']) ? 0 : $_GET['page']);
  11.  
  12.  
  13. for($i = $pag->indexStart(); $i <= $pag->indexEnd(); $i++)
  14. {
  15. echo $tablica[$i].'<br>'.PHP_EOL;
  16. }
  17.  
  18. echo $pag->getHtml();


Samo utworzy ci linki, możesz zmienić ilość "stron" pomiędzy kropkami w taki sposób:

  1. $pag->setRange(5);


Domyślnie jest to 3. Możesz zmienić ilość wyświetlanych wierszy, domyślnie 40, a możesz to zrobić tak:

  1. $pag->setPerPage(10);


Możesz zmyślnie pobawić się linkami, np w twoim przypadku zrobić to "start":

  1. $pag->setUrl('stronicowanie.php?start=#PAGE#');


Dodatkowo masz podane przykładowe style css, dzięki czemu możesz je sobie gdzieś do swoich styli dorzucić i zmienić według swoich potrzeb. Możliwości jest znacznie więcej, podałem tylko ich część. Wszystkie metody zwracają obiekt, dzięki czemu można się bawić w method chining, jeżeli ktoś tak woli:

  1. $pag = new Pagination();
  2. $pag->setTotalCount(count($tablica))->setCurrentPage(empty($_GET['page']) ? 0 : $_GET['page']);


Ważne abyś sobie w tej klasie usunął lub wymienił jedną linijkę:

  1. throw new NotFoundHttpException(sprintf('Wartość "%s" jest większa od całkowitej liczby stron, lub jest równa zeru.', $val));


Jest to dokładnie linia 61. Możesz cały warunek w metodzie setCurrentPage, wymienić na taki:

  1. if($val === 0 || $val > $this->totalPages())
  2. {
  3. $this->currentPage = 0;
  4. } else
  5. {
  6. $this->currentPage = $val;
  7. }


I cała metoda wyglądała by tak:

  1. public function setCurrentPage($val)
  2. {
  3. $val = (int) $val;
  4.  
  5. if($val === 0 || $val > $this->totalPages())
  6. {
  7. $this->currentPage = 0;
  8. } else
  9. {
  10. $this->currentPage = $val;
  11. }
  12.  
  13. return $this;
  14. }


jeżeli nie odpowiada ci używanie klasy, ale chciałbyś nadal mieć tą paginacje oddzieloną "kropkami", to możesz podpatrzeć w metodzie getHtml, jak ja to robię, i podobnie wykonać u siebie. (IMG:style_emoticons/default/wink.gif)

EDIT: zapomniałem wspomnieć, przypisanie danych musi odbywać się w kolejności: najpierw ustawiasz ile masz wszystkich "rekordów", następnie ustawiasz na jakiej jesteś stronie.

Ten post edytował by_ikar 27.02.2012, 20:49:15
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 17:05