Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Paginacja podstron
Forum PHP.pl > Forum > PHP
jooni22
Witam, wiem że dużo było na temat paginacji, lecz testowałem mnóstwo skryptów/kodu i nie bardzo działało tak jakbym tego chciał. Już tłumaczę o co mi chodzi. Chciałbym wykonać taki katalog produktów jak ma neosport lecz nie bardzo wychodzi mi ta paginacja. Posiadam sporą liczbę produktów, na około 2000 podstron dlatego ręczna paginacja zajęła by mi mnóstwo czasu. Mam tak naprawdę dwie możliwości wyeksportowania produktów do kodu html i nie wiem, która będzie lepsza:
1. około 2000 plików html w każdym po 4 produkty z rosnącą nazwą np ( nazwa pliku "p1.html" znajdują się tam 4 produkty, "p2.html" tam też 4 produkty i tak do około 2000 podstron)
2. Wyeksportowania listy wszystkich produktów w 1 pliku html i ustawienie paginacji na długość tekstu bądź innych znaczników
Czy ktoś zna jakiś skrypt/framework, który dobrze wykona numeracje moich produktów możliwością dla punktu 1 bądź 2 ?.

Pozdrawiam
nospor
Przeciez tam nie ma fizycznie zadnych oddzielnych stron html..... koncowki .html uzyskuje sie poprzez ładne url Tam fizycznie jest jeden zwykly plik php ktory normalnie w swiecie prowadzi stronicowanie.
jooni22
@up
a masz pomysł jak takie coś wykonać mając wygenerowane produkty w formie html tak jak napisałem wyżej w punktach ?
nospor
To nie masz tych produktow w bazie danych?
gitbejbe
2000 plikow html ?!

Tak jak napisał @nospor

takie rzeczy robione sa w jednym pliku a skrypt który to obsługuje zajmuje parenaście linijek w miare prostego kodu.
po pierwsze to pokaż to co napisałeś i Ci nie działa.

Paginacja polega na tym, że (wszystko w jednym dokumencie) wszystko pobierane jest z bazy a sam momen przejscia pomiędzy stronami to po prostu zwyła zmiana zapytania o przedział wyswietlanych rekordów. Paginacje robi się w ten sposób, że najpierw pobierasz ilosc wszystkich rekordów z bazy danych i dzielisz to z zaokrągleniem przez ilość produktów ktore maja pojawić się na stronie = wynik ten daje Ci ilosc wszystkich stron. Klikniecie w strone np numer 2, przekazuje do skryptu infomracje z jakiego przeziału mają teraz zostać wybrane rekordy. Dla strony pierwszej będzie to przedział np od 0 do 10, dla strony 2 bedzie to od 10 do 20 itd.

Najlepiej to zobrazowac na skrypcie:

  1.  
  2. <?php
  3. //musimy wyciągnąć z bazy informacje o ilości postów ogólnie do wyliczenia ilości stron
  4. //celowo nie kożystamy z SQL_CALC_FOUND_ROWS, bo zależy nam na zabezpieczeniu się przed wś****skimi
  5. //użytkownikami, którzy zmodyfikują url i będą chcieli wejść na stronę jaka nie istnieje
  6. $query = "SELECT COUNT(*) as all_posts FROM news";
  7. $result = mysql_query($query) or die (mysql_error());
  8. $row = mysql_fetch_array($result);
  9. extract($row);
  10.  
  11. $onpage = 5; //ilość newsów na stronę
  12. $navnum = 7; //ilość wyświetlanych numerów stron, ze względów estetycznych niech będzie to liczba nieparzysta
  13. $allpages = ceil($all_posts/$onpage); //wszysttkie strony to zaokrąglony w górę iloraz wszystkich postów i ilości postów na stronę
  14.  
  15. //sprawdzamy poprawnośc przekazanej zmiennej $_GET['page'] zwróć uwage na $_GET['page'] > $allpages
  16. if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
  17. $page = 1;
  18. }else{
  19. $page = $_GET['page'];
  20. }
  21. $limit = ($page - 1) * $onpage; //określamy od jakiego newsa będziemy pobierać informacje z bazy danych
  22.  
  23. $query = "SELECT * FROM news ORDER BY id DESC LIMIT $limit, $onpage";
  24. $result = mysql_query($query) or die (mysql_error());
  25.  
  26. while($row = mysql_fetch_array($result)){
  27. echo "<h1>".$row['title']."</h1>";
  28. echo "<p>".$row['content']."</p>";
  29. echo "<hr>";
  30. }
  31.  
  32. //zabezpieczenie na wypadek gdyby ilość stron okazała sie większa niż ilośc wyświetlanych numerów stron
  33. if($navnum > $allpages){
  34. $navnum = $allpages;
  35. }
  36.  
  37. //ten fragment może być trudny do zrozumienia
  38. //wyliczane są tu niezbędne dane do prawidłowego zbudowania pętli
  39. //zmienne są bardzo opisowę więc nie będę ich tłumaczyć
  40. $forstart = $page - floor($navnum/2);
  41. $forend = $forstart + $navnum;
  42.  
  43. if($forstart <= 0){ $forstart = 1; }
  44.  
  45. $overend = $allpages - $forend;
  46.  
  47. if($overend < 0){ $forstart = $forstart + $overend + 1; }
  48.  
  49. //ta linijka jest ponawiana ze względu na to, że $forstart mogła ulec zmianie
  50. $forend = $forstart + $navnum;
  51. //w tych zmiennych przechowujemy numery poprzedniej i następnej strony
  52. $prev = $page - 1;
  53. $next = $page + 1;
  54.  
  55. //nie wpisujemy "sztywno" nazwy skryptu, pobieramy ja od serwera
  56. $script_name = $_SERVER['SCRIPT_NAME'];
  57.  
  58. //ten fragment z kolei odpowiada za wyślwietenie naszej nawigacji
  59. echo "<div id=\"nav\"><ul>";
  60. if($page > 1) echo "<li><a href=\"".$script_name."?page=".$prev."\">Poprzednia</a></li>";
  61. if ($forstart > 1) echo "<li><a href=\"".$script_name."?page=1\">[1]</a></li>";
  62. if ($forstart > 2) echo "<li>...</li>";
  63. for($forstart; $forstart < $forend; $forstart++){
  64. if($forstart == $page){
  65. echo "<li class=\"current\">";
  66. }else{
  67. echo "<li>";
  68. }
  69. echo "<a href=\"".$script_name."?page=".$forstart."\">[".$forstart."]</a></li>";
  70. }
  71. if($forstart < $allpages) echo "<li>...</li>";
  72. if($forstart - 1 < $allpages) echo "<li><a href=\"".$script_name."?page=".$allpages."\">[".$allpages."]</a></li>";
  73. if($page < $allpages) echo "<li><a href=\"".$script_name."?page=".$next."\">Następna</a></li>";
  74. echo "</ul></div><div class=\"clear\">";
  75. ?>

