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
piraciq
Witam

ja zapodałem tą klasę do joomli i spisuje się znakomicie :]


Pozdrawiam
aasat
Niceurl można bardzo łatwo utworzyć

np chcemy aby nasze linki wyglądały tak, jeżeli pracujemy np. z Zend Framework

http://www.example.com/news/archiwum/page/1
http://www.example.com/news/archiwum/page/2
http://www.example.com/news/archiwum/page/3

itd

Najprościej uzyskać to w ten sposób

$pager = new Pager('page', '/news/archiwum/page/#PAGE#');
$pager->SetActualPage($this->_request->getParam('page'));

pozdrawiam
szumigt
Witam. Właśnie próbuję zastosować kod Pager-a na stronie. Wykonałem na razie taki kod
CODE

$pager = new Pager('p','product_list.php?group='.$_GET['group']);

$pager->SetTotalRecords(1587);
$pager->SetRecordsPerPage(6);

$pager->Make(true);

$start = $pager->GetIndexRecordStart();
$end = $pager->GetIndexRecordEnd();
$str->smarty -> assign('pager',$pager->Render());

function getClothes($kat,$start,$end) {

$sql='SELECT id as id_produktu, nazwa,symbol FROM produkty WHERE gr='.$kat.' LIMIT '.$start.','.($end - $start + 1);

return $db->getArray($sql); // AdoDB

}


Kod ma jeszcze małą niedogodność w postaci stałej liczby rekordów a w projekcie jest ona zmienna bo liczba artykułów z danej kategorii jest inna za każdym wygwenerowaniem strony. To jestem w stanie obejść bo wiem że trzeba wykonać zapytanie do BD o oblicznie ilości art z kategorii. Problem pozostaje jednak przy zmianie kategori i braku ustawionej zmiennej $_GET['ppp']. Wtedy przy przełączniu na inna kategorię numer strony pozostaje na tej samej wartości ... Nie wiem czy wyjaśniłem to dokładnie ... krótko mówiąc chodzi o to że przy przełączniu na inną stronę na której nie ma ustawionej zmiennej ppp numer strony pozstaje z poprzedniej. :-)

Co tutaj trza poprawić w tym kodzie ... pomożecie questionmark.gif
nospor
Cytat
Kod ma jeszcze małą niedogodność w postaci stałej liczby rekordów a w projekcie jest ona zmienna bo liczba artykułów z danej kategorii jest inna za każdym wygwenerowaniem strony. To jestem w stanie obejść bo wiem że trzeba wykonać zapytanie do BD o oblicznie ilości art z kategorii
No tak, liczbe rekordow musisz wyliczac, podawalem to w przykladach

Cytat
Problem pozostaje jednak przy zmianie kategori i braku ustawionej zmiennej $_GET['ppp']. Wtedy przy przełączniu na inna kategorię numer strony pozostaje na tej samej wartości ...
Za bardzo nie wiem oco ci chodzi.
szumigt
Uuuooo matko jaka pierdoła ze mnie. Już poprawiłem.
Chodziło o to że jeśli miałem linki w postaci
Link1: product.php?group=1
Link2: product.php?group=2
itd...
to przy przejściu x link1 do link2 strona pozostawała taka sama jak na link1. Ale przecież wystarczyło zrobić
product.php?group=1&ppp=1 i po zawodach. Chociaż nie wiem czemu klasa Pager nie ustawia sama w momencie kiedy nie jest zdefinowana zmienna ppp to przyjmuje stronę nr1... chyba że coś w kodzie pomieszałem.
nospor
Cytat
Chociaż nie wiem czemu klasa Pager nie ustawia sama w momencie kiedy nie jest zdefinowana zmienna ppp to przyjmuje stronę nr1

