Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pager (stronicowanie)
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
Stron: 1, 2, 3, 4, 5
emi23o9
Witam!
Mam pewien problemik. sad.gif Dalaczajac pager'a do swojego kodu, wydaje mi sie, ze robie wszystko ok, jednak wyskakuje mi nastepujacy błąd:
Parse error: parse error, unexpected T_CONST, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /www/data.users/fr/e/e/lsee.fr/www/lsee1/Pager.class.php on line 38

Pomóżcie, please.....

Z gory dziekuje i pozdrawiam
AxZx
napisz co masz w linii 38 pliku pager.class.php
emi23o9
const _GOTO_FIRST_ = 'gtf';

praktycznie jest to sam poczatek klasy
nospor
jak na moj gust to ty uzywasz klasy napisanej dla php5 pod php4 smile.gif
albo zmien wersje php którego uzywasz, albo weź wersję klasy dla php4
emi23o9
ajjjj.... sorka, moj blad.... worriedsmiley.gif wstyd i hanba, przepraszam... worriedsmiley.gif
primo
Możliwe, że o to co chcę zapytać już było w tym temacie, ale istnieje prawdopodobieństwo użytej nieznanej dla mnie nazwy stąd pytam po swojemu.

Otóż, mam stronkę, która wywoływana jest przez include i ma adres idex.php?op=2 --- użyłem tego napisanego przez Ciebie stronnicowania i działa ok, dopóki nie chcę dać na kolejną podstronę, ponieważ odsyła do strony, której nie ma: pp_idPegera=2. W celu usunięcia problemu oznaczyłem zmienną $pager = new Pager('op=2') oraz w klasie pager w linii 117 - $this->_paramPageNumber = ''.$id; --- wywaliłem spomiędzy średników znak pp_ --- nie wiem czy moje posunięcie było właściwe --- jeśli jest możliwość obejścia tego problemu to proszę o wskazówkę.
nospor
musisz wywolac konstruktor z drugim parametrem, u ciebie to by bylo mniej wiecej tak:
  1. <?php
  2. $pager = new Pager('idPagera', 'index.php?op=2');
  3. ?>

a kod klasy pozostaw stary.
Maksymus007
a ja chyba znalazłem błąd, a może i nie
  1. <?php
  2. $pager->SetTotalRecords($gal->getGalleriesCount());
  3. $pager->SetRecordsPerPage(1);
  4.  
  5. $pager_rend = $pager->Render();
  6.  
  7. echo $page = $pager->GetActualPage();
  8. ?>

powodowało wyrzucenie wyjątku o konieczności wywołania GetActualPage() przed Render(), co działało, ale zawsze zwracało 0;
natomiast po zmianie kodu metody GetActualPage() na
  1. <?php
  2. public function GetActualPage() {
  3. //if (!is_null($this->_indexRecordStart))
  4. // throw new Exception(sprintf($this->_errorMsg['call_set'], 'GetActualPage'));
  5. return $this->_actualPage;
  6. }
  7. ?>

działa bardzo ładnie i zwraca poprawny numer strony smile.gif
nospor
hehe, faktycznie, tak to jest jak sie robi ctrl+c, ctrl+v winksmiley.jpg
To co wykomentowales powinno wygladac tak:
  1. <?php
  2. if (is_null($this->_indexRecordStart))
  3. throw new Exception(sprintf($this->_errorMsg['call_get'],'GetActualPage'));
  4. ?>

Jutro to poprawie i wrzuce na serwer. thx smile.gif

edit: poprawki naniesione w ostatniej wersji ( 2.02 )
Maksymus007
Dalej bawiłem się Twoja klasa i brakowało mi w niej takiego bajeru, że jak mam jakieś parametry, np. index.php?a=b&c=2 to coby Pager mi się do tego dopisał. Jak brakowało to i zrobiłem, a nóż się komuś przyda.
Pager by Maksymus007
troche zmieniłem, troche dodałem. Przy czym ten tryb pracy wybieramy przed dodatkowy parametr w konstruktorze, przez co stara funkcjonalność jest niezmieniona.