*link - http://www.forum.legalne.info.pl/phpmysqlp...oat-t40261.html*

Masz wszystko pieknie wyjasnione. działa na 100% bo sam korzystałem ; ) nie zapomnij o połączeniu z bazą danych
jooni22
Sklep postawiony jest w serwisie IAI, mam możliwość wyeksportowania do pliku pdf, następnie używam konwertera z pdf do html i tam mam możliwość czy mają te wszystkie produkty być w jednym pliku html oddzielone divami czy ma generować plik html z każdej strony w pdfie czyli jakieś 4 produkty na stronę a następne produkty już są w nowej podstronie. Tutaj podam kawałek kodu może wam to ułatwi zobrazowanie sytuacji i będziecie mogli mi coś doradzić:
  1. <div style="position:absolute;left:50%;margin-left:-421px;top:0px;width:842px;height:595px;border-style:outset;overflow:hidden">
  2. <div style="position:absolute;left:0px;top:0px">
  3. <img src="56fd3c74-070f-11e3-bb11-003048d80846_id_weqr_files/background01.jpg" width=842 height=595></div>
  4. <div style="position:absolute;left:180.00px;top:66.00px" class="cls_002"><span class="cls_002">TORBA ADIDAS SPORT PERFORMANCE SHOPPER</span></div>
  5. <div style="position:absolute;left:194.90px;top:91.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Adidas </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">V87483</span></div>
  6. <div style="position:absolute;left:106.60px;top:120.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12949-torba-adidas-sport-performance-shopper-.pricelist.html">http://www.adresstrony.pl/product-pol-12949-TORBA-ADIDAS-SPORT-PERFORMANCE-SHOPPER-.pricelist.html</A> </div>
  7. <div style="position:absolute;left:180.00px;top:253.00px" class="cls_002"><span class="cls_002">TORBA ADIDAS SPORT PERFORMANCE SHOPPER</span></div>
  8. <div style="position:absolute;left:194.90px;top:278.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Adidas </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">V42675</span></div>
  9. <div style="position:absolute;left:106.60px;top:307.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12948-torba-adidas-sport-performance-shopper-.pricelist.html">http://www.adresstrony.pl/product-pol-12948-TORBA-ADIDAS-SPORT-PERFORMANCE-SHOPPER-.pricelist.html</A> </div>
  10. </div>
  11. <div style="position:absolute;left:50%;margin-left:-421px;top:605px;width:842px;height:595px;border-style:outset;overflow:hidden">
  12. <div style="position:absolute;left:0px;top:0px">
  13. <img src="56fd3c74-070f-11e3-bb11-003048d80846_id_weqr_files/background02.jpg" width=842 height=595></div>
  14. <div style="position:absolute;left:180.00px;top:66.00px" class="cls_002"><span class="cls_002">TORBA ADIDAS SPORT PERFORMANCE SHOPPER</span></div>
  15. <div style="position:absolute;left:194.90px;top:91.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Adidas </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">V86335</span></div>
  16. <div style="position:absolute;left:106.60px;top:120.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12947-torba-adidas-sport-performance-shopper-.pricelist.html">http://www.adresstrony.pl/product-pol-12947-TORBA-ADIDAS-SPORT-PERFORMANCE-SHOPPER-.pricelist.html</A> </div>
  17. <div style="position:absolute;left:206.80px;top:253.00px" class="cls_002"><span class="cls_002">NIKE OPASKA NA GŁOWĘ HEADBAND</span></div>
  18. <div style="position:absolute;left:181.10px;top:278.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Nike </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">N.NN.07.710.OS</span></div>
  19. <div style="position:absolute;left:129.20px;top:307.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12946-nike-opaska-na-glowe-headband.pricelist.html">http://www.adresstrony.pl/product-pol-12946-NIKE-OPASKA-NA-GLOWE-HEADBAND.pricelist.html</A> </div>
  20. <div style="position:absolute;left:148.80px;top:359.20px" class="cls_002"><span class="cls_002">NIKE PORTFEL BASIC WALLET UNIWERSALNY NOWOŚĆ 2013 !</span></div>
  21. <div style="position:absolute;left:183.20px;top:384.80px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Nike </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">N.IA.08.404.NS</span></div>
  22. <div style="position:absolute;left:87.70px;top:413.20px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12945-nike-portfel-basic-wallet-uniwersalny-nowosc-2013-.pricelist.html">http://www.adresstrony.pl/product-pol-12945-NIKE-PORTFEL-BASIC-WALLET-UNIWERSALNY-NOWOSC-2013-.pricelist.html</A> </div>
  23. </div>
  24. <div style="position:absolute;left:50%;margin-left:-421px;top:1210px;width:842px;height:595px;border-style:outset;overflow:hidden">
  25. <div style="position:absolute;left:0px;top:0px">
  26. <img src="56fd3c74-070f-11e3-bb11-003048d80846_id_weqr_files/background03.jpg" width=842 height=595></div>
  27. <div style="position:absolute;left:210.00px;top:66.00px" class="cls_002"><span class="cls_002">NIKE OPASKA NA RĘKĘ WRISTBAND</span></div>
  28. <div style="position:absolute;left:181.10px;top:91.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Nike </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">N.NN.04.101.OS</span></div>
  29. <div style="position:absolute;left:131.20px;top:120.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12944-nike-opaska-na-reke-wristband.pricelist.html">http://www.adresstrony.pl/product-pol-12944-NIKE-OPASKA-NA-REKE-WRISTBAND.pricelist.html</A> </div>
  30. <div style="position:absolute;left:210.00px;top:253.00px" class="cls_002"><span class="cls_002">NIKE OPASKA NA RĘKĘ WRISTBAND</span></div>
  31. <div style="position:absolute;left:181.10px;top:278.60px" class="cls_002"><span class="cls_002">Producent: </span><span class="cls_003">Nike </span><span class="cls_004"> </span><span class="cls_002">Kod produktu: </span><span class="cls_005">N.NN.04.601.OS</span></div>
  32. <div style="position:absolute;left:131.20px;top:307.00px" class="cls_006"><span class="cls_006"> </span><A HREF="http://www.adresstrony.pl/product-pol-12943-nike-opaska-na-reke-wristband.pricelist.html">http://www.adresstrony.pl/product-pol-12943-NIKE-OPASKA-NA-REKE-WRISTBAND.pricelist.html</A> </div>
  33. </div>