Jak nie jest zdefiniowana to ustawia sama na 1, chyba ze juz chodziles po pagera, to wowczas pamieta stan pagera w sesji i z tego korzysta.
Jakbys dla kazdej kategorii nadawal oddzielne id dla pagera, to kazda kategoria by miala swoje wlasne pamietanie, a nie tak ja teraz korzystają z tego samego smile.gif
nieraczek
Mogę się zapytać po co używasz sesji w Twoim stronicowaniu ? Do zapamiętywania, na której stronie byłem ostatnio ? Bo mi to niepotrzebne. tongue.gif Czy jesli zakomentuję session_start() to narażam się na jakieś problemy ? biggrin.gif

  1. <?php
  2. //session_start();
  3. require_once('pager/Pager.class.php');
  4. $sql = 'select count(*) from wiadomosci';
  5. $result = mysql_query($sql);
  6. $row = mysql_fetch_array($result);
  7. $recordsCount = $row[0];//pobranie liczby rekordów
  8. try{
  9.    $pager = new Pager('idPagera');
  10.    $pager->SetTotalRecords($recordsCount);
  11.    $pager->Make(true);
  12.    $pag = $pager->Render();
  13.    $start = $pager->GetIndexRecordStart();
  14.    $end = $pager->GetIndexRecordEnd();
  15. }
  16. catch (Exception $e) {
  17.    echo $e->getMessage();
  18. }
  19.  
  20. //zapytanie z uwzglenieniem stronicowania
  21. $sql = 'select * from wiadomosci limit '.$start.','.($end - $start + 1);
  22. //...pobranie wyników i ich wyswietlenie
  23.    $result = mysql_query($sql) or die('blad zapytania1');
  24.  
  25.  
  26.    while($val = mysql_fetch_array($result))
  27.    {
  28.        $wiadomosc = $val['tresc'];
  29.        echo "$wiadomosc<br/><br/><br/>";
  30.    }
  31.    
  32. echo $pag;//wyswietlenie pager'a
  33.  
  34. ?>


I jeszcze gdzie i co w Pager.class.php dopisać: "Strona AKTUALNA_STRONA z LICZBA_STRON' questionmark.gif

I jeszcze mała sugestia odnośnie Twojej klasy - dodaj pogrubienie <strong> </strong> do aktualnego numeru wyświetlanej strony w klasie Pager.class.php to znaczy:
  1. <?php
  2. $_str .= '<span><strong>'.$_page.'</strong></span>';
  3. ?>


Bo bez tego nie idzie się połapać na jakiej jest sie stronie tongue.gif
nospor
Cytat
Mogę się zapytać po co używasz sesji w Twoim stronicowaniu ? Do zapamiętywania, na której stronie byłem ostatnio ? Bo mi to niepotrzebne.


  1. <?php
  2. //....
  3. $pager = new Pager('idPagera');
  4. $pager->SetUseSession(false);
  5. //.....
  6. ?>

Cytat
I jeszcze gdzie i co w Pager.class.php dopisać: "Strona AKTUALNA_STRONA z LICZBA_STRON'

  1. <?php
  2. //...
  3. echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  4. echo $pag;//wyswietlenie pager'a
  5. //...
  6. ?>
nieraczek
Dzięki - a nawiasem mówiąc - dopiero teraz zwróciłem uwagę na: $pager = new Pager('idPagera'); i na to, że trzeba tu podać liczbę. smile.gif

plik ze stronicowaniem:
  1. <?php
  2. require_once('pager/Pager.class.php');
  3. $sql = 'select count(*) from wiadomosci';
  4. $result = mysql_query($sql);
  5. $row = mysql_fetch_array($result);
  6. $recordsCount = $row[0];//pobranie liczby rekordów
  7. try{
  8.    $pager = new Pager(1);
  9.    $pager->SetUseSession(false);
  10.    $pager->SetTotalRecords($recordsCount);
  11.    $pager->Make(true);
  12.    $pag = $pager->Render();
  13.    $start = $pager->GetIndexRecordStart();
  14.    $end = $pager->GetIndexRecordEnd();
  15. }
  16. catch (Exception $e) {
  17.    echo $e->getMessage();
  18. }
  19.  
  20. //zapytanie z uwzglenieniem stronicowania
  21. $sql = 'select * from wiadomosci ORDER BY datadodania DESC limit '.$start.','.($end - $start + 1);
  22. //...pobranie wyników i ich wyswietlenie
  23.    
  24.    
  25.    echo "<br/>";
  26.    $result = mysql_query($sql) or die('blad zapytania');
  27.  
  28.    while($val = mysql_fetch_array($result))
  29.    {
  30.        $wiadomosc = $val['tresc'];
  31.        echo "$wiadomosc<br/><br/><br/>";
  32.    }    
  33.  
  34. echo "<div class='pomaranczowy'>";
  35. echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  36. echo "</div>";    
  37. echo $pag;//wyswietlenie pager'a
  38. ?>


