Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Prosty Pager
Forum PHP.pl > Forum > Przedszkole
Raven1122
Witam, mam taki kodzik:
  1. function news(){
  2. //Ilosc wiadomosci w bazie:
  3. $sql = "SELECT * FROM arena_news";
  4. $query = mysql_query($sql) or die(mysql_error());
  5. $newsow = mysql_num_rows($query);
  6. //Ustawienia pagera
  7. $ile = 5;
  8. $nm = $_GET['page'];
  9. //Wyswietlanie newsow
  10. $offset = $nm*$ile;
  11. $sql = "SELECT * FROM arena_news LIMIT $offset, $ile";
  12. $query = mysql_query($sql) or die(mysql_error());
  13. while($row = mysql_fetch_array($query)){
  14. echo ("<b>");
  15. echo $row['title'];
  16. echo ("</b><br />");
  17. echo ("<small>");
  18. echo $row['info'];
  19. echo ("</small><br />");
  20. echo $row['short'];
  21. echo ("<br /><br />");
  22.  
  23. }
  24. }


Tylko, że teraz nie wiem jak wyswietlic numerki do poszczegolnych stron, wyswietlac wyswietla tylko 5 i testowalem modyfikujac page w linku, jakies pomysly?

Dopisalem teraz takie cos:
  1. //Strony
  2. $i = $newsow/$ile;
  3. $nr = 1;
  4. $page = 1;
  5. while($i > 0){
  6. echo <a href='/index.php?page=$page'>;
  7. echo [ $page ];
  8. echo </a>;
  9. $i - 1;
  10. $page + 1;
  11.  
  12. }


ale nie wyswietla mi sie wogole strona gdy to jest ;p