Jeśli natomiast te dodatki miałby się znaleść w oficjalnym wydaniu to prosze o kontakt smile.gif
nospor
Cytat
Dalej bawiłem się Twoja klasa i brakowało mi w niej takiego bajeru, że jak mam jakieś parametry, np. index.php?a=b&c=2 to coby Pager mi się do tego dopisał.

Przeciez Pager ma taką mozliwosc i pare postow wyzej byla o tym mowa...

W Twoim przypadku nalezy tak wywolac konstruktor:
  1. <?php
  2. $pager = new Pager('idPagera', 'index.php?a=b&c=2');
  3. ?>

I juz.
Czasami dobrze jest przeczytac to, oco inni pytali, a jak sie nie znajdzie tego co sie szuka, to samemu zapytac smile.gif
Maksymus007
smile.gif To wiem, ale nie o to mi chodzilo smile.gif W tym co podałeś po pierwsze - musisz ten cały ciąg podać jako parametr konstruktora. A pobrać go nie pobiore, musze i tak parsować $_GET. Po drugie jak w tym ciągu będzie index.php?a=b&c=d&page=23 gdzie page to nasz Pager to klasa zrobi z tego index.php?a=b&c=d&page=23&page=22 na ten przykład.
Jednak mówimy o troche innym zastosowaniu smile.gif
nospor
No faktycznie ciut inaczej. Tak czy siak w "normalnych" (bez obrazy winksmiley.jpg ) skryptach to ludek (czyli ty) powinien wiedziec jakie ma parametry i zapodac sam wlasciwy link.

No ale kazdy robi jak lubi smile.gif
microh
Mam pytanko odnośnie funkcji createLink

  1. <?php
  2. function _createLink($title, $page, $text) {
  3. return '<a title="'.$title.'" href="'.
  4. ($this->_userWholeLink ? str_replace('#PAGE#', $page, $this->_linkPage) : ($this->_linkPage.$this->_linkSep.$this->_paramPageNumber.'='.$page)).'">'
  5. .$text.'</a>';
  6. }
  7. ?>


Otóż muszę do linku dodac jeszcze
  1. <?php
  2. &cat=" . $_GET['cat'] . "
  3. ?>