Drobna modyfikacja Pager.class.php:
  1. <?php
  2. public $RecordsPerPage = 5; //ilosc rekordow na stronie
  3.  
  4. .......................................
  5.  
  6. if (!$_pageLink)
  7.                $_str .= '<span class="uwypuklenie">'.$_page.'</span>';
  8.            else
  9. ?>



Dodanie paru styli i oto efekt:




Dzięki nospor - rewelacyjna jest ta Twoja klasa. smile.gif
nospor
Cytat
i na to, że trzeba tu podać liczbę.
Skad ten pomysl? Rownie dobrze moze tam byc "alamakota". Ja osobiscie nadaje tam wlasnie nazwy tekstowe a nie liczby
nieraczek
O dzięki za info smile.gif
pianta_d
Witam

Mam problem z sortowaniem po dwóch kolumnach.
Mam kod
  1. <?php
  2. $pager = new EPager('id', null, false,$orders,array('typ_ogloszenia' => 'DESC', 'nazwa' => 'ASC'));
  3. ?>

jednak nie srotuje po dwóch kolumnach tylko po pierwszej czyli typ_ogloszenia.

Jak zrobić, aby sortowało po dwóch lub więcej wybranych kolumnach?


EDIT



Poradziłem sobie, dzieki
hondek
Witam!
Mam taki problem z klasa Pager:
kiedy przechodze np. dalej ">" Pager dodaje mi do urla : ppidPager=<nr_strony>
i tak np. po kilku przejsciach mam takiego url'a:
http://localhost/index.php?menu=stats&ppidPagera=1&ppidPagera=2&ppidPagera=3&ppidPagera=4 ... itd..

Wie ktos moze czym to moze byc spowodowane?
Tak tworze obiekt klasy :

  1. <?php
  2. $res = mysql_query($que);
  3.    $recordsCount = mysql_num_rows($res);
  4.    try{
  5.        $pager = new Pager('idPagera');
  6.        $pager->RecordsPerPage = 10; // Ilość rekordow na strone
  7.        $pager->SetTotalRecords($recordsCount);
  8.        $pager->Make(true);
  9.        $pag = $pager->Render();
  10.        $start = $pager->GetIndexRecordStart();
  11.        $end = $pager->GetIndexRecordEnd();
  12.    }
  13.    catch (Exception $e) {
  14.        echo $e->getMessage();
  15.    }
  16. ?>
nospor
a jak wyswietlasz linki pagera? Sam cos jeszcze generujesz?
hondek
nie, poprostu <?=$pag?>

jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'
nospor
Cytat
jedyna rzecz jaka zmienilem w klasie to znak dolaczenia z '?' ma '&'
no to zapewne to jest wlasnie przyczyna problemu winksmiley.jpg
tomall
Witam
Czytam i czytam i znaleźć nie mogę.
Jak wyciągnąć z pagera tablicę z linkami, zamiast stringa z gotowym formatowaniem.
Wszędzie jest napisane, że wystarczy na 3 parametr Render dać true. Jednakże mi to nie działa.
  1. $pag = $pager->Render('','',true);

Po takim ustawieniu nadal w zmiennej $pag mam gotowe sformatowane linki.
Używam Smarty i wygodniej było by tworzyć linki np. w taki sposób:
  1. {foreach item=link from=$links}
  2. <div class='klasa_linku'>{$link}</div>
  3. {/foreach}

Korzystam z rozszerzenia EPager.


pozdrawiam




nospor
Metoda Make() zwraca ci tablice. Czytaj komentarze przy funkcjach smile.gif
limonides
a ja mam takie zapytanie

mam plik ciekawostki.php w nim zawarte jest wyświetlanie ciekawostek oraz dzielenie ich na strony za pomocą tego pagera.

na stronie głównej index.php mam warunek:

  1. elseif ($_GET['m'] == 'menu' && $_GET['id'] == '7') {
  2. include('ciekawostki.php');
  3. }


jak chce przejść do drugiej strony to przenosi mnie do strony głównej a link mam taki index.php?ppidPagera=2