ktos pomoze?
nospor
while($i > 0){
Przecież $i masz zawsze wieksze od 0 wiec ta petla trwa w nieskonczonosc....
$i - 1;
Przecież to nie jest zmniejszanie $i...
To jest zmniejszanie:
$i = $i - 1;
lub
$i--;
Mysl troche

ps:
echo [ $page ];
echo </a>;
To jakiś pseudo kod? Nie wiesz ze tekst bierze się w apostrog?
echo '['. $page.' ]';
echo '</a>';

ANalogicznie reszta
Raven1122
  1. //Strony
  2. $i = $newsow/$ile;
  3. $nr = 1;
  4. $page = 1;
  5. while($i != 0){
  6. echo <a href='/index.php?page=$page'>;
  7. echo [ $page ];
  8. echo </a>;
  9. $i--;
  10. $page++;
  11.  
  12. }


zrobilem cos takiego, ale strona dalej sie nie wyswietla
Rysh
6,7,8 linijka jest błędna.
Raven1122
  1. echo ("<a href='/index.php?page=$page'>");
  2. echo ("[ $page ]");
  3. echo ("</a>");

ma byc tak o?
Bo dalej nie wyswietla mi strony
nospor
To pewnie masz jeszcze jakieś błędy PARSE ERROR...
Włącz w php.ini wyświetlanie błędów a zobaczysz je
Rysh
Cytat(Raven1122 @ 23.03.2012, 11:11:13 ) *
  1. echo ("<a href='/index.php?page=$page'>");
  2. echo ("[ $page ]");
  3. echo ("</a>");

ma byc tak o?
Bo dalej nie wyswietla mi strony

Nie wiem dlaczego rozbijacie takie pierdoły na 3 części:
  1. echo "<a href='/index.php?page=". $page ."'>[ ". $page ." ]</a>";

To tą część kodu masz dobrze. Teraz pomyśl nad pętlą while.
Raven1122
na ta chwile jedyne co moge zrobic to:
  1. ini_set('display_errors','1')


bo nie mam dostepu do php.ini przez ftp chyba
nospor
No to pech...bo parse errory tylko z poziomu php.ini włączysz.
Raven1122
  1. //Strony
  2. for($i=1; $i<=ceil($newsow/$ile); $i++){
  3. $page = $i;
  4. $link = $i++*$limit;
  5. echo "<a href='/index.php?page=". $link ."'>[ ". $page ." ]</a>";
  6. }


napisalem cos takiego ale dalej nie dziala, nie mam juz sil ;p
Rysh
Tworzysz pętle ze zmienną $i = 1. Każesz wykonać pętle za każdym razem gdy $newsow/$ile (zaokrąglając w górę) jest większe lub równe. I po każdym wykonaniu zwiększasz liczbę o 1. OK. Może być, chociaż nie wiem czym jest zmienna $newsow i $ile (jeśli ich nie określiłeś skrypt przyjmie że jest to 0).

A teraz pętla:
- przypisujesz do $page: $i (po co?!)
- przypisujesz do $link: ($i++*$limit) wtf?

Znowu nie wiem czym jest $limit...
Używasz takich zmiennych, które nie wiem co zawierają: $newsow, $ile, $limit - jak to ma działać? snitch.gif
Raven1122
Rysh te zmienne sa wyzej ;p
Caly kod:

  1. //Ilosc wiadomosci w bazie:
  2. $sql = "SELECT * FROM arena_news";
  3. $query = mysql_query($sql) or die(mysql_error());
  4. $newsow = mysql_num_rows($query);
  5. //Ustawienia pagera
  6. $ile = 5;
  7. $nm = $_GET['page'];
  8. //Wyswietlanie newsow
  9. $offset = $nm*$ile;
  10. $sql = "SELECT * FROM arena_news LIMIT $offset, $ile";
  11. $query = mysql_query($sql) or die(mysql_error());
  12. while($row = mysql_fetch_array($query)){
  13. echo ("<b>");
  14. echo $row['title'];
  15. echo ("</b><br />");
  16. echo ("<small>");
  17. echo $row['info'];
  18. echo ("</small><br />");
  19. echo $row['short'];
  20. echo ("<br /><br />");
  21.  
  22. }
  23. //Strony
  24. for($i=1; $i<=ceil($newsow/$ile); $i++){
  25. $page = $i;
  26. $link = $i++*$limit;
  27. echo "<a href='/index.php?page=". $link ."'>[ ". $page ." ]</a>";
  28. }
Rysh
$limit tam dalej nie widzę.

Chyba wiem co chcesz teraz osiągnąć:
  1. for($i=1; $i<=ceil($newsow/$ile); $i++){
  2. echo "<a href='/index.php?page=". $i ."'>[ ". $i ." ]</a>";
  3. }


I popraw te linijki 13-20!
Raven1122
No jak dodaje ta petle for to mi sie wogole strona nie chce wyswietlac, i nie wiem dlaczego, miedzy innymi petla for ma wyswietlac numerki w paginacji
Rysh
Nie lubię jak mi ktoś coś mówi, że nie chce mu działać jak u innych działa. Proszę to okrojona wersja:
  1. <?php
  2. $newsow = rand(0,300);
  3. $ile = 5;
  4. echo 'Liczba newsow w bazie: '. $newsow .'<br /><br />';
  5. for($i=1; $i<=ceil($newsow/$ile); $i++){
  6. echo "<a href='./raven.php?page=". $i ."'>[ ". $i ." ]</a><br />";
  7. }
  8. ?>

I działanie: http://rysh.tk/forum/raven.php
daniofantasy
zapytanie do bazy juz masz, a wiec pora na pager:

  1. ###=====|Pager|=====###
  2.  
  3. $sSearchSQL = str_replace('select *','select count(*) as Qty',$sSearchSQL);
  4. $aProductsCount = Core::dbSelect($sSearchSQL);
  5. $iQty = $aProductsCount[0]['Qty'];
  6. $iLimiter = 0;
  7. $iLimiter = $_GET['Page'] * 6;
  8. $iLimiter = $iLimiter - 6;
  9. $iLimiter = $iLimiter;
  10. $iStartId = $iLimiter;
  11.  
  12. if ($_GET['Page'] < 1) {
  13. $Limit = ' 0,6';
  14. } else {
  15. $Limit = ' '. $iStartId .',6';
  16. }
  17.  
  18. $iPagesQty = $iQty;
  19. $iPagesQty = floor(((int)$iPagesQty)/6);
  20. $iPagesQty = $iPagesQty + 1;
  21.  
  22. ###=====|Get Products - Search Query|=====###
  23.  
  24. if ($_GET['Page'] < 1)
  25. # If current site is Main Site - show only 6 products
  26. $sSearchSQL = $sSearchSQL .' limit 6';
  27. else
  28. $sSearchSQL = $sSearchSQL .' limit'. $Limit;
  29.  
  30. if (is_numeric($_GET['catid']) && $bCatsNone == true) {
  31. $sSearchSQL = '';
  32. }
  33.  
  34. if (!empty($sSearchSQL))
  35. $sSearchSQL = str_replace('select count(*) as Qty','select *',$sSearchSQL);
  36. $aProducts = @Core::dbselect($sSearchSQL);


i jako $sSearchSQL wrzuc Twoje zapytanie wyszukujace
Raven1122
lol, az tak rozwiniety nie jestem ;p kod to czarna magia ;p moze mi tos wytlumaczyc jak to dziala?
daniofantasy
ok - wiec tak:

na poczatek wrzucasz do $sSearchSQL twoje zapytanie wyszukujace (czyli generalnie wszystko co masz po slowie select w Twoim zapytaniu), czyli:

$sSearchSQL = ' from arena_news';

potem wklejasz to, co Ci poslalem

i jak dasz pod tym
  1. print_r($aProducts);


to masz tablice z 6 rekordami z bazy - chcesz miec wiecej, to zmien wszystkie liczby 6 na cos innego w tym kodzie co Ci poslsalem - np na 10 (wtedy bedzie 10 wynikow na strone) lub na zmienna

i tu masz funkcje db_select ktorej uzywam do zapytan do bazy w moim kodzie - wrzuc ja na poczatku skryptu:

  1. function dbSelect($sQuery) {
  2. $rResult = mysql_query($sQuery);
  3. if (sizeof($rResult) > 0 && !empty($rResult) && @mysql_num_rows($rResult) != 0) {
  4. while ($aResult = mysql_fetch_array($rResult)) {
  5. $aResults[] = $aResult;
  6. }
  7. }
  8. return $aResults;
  9. }


i jak np po tym odpalisz Twoj skrypt i dodasz &Page=2

to masz kolejne 6 czy 10 rekordow z bazy

tu masz jeszcze kodzik ktory ladnie Ci wysiwetli strony:

  1. if ($iQty > 6 && !empty($iQty)) {
  2. $bPager = true;
  3. }
  4.  
  5. ###=====|Pager|=====###
  6. $iQty = floatval($iQty/6);
  7. if ($bPager == true) {
  8. if (sizeof($aProduct) > 0) {
  9. if ($iQty > 1) {
  10. $iWidthRecounted = ($iQty+1) * 55;
  11. echo '
  12. <div class="Clear" style="height: 15px;"></div>
  13. <div style="margin: 0 auto; width: '. $iWidthRecounted .'">
  14. <div style=" font-weight: bold; text-align: center;">';
  15. for ($x=0, $y=$iQty; $x<$y; $x++) {
  16. echo '
  17. <div class="BuyNowButton" onclick="document.location.href=\'id,ProductList';
  18. if (is_numeric($_GET['catid'])) echo ',catid,'. $_GET['catid'] .'';
  19. if ($_POST['ShowOnly'] == 'Featured') echo ',ShowFeatured,true';
  20. echo ',Page,'. ($x+1) .'.html\';" style="width: 55px; float: left;">
  21. <div class="GrayButtonLeft"></div>
  22. <div class="GrayButtonCenter" style="padding-top: 1px; height: 21px;">
  23. <a href="java script: void(0);" style="text-decoration: none; text-align: center; color: black; font-weight: bold; cursor: pointer; text-shadow: 1px 1px 1px gray;">&nbsp;'. ($x + 1) .'&nbsp;</a>
  24. </div>
  25. <div class="GrayButtonRight"></div>
  26. </div>';
  27. }
  28. echo '
  29. </div>
  30. <div style="clear: both; height: 10px;"></div>
  31. </div>';
  32. }
  33. }
  34. }
  35. ?>
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.