Jak tego dokonac?
Daimos
eh czytaj dwa posty wyżej, post nospor`a
agnieszka87
Prośba do ludzi dobrej woli sadsmiley02.gif

Przeróbcie mi poniższy kodzik na ten z pagerem.
On jest dla mnie zbyt pogmatwany, zebym umiala go tak zrobic.

PLSSS....

  1. <?php
  2. menu('Ostatnio dodane');
  3.  
  4. if(isset($_GET['typ'])) {
  5. $typ = '`typ` = ' . (int) $_GET['typ'];
  6. }else{
  7. $typ = "((`typ` >= 1 and `typ` <= 4) or (typ = '15') or (typ = '16') or (typ = '17'))";
  8. }
  9.  
  10. //$typ = (isset($_GET['typ']) ? '`typ` = ' . (int) $_GET['typ'] : '((`typ` >= 1 and `typ` <= 4) or (typ = '15'))');
  11. $cat = (isset($_GET['cat']) ? ' and `category` = ' . (int) $_GET['cat'] : '');
  12. $order = '';
  13. if ($_GET['top'] == 1)
  14. {
  15. $order = ' order by `ocena` desc';
  16. }
  17. elseif ($_GET['last'] == 1)
  18. {
  19. $order = ' order by `added` desc';
  20. }
  21.  
  22. $res = mysql_query('select * from `stuff` where ' . $typ . $cat);
  23. // ilosć trafień
  24. $hits = mysql_num_rows($res);
  25.  
  26. $res = mysql_query('select * from `stuff` where ' . $typ . $cat . $order . ' order by added desc limit ' . ((int) $_GET['currentpage'] * iijii) . ', ' . ((int) $_GET['currentpage'] * 10 + 10));
  27.  
  28. if ($hits == 0)
  29. {
  30. echo 'Nie ma żadnych rekordów w tej kategorii.';
  31. }
  32. else
  33. {
  34. while ($row = mysql_fetch_assoc($res))
  35.  
  36. {
  37. if($row['added']>0)
  38. $date = sprintf('<img src="ikonki/dodano.jpg">Dodano: %s <br />', date('Y.m.d', $row['added']));
  39. else
  40. $date = (string) '';
  41. $comments_count = (int) 0;
  42. $query = sprintf("SELECT COUNT(*) AS CommentsCount FROM komentarze WHERE stuff='%d'", $row['id']);
  43. $comments = mysql_query($query);
  44. if($comments) {
  45. $record = mysql_fetch_assoc($comments);
  46. $comments_count = $record['CommentsCount'];
  47. mysql_free_result($comments);
  48. }
  49. if($row['miniaturka']!='') { 
  50. $image = sprintf('<img src="%s" alt="%s" class="icon"align="right"width="133px"height="100px"border="3" />', $row['miniaturka'], $row['title']);
  51. } else {
  52. $image = '';
  53. }
  54. if(isset($categories[$row['category']]))
  55. $cat = sprintf("%s: ", $categories[$row['category']]);
  56. else
  57. $cat = (string) '';
  58. printf('<table bgcolor="#F3F3F3" id="list"><tr><td style="text-align:left; clear:both; padding:0 4px;">%s <b>%s</b><a href="index.php?page=display&id=%d" class="stufflink"style="font-weight:bold;">%s</a><br />%s<img src="ikonki/wykres.jpg">Ocena: %d<br /><img src="ikonki/wykres.gif">Wyswietlen: %d<br /><img src="ikonki/trabka.gif">Komentarzy: %d<br /><img src="ikonki/info.gif">Zasugerował: %s</td></tr></table>',
  59. $image,
  60. $cat, $row['id'], $row['tytul'],
  61. $date,
  62.  
  63.  
  64.  
  65.  
  66. $row['ocena'], $row['counter'],
  67. $comments_count, $row['login']);
  68. }
  69. }
  70.  
  71. echo '<div style="text-align: center">';
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78. /********* NUMEROWANIE *********/
  79.  
  80. $temp = min((int) $_GET['currentpage'] + 5, ceil((float) $hits / 9.0));
  81. echo '<center><table><tr><td>';
  82. if ($_GET['currentpage'] > 0) print("<a href="index.php?page=list&currentpage=" . ($_GET['currentpage'] - 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/poprzednia.jpg" border="0"></a></td>");
  83. for ($i = max((int) $_GET['currentpage'] - 4, 0); $i < $temp; $i++)
  84. { echo '<td>';
  85.  print("<a href="index.php?page=list&currentpage=" . $i . "&cat=" . $_GET['cat'] . "">[" . ($i+1) . "]</a> ");
  86.  echo '</td>';
  87.  if($i == ($temp - 1)) {
  88.  echo '<td style="width:80">';
  89. print("<a href="index.php?page=list&currentpage=" . ($_GET['currentpage'] + 1) . "&cat=" . $_GET['cat'] . ""><img style="float:right;" src="gfx/dalej.jpg" border="0"></a>");
  90.  echo '</td></tr>';
  91.  }
  92.  
  93. }
  94. $strona = $_GET['currentpage'] + 1;
  95.  echo '</table></center>';
  96.  if (!isset($_GET['currentpage'])) echo 'Jestes na stronie<b> 1</b>';
  97.  else echo 'Jestes na stronie <b>'.$strona.'</b>';
  98. /*******************************/
  99.  
  100. echo '</div></div>';
  101. echo "$div";
  102.  include ("test.php");
  103. ?>


Dziękuję za pmoc ohmy.gif worriedsmiley.gif

Pomoże ktoś questionmark.gif offtopic.gif
microh
A ja mam jakiś dziwny problem.
Konstruktor wywołałem tak:

  1. <?php
  2. if (isset($_GET['cat'])) $pager = new Pager('str','?page=list&cat='.$_GET['cat'].'');
  3. else $pager = new Pager('str');
  4. ?>


Wszystko ładnie pięknie, ale gdy zapodam link; http://skifa.pl/index.php?page=list&cat=0
to nie dość, że nie wyswietlaja sie linki "10 stron do przodu" i "Ostatnia strona". To jeszcze pager startuje czasem od 3 strony.

Błąd pagera?

// Mam najnowszaą wersję pod PHP5.
Balon
Cytat
o jeszcze pager startuje czasem od 3 strony.

Hm, a może dlatego, że pager zapisuje ostatnio odwiedzoną podstronę w sesji ? tongue.gif Można to wyłączyć oczywiście.

Osobiście wczoraj skorzystałem z tej klasy i jestem super zadowolony !
nospor
Cytat
To jeszcze pager startuje czasem od 3 strony.
Tak jak napisał Balon. Strona jest zapamietywana w sesji, i jeśli nie określisz jawnie strony to pójdzie z sesji jesli byla jakas. Oczywiscie mozna tym sterowac.

Cytat
to nie dość, że nie wyswietlaja sie linki "10 stron do przodu" i "Ostatnia strona"
Hmmm, przyjrzę się temu po weekendzie, bo teraz nie mam dostępu do kodów.

edit:
tak jak przypuszczalem, twoj dodatkowy adres nie ma wplywu na "niepojawianie" sie linkow. Wszystko jest generowane na podstawie zapodawanych danych w postaci liczby rekordow i twoj adres nie ma tu nic do tego. Byc moze ty, źle wyliczasz liczbę rekordów i wychodzi, ze stron jest mniej akurat przy tym adresie i dlatego nie dostajesz ostatnich linkow
Guli
Uzyłem tę klasę na swojej stronie ale coś nie działa. Chciałem podzielic stronę .html czy .php, w którym są obrazki na dwie części. Zamiast wyswietlać 10 chciałem aby wyswietlił po 5 z dwoma stronami.

Mam np. plik strona.php a w nim kod w divach gdzie dałem obrazki np.

  1. <div class="kolor">
  2. <a href="/images/1.jpg" title="foto" rel="lightbox[roadtrip]"><img alt="foto" src="/images/1a.jpg" /></a>
  3. <h2>Obrazek 1</h2>
  4. <ul>
  5. <li>Opis obrazka</li>
  6. </ul>
  7. </div>
  8.  
  9. <div class="kolor">
  10. <a href="/images/2.jpg" title="foto" rel="lightbox[roadtrip]"><img alt="foto" src="/images/2a.jpg" /></a>
  11. <h2>Obrazek 2</h2>
  12. <ul>
  13. <li>Opis obrazka</li>
  14. </ul>
  15. </div>

I takich jest 10 i chce podzielić na dwie cześci aby wyswietlało po 5 na dwóch stronach. Nie ma tam bazy mysql ani plików tekstowych. Jak dałem poniższy kod to niby wyswietla < 1 2 3 > ale po kliknięciu na stronę 2 nie dzieli w ogólę stronę i na każdej jest nadal 10 obrazków. Jak użyć tę klase ?
  1. <?php
  2. require_once('Pager.class.php', 'index.php?id=strona');
  3.  
  4.  $pager = new Pager('idPagera');
  5.  $pager->SetTotalRecords(10);
  6.  echo $pager->Render();
  7. ?>


Jak zastosować ten kod. Proszę o wskazówki.
Balon
hm Ty nie rozumiesz chyba jakiej zasadzie działa stronnicowanie. Proponuje Ci wpisać obrazki do tablicy i wyświetlać fotki pętlą for gdzie start i end pętli przekaże Ci klasa pagera.

edit: he sie gra sie ma winksmiley.jpg
nospor
No ale przeciez klasa ci nie podzieli pliku. Skad niby ona ma to wiedziec jak ma to zrobic? Zadaniem klasy jest zwrócenie dla Ciebie informacji, od jakiego indexu masz zaczac wyswietlac i na jakim skonczyc. A jak ty to wykorzystasz to juz Twoja sprawa.

Przyklad:
Masz tablicę o 100 elementach.
Ustawiles pager, by na stronie bylo po 10 elementow.
Klikasz na druga strone, a klasa zwroci ci informację, ze masz wyswietlisz elementy od 11 do 20. Ale wyswietlic musisz juz ty smile.gif

edit: cos mi sie net zmulil i Balon mnie wyprzedzil smile.gif

edit
No, niemalże rok nic nie zmieniałem w klasie. Czas wiec na nową wersję 2.5.
Wersja ta niestety nie jest kompatybilna wstecz. Wszakże łatwo możecie przejsc na nowe zmiany, ale zawsze to jakieś utrudnienie
Wiecej info tutaj

Cytat
Dalej bawiłem się Twoja klasa i brakowało mi w niej takiego bajeru, że jak mam jakieś parametry, np. index.php?a=b&c=2 to coby Pager mi się do tego dopisał.
Juz jest smile.gif
acztery
jak dla mnie 1 klasa. Znakomita robota. Tylko brakuje mi oprucz generowania pagera np tego co było we wcześniej wersji np Ilość wszystkich rekordów .... i możliwość zmiany tego tekstu na swój..
nospor
Cytat
Ilość wszystkich rekordów
hmmm, bylo tak? Juz nawet nie pamietam pierwszej wersji smile.gif
Ale to przeciez nie problem. Klasa zwraca ci tablicę pagera. Na podstawie tej tablicy możesz zrobic swoja wlasny wygląd taki jak chcesz.
Mozesz oddziedziczyc po klasie i nadpisac metodę toString() by osiągnąć to co chcesz. Do wyboru do koloru smile.gif
acztery
ok napisałem sobie, ale znalazłem 1 mały błąd chyba, że źle wykorzystuje klase

mam wyszukiwarkę ktora przeszukuje baze 1000 rekordów wpisze jakies tam słowo i znajdzie mi 500 rekordów i jak przechodze miedzy stronami np z 1 na 4 potem na 1 to porcjuje dla 1000.

mam takie cos:

  1. <?php
  2. $classDoc = new Doc();
  3. $classDoc->_where = $_GET['FOR'];
  4. $classDoc->_lang = Lang::getSesLang("SES");
  5. $classDoc->_str = $_POST['q']; // slowo z wyszukiwarki
  6. $classDoc->_order = "time DESC";
  7. $smarty->assign('cDoc2',$classDoc->likeCountDoc());
  8.  
  9. $pager = new Pager("list_doc");
  10. $pager->SetTotalRecords($classDoc->likeCountDoc());
  11. $pager->Make(true); 
  12. $renderPager = $pager->Render(); 
  13. $start = $pager->GetIndexRecordStart();
  14. $end = $pager->GetIndexRecordEnd();
  15. $smarty->assign('renderPager',$renderPager);
  16. $endes = $end - $start + 1;
  17.  
  18. $classDoc->_f = $start;
  19. $classDoc->_t = $endes;
  20.  
  21. $smarty->assign('RESULT',$classDoc->likeDocuments());
  22. ?>


ale cos nie nie tak po przejscu dalej zmienna z posta znika :/ a powinna byc widoczna nawet po przejscu na inna podstronę pagera. Musze szukane słowo przekazywać np w GET czy klasa to obsługuje?
nospor
Cytat
ale cos nie nie tak po przejscu dalej zmienna z posta znika
No tak. zmienne z posta znikają. Normalne przecież smile.gif POST jest widoczny tylko dla wyslanego formularza w danym żądaniu.
Jesli leci POST to musisz zapamietac go np. w sesji. Później jesli nie bylo posta to pobierasz go z sesji i juz smile.gif

Albo możesz formularz wysylac getem a nie postem. Klasa daje mozliwosc generowania linkow z uwzględnieniem parametrow w get.

edit:
tu to opisalem
http://nospor.pl/formularz-i-stronicowanie...-stanu-n26.html
become
czy przy pomocy tej klasy ustawie stronicowanie takie jak na wykop.pl i czy mogę ingerować w wygląd ?
Cysiaczek
Dziwne pytanie zadajesz... ale tak - ustawisz, choć musisz sam (głowy nie dam) napisać skrypt do wyglądu.
Najlepiej ściągnij i się przekonaj ;]

Pozdrawiam.
kallosz
Witam

Jest może możliwośc załączenia klasy pager do innej klasy ?

Pozdrawiam
nospor
Cytat
czy przy pomocy tej klasy ustawie stronicowanie takie jak na wykop.pl i czy mogę ingerować w wygląd ?

Mozesz. ALbo przekazujesz funkcje, ktora generuje wyglad, albo nadpisujesz klase, albo pobierasz tablice pagera i na jej podstawie generujesz wyglad. Przyklady w paczce.

Cytat
Jest może możliwośc załączenia klasy pager do innej klasy ?
Klasa jak klasa, robisz z nią co chcesz i gdzie chcesz. Moze sprecyzuj pytanie, jesli ta odpowiedź cie nie zadowala
radziowi
Witam bardzo dziękuję za klase działą bardzo fajnie:)

Mam jednak dziwny zachowanie klasy. Za kazdym razem jak wywala mi taki tekst powyżej tabeli. patrzylem w kod nie ma nic takiego. Czego to moze byc blad??

  1. <?php
  2. &#271;ťż
  3. ?>


Mam to połączone ze Smartami W kodzie tego tekstu nie mam na pewno .

Mam kod w pliku pager.php wszytko jest ok. Jesli zmienia nazwe pliku np import.php to wywala ten blad

Czy nazwy plikow maja cos do tej klasy??
become
Cytat(Cysiaczek @ 23.12.2007, 02:20:07 ) *
Dziwne pytanie zadajesz... ale tak - ustawisz, choć musisz sam (głowy nie dam) napisać skrypt do wyglądu.
Najlepiej ściągnij i się przekonaj ;]

Pozdrawiam.


No jakoś mi się nie udało.
Jak zrobić aby wyswietlila sie zawsze na pasku nawigacyjnym 1-y i ostatni numer strony a pomiedzy zakresami pojawialy sie kropki

np. tak:

1 ... 10 11 12 13 14 15 ... 123
Cysiaczek
Akurat jakiś czas temu przerobiłem metodę tej klasy:

  1. <?php
  2. protected function toString() {
  3. //print_pre($this->array);
  4. if ($this->totalRecords <= $this->RecordsPerPage)
  5. return '';
  6. $_str = '';
  7. $sep = ' ';
  8.  
  9.  
  10. //if (isset($this->array[self::GOTO_PREV_X]))
  11. //$_str .= $this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do tyłu', $this->array[self::GOTO_PREV_X][self::LINK], '<<').$sep;
  12. if (isset($this->array[self::GOTO_PREV]))
  13. $_str .= $this->createHTMLLink('Poprzednia strona', $this->array[self::GOTO_PREV][self::LINK], 'poprzednia').$sep;
  14.  
  15. if (isset($this->array[self::GOTO_FIRST]))
  16. $_str .= $this->createHTMLLink('Pierwsza strona', $this->array[self::GOTO_FIRST][self::LINK], $this->array[self::GOTO_FIRST][self::PAGE]).' ...'.$sep;
  17.  
  18. foreach ($this->array[self::PAGES] as $_page => $_pageLink){
  19. if (!$_pageLink)
  20. $_str .= '<span><b>'.$_page.'</b></span>';
  21. else
  22. $_str .= $this->createHTMLLink("Strona ".$_page, $_pageLink, $_page);
  23. $_str .= $sep;
  24. }
  25.  
  26. if (isset($this->array[self::GOTO_LAST]))
  27. $_str .= $this->createHTMLLink('Ostatnia strona', $this->array[self::GOTO_LAST][self::LINK], '... '.$this->array[self::GOTO_LAST][self::PAGE]);
  28.  
  29. if (isset($this->array[self::GOTO_NEXT]))
  30. $_str .= $sep.$this->createHTMLLink('Następna strona', $this->array[self::GOTO_NEXT][self::LINK], 'następna');
  31. //if (isset($this->array[self::GOTO_NEXT_X]))
  32. //$_str .= $sep.$this->createHTMLLink($this->array[self::PAGES_PER_NAV].' stron(y) do przodu', $this->array[self::GOTO_NEXT_X][self::LINK], '>>');
  33.  
  34.  
  35. return $_str;
  36. }
  37. ?>


W każdym razie jest z kropkami ;p
nospor
Cytat
Mam jednak dziwny zachowanie klasy. Za kazdym razem jak wywala mi taki tekst powyżej tabeli. patrzylem w kod nie ma nic takiego. Czego to moze byc blad??
hmmm, czyzby BOM? Takie krzaczki co dodaje plik w kodowaniu UTF8? U mnie tego nie ma bo pisalem to normalnym edytorem, ale moze ty robiles jakiegos "Zapisz" na mojej klasie i ci sie BOM dopisal?
pawel.s
witajcie mam problem nie chce wyswietlic mi sie pager
mam cos takiego
  1. <?php
  2. $sql = 'select count(*) from notice';
  3. $result = mysql_query($sql);
  4. $row = mysql_fetch_array($result);
  5. $recordsCount = $row[0];//pobranie liczby rekordów  
  6. $pager = new Pager('p');  
  7. $pager->SetTotalRecords(3);//ustawienie liczby rekordów  //wygenerowanie pagera i zapamietanie go w zmiennej w celu  //pozniejszego wyswietlenia  
  8. $renderPager = $pager->Render();  
  9. $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego  
  10. $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego  //zapytanie z uwzglenieniem stronicowania  
  11. $sql = 'select SQL_CALC_FOUND_ROWS * from notice limit '.$start.','.($end - $start + 1);  //...pobranie wyników i ich wyswietlenie  
  12. $result = mysql_query($sql);
  13. $row = array();
  14. while ($row = mysql_fetch_assoc($result)){
  15.  $res[] = $row;
  16. }
  17. $res = $res
  18. ?>


potem
  1. <?php
  2. smarty->assign('pager',$renderPager);
  3. ?>

i w tmplejcie

  1. <div id="p">{$peger}</div>

czy dobrze robie questionmark.gif
vokiel
może przez literówkę w template: e => a
  1. <div id="p">{$pager}</div>
pawel.s
nie to nie przez to wogole jak zrobie vardump z $pagera to jest pusty
nospor
A jakiej wersji pagera uzywasz? Najnowszej 2.5 ? No to zjadles Make(). Zajrzyj do przykladow w paczce do sciągniecia. Tam masz pokazane jak prawidłowo uzyc nowej wersji
pawel.s
wersja 2.0 dla php5 takiej uzywam co jest nie tak questionmark.gif
nospor
  1. <?php
  2. $pager->SetTotalRecords(3)
  3. ?>

Czemu ustawiasz licze rekordow na 3? Przeciez wczesniej wyliczasz $recordsCount, ktore jest prawdziwą liczbą rekordow i tą tę zmienną powinienes ustawic jako liczbę rekordow. Teraz ustawiasz 3. A jesli liczba rekordow jest mniejsza od liczby rekordow na stronie, to pager nic nie generuje bo nie ma sensu generowac jedną strone.
pawel.s
hej, oki wyswietlil mi sie poprawnie pager
dalem mu
  1. <?php
  2. $pager->SetRecordsPerPage(3);
  3. ?>

mam aktualnie 11 rekordow, jak klikam w pager na aby mi sie wyswietlily kolejne 3 rekordy to xxx.php?pp_p=2 co dalej robic... questionmark.gif
nospor
Cytat
co dalej robic...
odpowiem ci jak maszyna: zapytaj inaczej lub specyzuj problem bo ni w ząb nie kumam oco ci chodzi.
Co dalej robic? idź na cole czy coś, pager zrobi za ciebie wszystko na co go stac. winksmiley.jpg
pawel.s
jak chce wyswitlic kolejne 3 rekordy to pojawia mi sie xxx.php?pp_p=2 nie wiem co mam zrobic aby pager dzialal...
nospor
normalnie masz jakies kosmiczne problemy.
Pokaza caly kod jaki masz.
pokaz rowniez kod html jaki ma w sobie Twoj $renderPager
pawel.s
oto moj kod :
  1. <?php
  2. switch($do){
  3. case 'show_notice':
  4.  
  5. $db = mysql_connect('localhost','root',xxxxx');
  6. mysql_select_db('xxxx',$db);
  7.  
  8. $sql = 'select count(*) from notice';
  9. $result = mysql_query($sql);
  10. $row = mysql_fetch_array($result);
  11. $recordsCount = $row[0];  
  12. $pager = new Pager('p');  
  13. $pager->SetTotalRecords($recordsCount);
  14. $pager->SetRecordsPerPage(3);
  15. $renderPager = $pager->Render();  
  16. $start = $pager->GetIndexRecordStart();  
  17. $end = $pager->GetIndexRecordEnd();  
  18. $sql = 'select * from notice limit '.$start.','.($end - $start + 1);  
  19. $result = mysql_query($sql);
  20.  
  21.  
  22. $row = array();
  23. while ($row = mysql_fetch_assoc($result)){
  24. $res[] = $row;
  25. }
  26. $res = $res;
  27. $smarty->assign('pager,$renderPager);
  28. break;
  29. }
  30. ?>


  1. <div id="p">{$pager}</div>


tak jak pisalem wysiwtlaja mi sie 3 rekordy z bazy danych nastepnie poprawnie pager
1 2 3 4 >
jak klikne w pager 2 to chce mnie przekierowac na show.php?pp_p=2 i pojawi sie Notice: Undefined variable: do in ....
nospor
Cytat
Notice: Undefined variable: do in ....
A widzisz... brakuje ci $do, wzgledem ktorej robisz switch i pager. Zakladam ze pierwotnie $do masz w url a pager generuje ci linki bez tego $do. Pisalem juz w tym temacie jak zrobic by generowalo linki takie jak chcesz. Poszukaj.

A gdybyś skorzystal z wersji 2.5 to moglbys ustawic by sam automatycznie budowal linki z parametrami co byly w url
pawel.s
nie moge kurcze tego rozgrysc w linku mam /_admin/show.php?do=show_notice
kombinowalem cos z konstruktorem ale nie chce mi to wyjsc jak to zrobic questionmark.gif

dobra poradzilem sobie dziala dzieki wielkie i pozdrawiam...
Legro
Cześć @nospor

Korzystam z Twojej klasy 2.0 pod PHP4. Działa mi znakomicie, jednakże mam jeden problem. Otóż gdzie i jaki parametr powinienem dodać aby moje linki wyglądały tak:

Kod
cos.php?kategoria=3&pp=3


(gdzie kategoria=3 to id mojej kategorii, a pp=3 to numer strony)


..........EDIT
przepraszam bardzo.. ;( juz sobie poradziłem winksmiley.jpg

wystarczyło zrobić tak:

Kod
$pager = new Pager ($_GET['id'], 'cos.php?kategoria='.$_GET['id']);
aasat
Super robota, świetna klasa, podziękowania dla autora

A teraz pytanie smile.gif
Czy jest jakiś sposób na niceurl? bo widze w TODO, ze cos ma byc z tym pomyślane
nospor
Cytat
Czy jest jakiś sposób na niceurl? bo widze w TODO, ze cos ma byc z tym pomyślane

Sek w tym, ze kazdy moze miec swoj wlasny niceUrl i sam z automata nie jestem w stanie go budowac.

W klasie Pager.class.php masz metode makeLink() (w niej masz te TODO). Funkcja ta jest wywolywana, gdy drugi parametr konstruktora jest ustawiony na null. W metodzie tej musisz dac generowanie swojego ladnego urla. Ja tak robie u siebie w projekcie.
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.