jak zrobić aby zadział pager w momencie kiedy zdefiniowany jest on w innym pliku.
nospor
Wszystko masz w komentarzach
Cytat
/**
* Konstruktor klasy
*
* @param string id - unikalne id pagera.
* @param string pageLink - adres, jaki będzie generowny do linków w pagerze
* Jeśli pageLink zawiera ciąg #PAGE#, oznaczać to będzie, iż link nie będzie modyfikowany przez klase, tylko
* będzie wyglądał jak zapodał użytkownik. Jedyne co zostanie podmienione to #PAGE# na numer strony.
* Jeśli pageLink będzie nullem, klasa wstawi parametr strony do linku uwzględniając przy tym wszystkie parametry jakie były w linku.

* @param mixed userGeneralParam - czy jako parametru strony używać parametru dla danego pagera, czy też ogólnego
* true - uzywać
* false - nie używać
* string - uzywać i ustawić taką nazwę parametru
* parametru określonego w $GeneralParamPageNumber
*/

czyli u Ciebie powinno np. byc
  1. $pager = new Pager('idPagera', null);
limonides
dzieki wielkieee
mwolodzko
Witam,
Mój problem polega na tym, że za cholery nie moge dodać do tego skryptu stronicowania.
Poniższy przyklad otwiera się w nowym okienku gdzie w postaci linków wyświatlane są rekordy pobrane z bazy, kliknięty tekst wpisuje się do formulaża w poprzednim okienku. Nie wiem jak dużo będzie rekordów wiec chciałbym dodać stronicowanie (i wyszukiwarke, ale to trochę później), ale za cholery nie wiem jak w tym przypadku to zrobić kombinowałem na sto milionów sposobów i nic, jak stronicowanie działa to nie działa wpisanie tekstu do formulaża i na odwrót. Jeżeli ktoś może mi pomóc bede bardzo wdzięczny.

Dzialanie skryptu pokazane jest pod adresem: http://vbch.nazwa.pl/iten/re1/visitas.php tam w formulażu przy polu "Tipo visita" jest link "(dodaj)" po kliknięciu ktorego otwiera się nowe okienko z pożiższym skryptem.



  1.  
  2. <?php
  3. $baza_host=("host");
  4. $baza_login=("login");
  5. $baza_haslo=("haslo");
  6. $baza_nazwa=("nazwa");
  7.  
  8. //Laczenie sie z baza mysql
  9. $polaczenie = mysql_connect($baza_host, $baza_login, $baza_haslo);
  10. $db = mysql_select_db($baza_nazwa);
  11.  
  12. $db_tables = array(
  13. 'iddetipovisita' => 'tipovisitas',
  14. 'jakas nazwa pola' => 'jakas nazwa tabeli' // itd.
  15. );
  16. ?>
  17. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  18. <html xmlns="http://www.w3.org/1999/xhtml">
  19. <head>
  20. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  21. <title>AJAX suggest</title>
  22. <meta name="keywords" content="" />
  23. <meta name="description" content="" />
  24. <script src="http://code.jquery.com/jquery-latest.js"></script>
  25. <link rel="stylesheet" href="../master.css" type="text/css" media="screen" title="no title" charset="utf-8">
  26. </head>
  27. <body>
  28. <fieldset>
  29. <legend>Tipo visitas</legend>
  30. <input id="searchinput" type="text" name="search" value="" onkeyup="searchSuggest();" />
  31. <input id="searchsubmit" type="submit" value="Search" />
  32.  
  33. </fieldset>
  34. <script type="text/javascript">
  35. $(document).ready(function(){
  36. $('a').click(function(){
  37. v = $(this).html();
  38. $('input[name=<?php echo $_GET['id']; ?>]', opener.document).val(v);
  39. //window.close();
  40. });
  41. });
  42. </script>
  43. <ol>
  44.  
  45.  
  46. <?php
  47. $result = mysql_query('SELECT * FROM ' . $db_tables[$_GET['id']]);
  48. while($row = mysql_fetch_row($result))
  49. {
  50. echo '<li><a href="#">' . $row[1] . '</a></li>';
  51. }
  52. ?>
