Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Stronicowanie - Paginacja, jak zmienić [ 1 ] [ 2 ] [ 3 ] na [ 1 ] ... [ 3 ]
pafeu
post 27.02.2012, 16:07:16
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


--------------------
ommo.pl - oświetlenie led i nie tylko
Go to the top of the page
+Quote Post
Uriziel01
post 27.02.2012, 16:51:47
Post #2





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Było już wałkowane tyle razy:
http://lmgtfy.com/?q=paginacja+PHP
Go to the top of the page
+Quote Post
pafeu
post 27.02.2012, 17:00:10
Post #3





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

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


Cytat(Uriziel01 @ 27.02.2012, 16:51:47 ) *
Było już wałkowane tyle razy:
http://lmgtfy.com/?q=paginacja+PHP

wiem do czego służy google i uwierz mi, że najpierw szukałem a dopiero proszę o pomoc
dodam, że paginację już mam zrobioną i działa dobrze
teraz borykam się z problemem zmniejszenia ilości tych linków do podstron
tak więc proszę o pomoc w tym konkretnym przypadku

Ten post edytował pafeu 27.02.2012, 17:05:32


--------------------
ommo.pl - oświetlenie led i nie tylko
Go to the top of the page
+Quote Post
prowseed
post 27.02.2012, 17:25:07
Post #4





Grupa: Zarejestrowani
Postów: 433
Pomógł: 64
Dołączył: 29.01.2011
Skąd: Warszawa

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


No to sprawdz ile masz wszystkich stron [n] i wyswietl kolejno "[1] [2] ... [n-1] [n]"
Masz napisana paginacje- fajnie, ale skad mamy wiedziec w jaki sposob wyswietlasz wyniki? Wrzucasz je do tablicy, wyrzucasz w petli czy jak?
Zrobiles sobie paginacje, a nie wiesz w jaki sposob wyswietlic wyniki? dziwnie to wyglada...


--------------------
Go to the top of the page
+Quote Post
pafeu
post 27.02.2012, 18:55:32
Post #5





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

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


próbowałem zrobić tak jak piszesz ale nic mi z tego nie wychodzi - proszę o pomoc
a oto kod:
Kod
$tablica1 = glob ("*.*g");

$razem = count($tablica1);
$na_stronie = "1";        

$start = $_GET['start'];
if( !isset($start) ) { $start = "0";  }  
$ta_strona = $start / $na_stronie + 1;

$start_podstrony  = "0";
$podstrona = "1";

if( $start > 0 ) {
      $start_poprzedniej = $start - $na_stronie;
      echo '<a href="stronicowanie.php?start=' . $start_poprzedniej  . '"><< Poprzednia</a>';
}

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;
}

if( $start + $na_stronie < $razem  ) {
      $start_nastepnej = $start + $na_stronie;
      echo '<a href="stronicowanie.php?start=' . $start_nastepnej  . '">Następna>></a>';
}


Ten post edytował pafeu 27.02.2012, 18:56:19


--------------------
ommo.pl - oświetlenie led i nie tylko
Go to the top of the page
+Quote Post
Uriziel01
post 27.02.2012, 20:30:54
Post #6





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Czymś w stylu(oczywiście do dopracowania gdyż pisałem to na kolanie przez chwilę):
  1. <?PHP
  2. $razem = 13;
  3.  
  4. $start = $_GET['start'];
  5. if( !isset($start) ) { $start = "0"; }
  6. $result = array();
  7. if( $start > 0 AND $razem > 1) {
  8. $result[0] = '<a href="stronicowanie.php?start=' . ($start - 1) . '"><< Poprzednia</a>';
  9. }
  10. if( $start < $razem AND $razem > 1) {
  11. $result[$razem + 1] = '<a href="stronicowanie.php?start=' . ($start + 1) . '">Następna >></a>';
  12. }
  13. if ($razem > 1)
  14. {
  15. $result[1] = ' [ <a href="stronicowanie.php?start=1">1</a> ] ';
  16. $result[2] = ' [ <a href="stronicowanie.php?start=2">2</a> ] ';
  17. $result[3] = ' ... ';
  18. $result[$razem - 2] = ' ... ';
  19. $result[$razem - 1] = ' [ <a href="stronicowanie.php?start=' . ($razem - 1) . '">' . ($razem - 1) . '</a> ] ';
  20. $result[$razem ] = ' [ <a href="stronicowanie.php?start=' . $razem . '">' . $razem . '</a> ] ';
  21. if ($razem > 2)
  22. {
  23. $result[$start - 1] = ' [ <a href="stronicowanie.php?start=' . ($start - 1) . '">' . ($start - 1) . '</a> ] ';
  24. $result[$start] = ' [ <b>' . ($start) . '</b> ] ';
  25. $result[$start + 1] = ' [ <a href="stronicowanie.php?start=' . ($start + 1) . '">' . ($start + 1) . '</a> ] ';
  26. }
  27. }
  28. ksort($result);
  29. echo implode(' ', $result) . '<br/>';
  30. ?>

Rezultat:


EDIT:
Chociaż lepiej byś zrobił gdybyś opakował to w funkcje a nawet klasę dla łatwiejszego użycia w przyszłości. I uwierz mi że pod hasłem które ci podałem jest ogrom gotowych przykładów implementacji, choć wiem że umiesz korzystać z google'a to jednak powinieneś chyba lepiej sprawdzać otrzymywane wyniki.

Ten post edytował Uriziel01 27.02.2012, 20:32:24
Go to the top of the page
+Quote Post
by_ikar
post 27.02.2012, 20:46:25
Post #7





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. 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
pafeu
post 2.03.2012, 21:40:37
Post #8





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

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


Cytat(by_ikar @ 27.02.2012, 20:46:25 ) *
Kiedyś zmontowałem taką klasę...

wszystko pięknie działa ale z małym wyjątkiem:
gdy jest wczytana pierwsza strona nie działa przycisk 'następny', na kolejnych już jest dobrze
gdzie jest błąd?


--------------------
ommo.pl - oświetlenie led i nie tylko
Go to the top of the page
+Quote Post
by_ikar
post 2.03.2012, 21:46:08
Post #9





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

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


Pokaż kod, klasa działa, używam ją w sporej liczby miejsc, używa ją też kilka innych osób i to mogę ci powiedzieć, że działa wink.gif pokaż kod jaki zmajstrowałeś, a ci powiem czy nie zrobiłeś czegoś źle.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 14:28