Tutaj jest tylko kilka produktów, ale mam plik gdzie jest ich mnóstwo, dlatego ma ktoś pomysł jak to mądrze podzielić na podstrony tak jak w katalogu neosport ?.
kujol
1. W bazie trzymasz wszystkie produkty.
2. Tworzysz plik np. paginacja.php, w którym łączysz się z bazą i umieszczasz skrypt paginacji.
3. Gotowe.

Prosta paginacja
gitbejbe
to wyeksportuj wszystko do jednego pliku html, nastepnie napisz skrypt, który powybiera Ci tylko te rzeczy, które chcesz. Z tego co widze, kazdy produkt sklada sie ze zdjcia, nazwy, opisu i numeru. poczytaj o file_get_contents i wyrażeniach regularnych. Możesz napisać nawet taki skrypt, ktory odrazu to wszystko doda Ci do bazy danych, wtedy od paginacji dzieliłby Cię tylko malutki krok : )
jooni22
Tak, ale ja nie mam dostępu do bazy danych bo jest to postawione na serwerach IAI, więc raczej w php tego nie zrobię co ?. Doszedłem przed chwilą do takiego wniosku, czyli raczej zły dział. Chyba że ktoś może mnie nakierować co mogę zrobić z tego kodu HTML aby uzyskać taki efekt ?
phpion
Dostęp do ich bazy danych jest Ci zbędny. Napisz skrypt parsujący dokumenty HTML i umieść go na swoim serwerze. Dane wrzucaj do swojej bazy danych.
jooni22
A da się jakoś jaśniej ?, nie jestem zbyt dobry w pisaniu skryptów etc bo mam bardzo małą wiedzę na ten temat.
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.