nospor
1) Coś dużo choler ci się w tekst wcina.
2) I gdzie tu mój skrypt?
3) W paczce masz podane przykłady. W czym masz konkretnie problem?
mwolodzko
Konkretnie mój problem polega na tym, że trzeba dodać stronicowanie do tego skryptu, a nie bardzo wiem jak to zrobić, jak dodam stronicowanie to nie działa wpisywanie tekstu do formulaża i na odwrót tak jak pisałem w poprzednim poście.
nospor
No to pokaż jak dodajesz.
mwolodzko
Np tak:

  1. <script type="text/javascript">
  2. $(document).ready(function(){
  3. $('a').click(function(){
  4. v = $(this).html();
  5. $('input[name=<?php echo $_GET['id']; ?>]', opener.document).val(v);
  6. //window.close();
  7. });
  8. });
  9. </script>
  10. <ol>
  11. <?php/*
  12. $result = mysql_query('SELECT * FROM tipovisitas');
  13. while($row = mysql_fetch_row($result))
  14. */?>
  15. <?
  16. function pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s) {
  17. $stron = ceil($rekordow/$na_stronie);
  18. if ($s<1) $s=1;
  19. if ($s>$stron) $s=$stron;
  20. $koniec = $s+$na_pasku;
  21. if ($s<=$na_pasku) $koniec = $na_pasku*2+1;
  22. if ($koniec>$stron) $koniec = $stron;
  23. $start = $koniec-$na_pasku*2;
  24. if ($start<1) $start=1;
  25. if ($s>1) $p = "<a href='$skrypt".($s-1)."'><<<</a>";
  26. else $p = "<span style='color:gray'><<<</span>";
  27. if ($s<$stron) $n = "<a href='$skrypt".($s+1)."'>>>></a>";
  28. else $n = "<span style='color:gray'>>>></span>";
  29. for ($i=$start; $i<=$koniec; $i++) {
  30. if ($i==$s) $l .= " <span style='color:#cc0000;'><b>$i</b></span> ";
  31. else $l .= "<a href='$skrypt$i'>$i</a>";
  32. }
  33. if ($rekordow<1) $wynik = "brak informacji spełniających kryteria wyszukiwania";
  34. else $wynik = "znalezionych: $rekordow, strona $s z $stron<br />";
  35. if ($stron>1) $wynik .= "$p - $l - $n";
  36. return $wynik;
  37. }
  38.  
  39. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", ""):1;
  40. $na_stronie = 5;
  41. $na_pasku = 5;
  42. $skrypt = "options.php?s=";
  43.  
  44. if (mysql_connect($sql_serwer, $sql_login, $sql_haslo)
  45. and mysql_select_db($sql_baza)) {
  46.  
  47. $start = ($s-1)*$na_stronie;
  48. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS *
  49. FROM tipovisitas LIMIT $start, $na_stronie
  50. ");
  51. $rekordow = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);
  52.  
  53. $stron = ceil($rekordow/$na_stronie);
  54. if ($s>$stron and $rekordow>0) {
  55. $start = ($stron-1)*$na_stronie;
  56. $wynik = mysql_query("SELECT *
  57. FROM tipovisitas LIMIT $start, $na_stronie
  58. ");
  59. }
  60.  
  61. }
  62.  
  63. echo "<p style='text-align:center;'>";
  64. echo pasek($rekordow,$na_stronie,$na_pasku,$skrypt,$s);
  65. echo "</p>";
  66.  
  67. while($wynik and $dane = mysql_fetch_assoc($wynik)) {
  68. echo "<p>";
  69. foreach($dane as $pole) echo " [$pole] ";
  70. echo "</p>";
  71. }
  72. ?>
nospor
Słuchaj... piszesz że masz problem z moim pagerem gdy go dodajesz do swojego kodu. Proszę cię wiec, byś mi podał kod, w którym dodajesz mój pager. A ty co? Podsyłasz mi jakiś zupełnie inny kod.

Jeśli więc nie masz problemu z moim pagerem to czemu zawracasz gitare akurat w tym temacie?
mwolodzko
Ok, mój błąd znalazłem temat w google tytul tematu jest: "Pager (stronicowanie), klasa, php4 i php5", więc jak miałem problem ze stronicowaniem, napisałem tutaj. Nie zauważyłem że to dział: "gotowe rozwiązania".
edwarpan
Coś mi nie działa.
  1. <?php
  2. require('config.php');
  3.  
  4.  
  5.  
  6. require_once('Pager.class.php');
  7. $sql = 'SELECT count(*) FROM newsy';
  8. $result = mysql_query($sql);
  9. $row = mysql_fetch_array($result);
  10. $recordsCount = $row[0];//pobranie liczby rekordów
  11. try{
  12. $pager = new Pager('idPagera');
  13. $pager->SetTotalRecords($recordsCount);
  14. $pager->Make(true);
  15. $pag = $pager->Render();
  16. $start = $pager->GetIndexRecordStart();
  17. $end = $pager->GetIndexRecordEnd();
  18. }
  19. catch (Exception $e) {
  20. echo $e->getMessage();
  21. }
  22.  
  23. //zapytanie z uwzglenieniem stronicowania
  24. $sql = 'SELECT * FROM newsy LIMIT '.$start.','.($end - $start + 1);
  25. //...pobranie wyników i ich wyswietlenie
  26.  
  27. echo $pag;//wyswietlenie pager'a
  28.  
  29. ?>
nospor
Cytat
Coś mi nie działa.
To coś napraw.....


Czy tak cięzko napisać czym objawia się to "niedziałanie"?

ps:
Cytat
//...pobranie wyników i ich wyswietlenie
Ale wstawiłeś wlasciwy kod w to miejsce?
northwest
Witam serdecznie,
cosik nie chce mi zadziałać ta klasa.Napisałem taki kod:
  1. $recordsCount = 11;//pobranie liczby rekordów
  2. $start = null;
  3. $end = null;
  4. try{
  5. //$pager = new Pager('idPagera');
  6. //$pager = new Pager('idPagera', null);
  7. $pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html");
  8. $pager->RecordsPerPage = 2;
  9. $pager->SetTotalRecords($recordsCount);
  10. $pager->Make(true);
  11. $pag = $pager->Render();
  12. $start = $pager->GetIndexRecordStart();
  13. $end = $pager->GetIndexRecordEnd();
  14. }
  15. catch (Exception $e) {
  16. echo $e->getMessage();
  17. }
  18. $zapytanie_wyswietlajacelista .= " ORDER by $sortujemy LIMIT ".$start.','.($end - $start + 1);
  19. $wyswietlamyliste2 = mysql_query($zapytanie_wyswietlajacelista);
  20. echo $zapytanie_wyswietlajacelista."----".$recordsCount;


Link otrzymuje w prawidłowej formie, tj:
listaobiektow,2,4,4,,.html
listaobiektow,2,6,6,,.html
itp.

tylko nie wiem czemu nie przechodzi to na zapytanie ($zapytanie_wyswietlajacelista) - bez względu czy kliknę na "1", "5" czy "10" na pagerze:
  1. SELECT * FROM cms_obiekty ORDER BY special DESC LIMIT 0,2



Wie ktoś może co zrobiłem nie tak?

nospor
zrob print_r($_GET); gdy bedziesz na jakiejs stronie i powiedz co dostales.
Smiem twierdzic, ze skoro zrobiles ladny url, to nie zwracasz w GET atrybutu 'page' smile.gif A niestety pager sam z siebie sie nie domysli co u ciebie jest stroną - on oczekuje parametry 'page'. Jak go nie to go nie ma i juz smile.gif
northwest
  1. Array ( [gt_id] => listaobiektow [k1] => 2 [k2] => 6 [k3] => 6 [k4] => [k5] => [modrw] => )


mam coś takiego winksmiley.jpg
nie ma u mnie zmiennej page....
to: const PAGE = 'page'; wystarczy że zamienię na k2 i bedzie si?
nospor
Nie, stalych sie nie zmienia! smile.gif

To masz zmienic/ustawic:
public $GeneralParamPageNumber = 'page';
oraz ustaw 3 parametr konstruktora na true:
$pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html",true);

edit:
w sumie wystarczy jak tylko zmienisz na to:
$pager = new Pager ($_GET['id'], "listaobiektow,".$_GET['k1'].",#PAGE#,#PAGE#,".$_GET['k4'].",".$_GET['k5'].".html",'k2');
I nic juz wiecej nie musisz zmieniac
northwest
działa, dzięki wielkie:)))

ps. gdybym chciał ostylować to, to w którym miejscu najelpiej to zrobić (numerki i strzałki)?
nospor
1) Albo odbierz tablicę pagera i rob z nią co chcesz
Metoda GetArray() wywolana po Make()
2) Nadpisz metodę toString() w klasie dziedziczacej
przyklad ex_with_extends.php
3) Podaj callbacka
przyklad ex_with_extern.php

Do wyboru do koloru smile.gif
northwest
echo "<b>".$pag ."</b> z ".$pager->GetTotalPages(); - mam takie wywołanie...

Kazda strona miałaby wyglądać następująco:
<b><a href="listaobiektow.html"></b>
a strona "wytłuszczona" - tj aktualnie oglądana (lub też domyślna) tak:
<b id="strony1"><a href="listaobiektow.html"></b>

nie da się tego jakoś prościej zrobić?
nospor
Cytat
nie da się tego jakoś prościej zrobić?

Nie.
Na standardzie dałem taki wyglad jaki dalem. Jak się nie podoba to trzeba zrobic jeden z trzech kroków, które podalem. Robisz to raz i masz juz smile.gif
Od biedy mozesz sie wbic w kod klasy i bezposrednio w kodzie klasy zmienic.
northwest
zrobiłem sobie takie coś (walcze z klasą):
  1. protected function createHTMLLink($title, $link, $text) {
  2. return '<b><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  3. }
  4. protected function createHTMLLink2($title, $link, $text) {
  5. return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  6. }


w którym miejscu podmienić aktualny numerek (aktualnie wybraną stronkę) ażeby budować link w oparciu o tą 2 funkcje?
nospor
Cytat
w którym miejscu podmienić aktualny numerek (aktualnie wybraną stronkę) ażeby budować link w oparciu o tą 2 funkcje?
NIe rozumiem pytania
northwest
generalnie chciałbym efekt taki uzyskać:
  1. <a><b><a href="plik1.html">1</b></a>
  2. <a><b><a href="plik2.html">2</b></a>
  3. <a><b id="strony1"><a href="plik3.html">3</b></a> <!-- aktualnie oglądana stronka -->
  4. <a><b><a href="plik4.html">4</b></a>


i kombinowałem z tą funkcją dla aktualnie zaznaczonej:
  1. protected function createHTMLLink2($title, $link, $text) {
  2. return '<b id=\"strony1\"><a title="'.$title.'" href="'.$link.'">'.$text.'</a></b>';
  3. }


dobrze kombinuje?winksmiley.jpg
nie wiem czy dobrze wytłumaczyłem o co mi chodzi??smile.gif
nospor
No ale po co tworzysz metode createHTMLLink2? Powiedzialem, ze skoro za duzo masz zachodu to nadpisz zmien kod w klasie i juz.
northwest
zadziałało, dzięki WIELKIE smile.gif))
Ziom73
Mi wywala:
Kod
Fatal error: Uncaught exception 'Exception' with message 'Method GetIndexRecordStart() You must call after Make()' in /opt/lampp/htdocs/infusions/pager/Pager.class.php:218 Stack trace: #0 /opt/lampp/htdocs/php/adm/not.php(38): Pager->GetIndexRecordStart() #1 /opt/lampp/htdocs/themes/EasyRound/administration/theme.php(163): include('/opt/lampp/htdo...') #2 /opt/lampp/htdocs/sys/adm/not.php(12): include('/opt/lampp/htdo...') #3 {main} thrown in /opt/lampp/htdocs/infusions/pager/Pager.class.php on line 218

Oto kod:
Kod
require('./../../infusions/pager/Pager.class.php');
$sql = 'select count(*) from `note`';
   $result = mysql_query($sql);
   $row = mysql_fetch_array($result);
   $recordsCount = $row[0];//pobranie liczby rekordów
   $pager = new Pager('idPagera');
   $pager->SetTotalRecords($recordsCount);//ustawienie liczby rekordów
   $renderPager = $pager->Render();
   $start = $pager->GetIndexRecordStart();//pobranie indexu rekordu początkowego
   $end = $pager->GetIndexRecordEnd();//pobranie indexu rekordu koncowego
   //zapytanie z uwzglenieniem stronicowania
   $sql = 'select * from `note` limit '.$start.','.($end - $start + 1);
   //...pobranie wyników i ich wyswietlenie
   echo $renderPager; //wyswietlenie pager'a
nospor
Przeczytałeś chociaż komunikat błędu?
Zjadłeś wywołanie funkcji Make(). Przejrzyj przykłady dołączone do paczki - tam masz napisane jak wywoływać
Ziom73
Dzięki. Trochę przerobiłem to i działa. Mogłeś bardziej wyróżnić tekst o tym, że to w pierwszym poście nie dotyczy nowej wersji.
Co do skryptu, to jest spoko smile.gif
br0nks
Witam,

fajna sprawa z tym:) aczkolwiek mam pewien problem...

1) wyswietla mi jak powinno:
1 2 3 4 5 6 7 8 9 10 11 > >> >|

a chcialbym aby bylo napisane zamisat: ">|" 230 - lub aktualny numer ostatniej strony:
1 2 3 4 5 6 7 8 9 10 11 z 230 > >> 230


a kolejny problem jest taki, ze nie wiem dokladnie o co chodzi, ale moja strona ma tak, ze 1 strona nie ma id=1 tylko id=0
i przez to wchodzac na strone 2 (id=2) wchodzi mi strona 3, bo skoro ja mam pierwsza strone jako id=0 to chcac niechcac tak sie dzieje...

jak zmienic aby moja strona 1, ktora jest id=0 byla tym poprawnym id=1 ?

pozdrawiam:)

EDIT:

  1. <?
  2. //Ładowaniu pliku konfiguracyjnego bazy danych i połączenie z bazą
  3. include "config.php";
  4.  
  5. //Ustalenie ilości wyświetlanych newsów na stronie
  6. define('limit_newsow', 15);
  7.  
  8. $result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;
  9.  
  10. //Pobiera ilosc_newsow rekordów z bazy, sortując wg daty rosnąco, zaczynając od $_GET['s']*ilosc_newsow
  11. $RES = mysql_query($result); // wykonujemy zapytanie
  12. while($AFR = mysql_fetch_assoc($RES)){
  13.  
  14. /*Wyświetlanie wyników:*/
  15.  
  16. $id=''.$AFR['id'].'';
  17. $text=''.$AFR['text'].'';
  18.  
  19.  
  20. echo "$id - $text";
  21.  
  22. }
  23.  
  24. ?>


a dokladnie tu:
Kod
$result = "SELECT SQL_CALC_FOUND_ROWS * FROM newsy ORDER BY id DESC, id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;

jest jakis blad, ze gdy ide na id=1 to pokazuja mi sie rekordy kolejne (z id=2)..
a chcialbym aby pod id=1 byly te, ktore sa aktualnie..

a dokladnie:
Kod
id DESC LIMIT ".mysql_escape_string((int)$_GET['s'] *limit_newsow).",".limit_newsow;

ale nie wiem jak nawet tu pokombinowac, aby bylo dobrze..

prosze o pomoc:(

EDIT2:

moze tu chodzi o to, ze wyciagam wg ID? a np kilka id nie ma, bo usuniete zostaly.. i np pomija mi przez to jedna strone?
jak zrobic, zeby zliczal poprawnie? bo np teraz mam 23 strony niby.. z czego 23 jest pusta..

wszystkie wskazowki bylyby mega pomocne!
nospor
Skoro piszesz w temacie, o mojej klasie Pager, to mógłbyś chociaż z niej skorzystać, a dopiero potem pisać, że masz problem
Skoro nie zamierzasz korzystać (nikt ci przecież nie karze) to nie pisz w tym wątku - słyży do zupełnie czego innego.

Bo sam już nie wiem czy ty korzystasz czy nie. Bo pierwsza Twoja wypowiedź świadczy, że niby korzystasz, ale zaraz potem pokazujesz kod, który ewidentnie pokazuje, że nie korzystasz.
br0nks
korzystam:)

ten kod sluzy mi tylko do wyświetlania newsów.. a jest taki, bo mialm tam inna paginacje, z ktorej zrezygnowalem, na rzecz tej.

takze prosze nadal o pomoc.
nospor
No to pokaż kod, co do którego masz pytanie i który zawiera moje stronicowanie, bo już nie wiem o co pytasz smile.gif
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.