Stránkování v PHP a MySQL univerzálně

Strankování je na webovém serveru potřeba dělat každou chvíli – výpisy diskuzí, obrázky z fotogalerie, komentáře nebo čisté tabulky s daty. Uživatel stránek stejně málokdy touží po tom vidět všechna data najednou a stránkovanému výpisu dá přednost. Navíc stránkovaný výpis je kompaktnější, hezčí, rychleji se přenese ze serveru ke klientovi a prohlížeč ho rychleji zobrazí.

Protože je stránkování tak běžným požadavkem, je podpora pro stránkování zabudovaná přímo do MySQL – serveru, který je běžně dostupný v kombinaci s PHP.

O původní Pager projevilo zájem pro mě celkem nečekané množství lidí. Mnozí mě upozornili na různé problémy (za to děkuji) a navrhli další možná vylepšení.

Mezi nejčastěji zmiňované problémy patřilo to, že Pager nebyl příliš vhodný pro sady s velkým počtem stránek . Protože přidáváním dalších parametrů by se třída stala příliš nepřehlednou, zvolil jsem jinou metodu - Pager lze teď konfigurovat pomocí módů, které jde mezi sebou libovolně kombinovat. Každá část stránkovací logiky je vytknuta do samostatného módu.

Všechny módy mají stejný interface a nebude problém napsat případně další - já jsem přichystal následující základní módy:

  • DefaultPagerMode - vypisuje odkazy na všechny stránky (např. 1 2 3 4 5 )
  • PrevNextPagerMode - vypisuje odkazy na sousední stránky (např. < > )
  • FirstLastPagerMode - vypisuje odkazy na první a poslední stránku (např. << >> )
  • NeighbourPagerMode - vypisuje odkazy na několik sousedních stránek (např. ...3 4 5... )
  • SkipperPagerMode - vypisuje odkazy na vzdálenější stránky - třeba o 10 stránek vpřed a 10 vzad (např -10 + 10 )
  • SparsePagerMode - vypisuje odkazy na každou n-tou stránku (např. 10 20 30 40 50 )

Starý způsob stránkování lze stále použít - interně je teď ale implementován kombinací módů Default, PrevNext a FirstLast.

Protože vím, že člověk vše vždy nejlépe pochopí na příkladě, připravil jsem sadu příkladů, na kterých jasně uvidíte, jak třídu použít.

Příklad 1 Příklad 2 Příklad 3 Příklad 4 Příklad 5 Příklad 6 Příklad 7 Příklad 8 Příklad 9 Příklad 10

Nepodezřívám tu nikoho, že by si stránkování nedokázal napsat sám, není na tom nic těžkého a stačí jen základní znalost PHP a SQL. Svůj kód sem dávám proto, že věřím, že nikoho (včetně mě) už nebaví psát každou chvíli podobný kód. Takže jsem si po napsání několika prvních stránkovaných výpisů vytvořil třídu, která mně stránkování obstará a je dostatečně univerzální.

Je to jednoduché. Třídu je potřeba nejprve nainicializovat a předat jí SQL dotaz, který vrací výsledkovou sadu. Upozorňuji, že SQL dotaz nesmí obsahovat klauzuli LIMIT, protože právě ta je později použita pro stránkování. Pak stačí jen navolit velikost stránek a jejich zobrazovaný počet a některé další věcičky kolem.

Poté, co je třída nainicializována, zavolá se metoda DataBind(), která získá výsledkovou sadu z databáze. Opakovaným voláním metody GetOne() se získávají jednotlivé záznamy výsledkové sady a v momentě, kdy chceme vypsat odkazy na další stránky, zavoláme metodu DrawPager().

Na další stránky se odkazuje pomocí parametru v URL (atribut UrlParameterName).

Jednoduché a snadné. Pokud chcete Pager stylovat pomocí CSS, máte tu možnost (stačí správně nastavit vlastnosti třídy Pager).

Příklad použití (komplexnější příklady viz podbarvený rámeček výše):

//vytvoreni objektu, jako parametry konstruktoru se //predavaji SQL dotaz a parametr URL, ktery bude pager //pouzivat pro odkazy na dalsi stranky $cp = new Pager('SELECT * FROM uzivatele', 'page'); //ziska z databaze pozadovanou cast vysledkove sady $cp->DataBind(); //postupne ziskavani jednotlivych zaznamu z vysledkove sady while ($obj = $cp->GetOne()) { echo $obj->id_uziv." ".$obj->nick." <br />"; } //vypsani pageru $cp->DrawPager();

A takovýhle je potom výsledek:


ukázka třídy v akci


Denial Čekan (DJDaca) přidal některá další možnosti nastavení pro třídu

  • Přibyla možnost výstupu přez echo nebo přez return (takže je možno pager využít v jiné třídě, nejen přímo v šabloně)
  • Přibyla možnost SeoURL prefixu
  • Přibyla možnost Connect Linku
  • Přibyla možnost výstupu v array

Použití modifikované verze:



1 <?php 2 $qp = new Pager($SQL,'page',$db->dbh); 3 $qp->DataBind(); 4 $qp->OutputFormat = ARRAY_A; 5 $qp->SeoPrefix = FOTOREPORTY."{seo}"; 6 /** {seo} = $_GET['seo'] který bude nahrazen za jeho hodnotu */ 7 print_r($qp->GetAll()); 8 echo $qp->DrawPager(); 9 ?> 10


Kód třídy ke stažení

Ohodnoťte prosím užitečnost článku




165
 
69
 
33
 
28
 
46
 
 
Vložit komentář:
 

 



 

 

Nepoužívejte žádné html ani texy značky, odřádkování se zachová. Pokud uvádíte zdrojový kód, můžete ho vložit mezi značky
<syntax jazyk="PHP">...</syntax>,
bude potom zformátován. Jako atribut můžete uvést PHP, C#, HTML, CSS a mnoho dalších.


opiste cislo Opište číslo:

 

7/18/2006 4:47:03 PM
[1] (Standa)
já to nechápu :( odpovědět
já to nechápu :(
gravatar 7/23/2006 7:28:42 PM
[2] (salas (salascz(at)seznam.cz))
tak nevim odpovědět
no ja to zkousel a haze mi to chyby :-(
nechybi tady neco:
//stranky mezi bez omezeni if ($this->_pageCount <= $this->PageLinksDisplayed $this->PageLinksDisplayed == -1)
nejaky AND nebo OR?
gravatar 7/29/2006 12:26:50 AM
[3] (Trupik (jakub.maly(at)atlas.cz)) www
Re: tak nevim odpovědět
Dík, chybička se vloudila - ne mě, ale autorům zvýrazňovače kódu. Opravil jsem, chybělo tam ||.
gravatar 8/8/2006 9:53:19 PM
[4] (glum (pok(at)mailinator.com))
jj odpovědět
Funguje to vyborne, teraz idem studovat ako to vlastne funguje.
THX, thanks, dakujem ...
gravatar 10/10/2006 7:00:52 PM
[5] (Tomas (21let(at)seznam.cz))
Super! odpovědět
Super za navod, funguje mi to a je to přesně to co jsem nikde nemohl najít! Díky díky
gravatar 10/20/2006 1:05:11 PM
[6] (RBN (rben(at)centrum.cz))
bylo by možno? odpovědět
Zdravím. no pokud sem toto načetl na stránku psalo mi to:
Parse error: parse error, expecting `T_OLD_FUNCTION´ or `T_FUNCTION´ or `T_VAR´ or `´}´´ in c:\apache\htdocs\link\novinky.php on line 5

a nějak se vtom nyvyznávám. asi bude někde chyba jen nevím. kde bylo by možno poslat celý kod na meil?
gravatar 12/13/2006 8:09:46 PM
[7] (Trupik (jakub.maly(at)atlas.cz)) www
Re: bylo by možno? odpovědět
Tyto chyby jsou způsobeny různou syntaxí tříd v PHP5 a starších verzích PHP. Pravděpodobně používáte PHP4 nebo starší. Kód stačí drobně upravit - u definic atributů třídy nahradit klíčová slova "public" a "private" klíčovým slovem "var", u hlaviček metod třídy vymazat "public" a "private" a nechat jenom "function". Nakonec je ještě potřeba upravit hlavičku konstruktoru. Klíčové "__construct" nahradit názvem třídy - tedy "CleverPager".
12/14/2006 5:21:54 PM
[8] (Josef)
Jak upravit odpovědět
Je to velmi pekne.
Ale kdyz mam stovky zaznamu je rada cisel stranek prilis dlouha.
Jak to upravit treba na tento tvar s tim ze aktualni stranka je 13.
<< < 1 ... 10 11 12 13 14 15 16 ... 120> >>

Dekuji Josef

//EDIT: Trupik
Ano, toto možné je - viz příklad 7
gravatar 2/8/2007 8:37:42 PM
[9] (Well (knin(at)centrum.cz))
Krasa odpovědět
Diky moc, zrovna jsem to mel rozbabrany a rozhodne by to nedopadlo lepe... Stedry to clovek ;) Dik...
gravatar 2/22/2007 12:12:28 PM
[10] (gumidek (sagto(at)seznam.cz))
divny odpovědět
zkousel jisem to a v pohode ale jiak jisem vzal kod a vlozil jisem ho nan ic.cz nebo wz.cz tak mi haze chybu v tride neco s "}" a pritom to ukazujie na promenne public nechapu proc
gravatar 2/25/2007 10:41:31 AM
[11] (Trupik (jakub.maly(at)atlas.cz)) www
Re: divny odpovědět
Když tu chybu popíšeš takhle, tak snad ani nemá cenu ten popis sem psát. Stejně ti nikdo nemůže poradit.
gravatar 7/1/2007 12:18:13 PM
[12] (Pacek (pacek(at)itspot.cz)) www
__construct odpovědět
Ahoj, pěkná třída, ale mám jednu připomínku: nebylo by lepší dát $PageSize jako argument konstruktoru, aby se dala třída použít vícekrát na stránce s jiným LIMITem ? :o Jinak dobrá práce.
gravatar 7/11/2007 12:05:48 PM
[13] (zimmi (zimmicz(at)gmail.com)) www
Super odpovědět
Díky moc, něco takového jsem hledal už dlouho, funguje skvěle.
7/15/2007 2:36:41 AM
[14] (georgehs)
thx odpovědět
Luxusní chlape, luxusníííí
8/10/2007 9:42:07 PM
[15] (Dan)
WOW !!! odpovědět
Dobrá práce, gratuluji. Velmi užitečné.
gravatar 9/9/2007 5:26:01 PM
[16] (voshi (voshi(at)seznam.cz))
Chybka? odpovědět
Ahoj, hází mi to tohle. Co s tím?

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /u/taborpaprsek.cz/www/book/strankovani.php on line 111

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /u/taborpaprsek.cz/www/book/strankovani.php on line 135

//EDIT: Trupik
Doporučuji zavolat funkci Pager->DebugPrint(), která vypíše, jaké dotazy se použijí. A tyto dotazy pak zkusit přímo v databázi.
10/5/2007 9:23:55 AM
[17] (Yaz)
nádhera odpovědět
Ahoj, díky za script! Funguje nádherně, i když nechápu jak :D , ale jdu studovat...
gravatar 12/10/2007 5:43:56 PM
[18] (zimmi (zimmicz(at)gmail.com)) www
Limit  odpovědět
Zdravím, mám takový menší problém. Tvůj skript používám pro výpis archivu článků, ve kterém je nežádoucí zobrazovat 10 nejnovějších - ty už jsou na indexu blogu.
Protože se klauzule limit nedá použít, chtěl bych se zeptat, jestli mám nějakou jinou možnost, jak těch 10 vyškrtnout?
gravatar 12/10/2007 8:29:41 PM
[19] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Limit  odpovědět
[18] No, myslím, že možností je několik

- použít vnořený dotaz
- upravit pager
- nejjednodušší ale bude asi zjistit datum u desátého článku (tam můžeš použít LIMIT) a potom pageru předat dotaz s podmínkou WHERE datum > ... - pager tak bude první články ingorovat. Sice je to jeden dotaz navíc, ale myslím, že se to nezblázní.
gravatar 1/20/2008 12:43:57 PM
[20] (siris (jaromir.salamon(at)gmail.com)) www
Optimalizace ze dvou narocnych selektu na temer jeden odpovědět
Predem jsem chtel podekovat za peknou knihovnu, pouzivam tu pro PHP4, neb mi na nem jede web. Kazdopadne mam ted problemy s vykonem serveru a tak se snazim optimalizovat kde to jde. Takze ten napad co mne napad chci poslat i sem, treba se vam to bude hodit.

Selekt jsem pouzil ve tvaru:
SELECT SQL_CALC_FOUND_ROWS * FROM ...

a DataBind funkce pak vypada takto:
function DataBind() { //zjisteni cisla aktualni stranky if (isset($_GET[$this->UrlParameterName])) $this->_targetedPage = (int)($_GET[$this->UrlParameterName]); else $this->_targetedPage = 1; if ($this->_targetedPage == 0) $this->_targetedPage = 1; //vypocet parametru pro LIMIT $firstrow = ($this->_targetedPage - 1) * $this->PageSize; $this->ResultSet = mysql_query("$this->SelectCommand LIMIT $firstrow, $this->PageSize" ); //vypocet poctu stranek $c = mysql_fetch_object(mysql_query("SELECT FOUND_ROWS() as Count")); $this->Count = $c->Count; //echo $this->Count; $this->_pageCount = (int) (($this->Count + $this->PageSize - 1) / $this->PageSize); if ($this->_targetedPage > $this->_pageCount) $this->_targetedPage = 1; }


Vyhodou je neprovadeni 2x toho sameho selektu, jednou pro ziskani dat z DB, podruhe po ziskani poctu zaznamu z DB, nebot SQL_CALC_FOUND_ROWS spocita pocet zaznamu bez ohledu na where a limit podminky a pak je mozne tento pocet ziskat pomoci selektu:
SELECT FOUND_ROWS()

Coz je daleko mene narocnejsi nez podruhe poustet
SELECT COUNT(*) ...
gravatar 1/23/2008 1:34:24 AM
[21] (kodl (kodl04(at)seznam.cz))
problem s uri odpovědět
strankovani mi funguje paradne ale jen v pripade ze je adresa typu www.x.cz/index.php?menu=katalog. pak se na konec prihodi &page=2 atd. coz je ok. pokud ale pouzivam $_SERVER["REQUEST_URI"] a adresa pak vypada takhle www.x.cz/katalog/neco/neco tak to nefunguje. v odkazech na dalsi stranky je pak www.x.cz/index.php?page=2 coz je spatne. kdyz rucne napisu www.x.cz/katalog/neco/neco/?page=2 tak je to ok. co s tim udelat?
gravatar 1/29/2008 8:17:02 PM
[22] (Petr Láslo (laslo.petr(at)gmail.com))
Re: problem s uri odpovědět
[21] Ahoj když mi dáš svůj mail, tak ti pošlu jak sem si tu knihovnu upravil já pro hezké url :-)

Mám otázku, co musím zmněnit pro to aby když bude 0 záznaů v tabulce to ukázalo že v databázi není žádný záznam?
gravatar 1/29/2008 8:32:42 PM
[23] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Re: problem s uri odpovědět
[22] Co třeba po zavolání DataBind otestovat itemCount (voláním get_ItemCount)?

A Kodl tu nechal svůj email, BTW (odkaz pod jménem)...
gravatar 2/15/2008 1:23:40 PM
[24] (Pablo (pablocelestia(at)gmail.com))
where odpovědět
zdravím,
stránkování funguje skvěle ale nějak nemužu přijit na to jak mám vypsat z jedné tabulky pouze ty hodnoty ve kterych je nastaveno kategorie = 1

skusil jsem dat sem:

//vytvoreni objektu, jako parametry konstruktoru se //predavaji SQL dotaz a parametr URL, ktery bude pager //pouzivat pro odkazy na dalsi stranky $cp = new Pager('SELECT * FROM uzivatele', 'page'); //ziska z databaze pozadovanou cast vysledkove sady $cp->DataBind(); //postupne ziskavani jednotlivych zaznamu z vysledkove sady while ($obj = $cp->GetOne()) { echo $obj->id_uziv." ".$obj->nick." <br />"; } //vypsani pageru $cp->DrawPager();
,

WHERE, ale hodilo mi to chybu =/
gravatar 2/15/2008 2:06:00 PM
[25] (Trupik (jakub.maly(at)atlas.cz)) www
Re: where odpovědět
[24] musíš napsat jakou chybu...
SELECT * FROM uzivatele WHERE kategorie=´1´ by mělo fungovat bez problémů, normálně to tak používám.
gravatar 2/15/2008 2:39:32 PM
[26] (Pablo (pablocelestia(at)gmail.com))
where odpovědět
chyba nalezena a opravena už to skvěle facha ;)
gravatar 2/15/2008 2:39:32 PM
[27] (Pablo (pablocelestia(at)gmail.com))
where odpovědět
chyba nalezena a opravena už to skvěle facha ;)
gravatar 2/17/2008 6:10:00 PM
[28] (Michal F. (Filippi.Michal(at)seznam.cz))
Chyba :( odpovědět
cau zkousim to strankovani ale hlasi mi to chybu:
Fatal error: Cannot instantiate non-existent class: pager in /3w/webz.cz/s/soldiers/test/forum.php on line 123
na radku 123 je:
$cp = new Pager('SELECT * FROM forum', 'page');

nevi nekdo co s tim?
gravatar 2/17/2008 6:10:00 PM
[29] (Michal F. (Filippi.Michal(at)seznam.cz))
Chyba :( odpovědět
cau zkousim to strankovani ale hlasi mi to chybu:
Fatal error: Cannot instantiate non-existent class: pager in /3w/webz.cz/s/soldiers/test/forum.php on line 123
na radku 123 je:
$cp = new Pager('SELECT * FROM forum', 'page');

nevi nekdo co s tim?
gravatar 2/17/2008 8:56:01 PM
[30] (Trupík (jakub.maly(at)atlas.cz)) www
Re: Chyba :( odpovědět
[27] Vypadá to, jako byste nesprávně includoval soubor se třídou.
gravatar 2/17/2008 8:56:01 PM
[31] (Trupík (jakub.maly(at)atlas.cz)) www
Re: Chyba :( odpovědět
[27] Vypadá to, jako byste nesprávně includoval soubor se třídou.
gravatar 2/29/2008 9:36:13 PM
[32] (Fergi (fergi(at)crabinc.eu))
Maly help..... odpovědět
Ahoj moc se mi to libi ale mam maly problem pouzil jsem strankovani ktere je v prikladu 1 a ... vsechno sice funguje ale odkazy se prehodi na < a jim podobne a ve vysledku se pak zobrazi
<a href="index.php">odkaz</a>
misto odkazu na prislusnou stranku kdyztak pro nahled to mam vlozene jak je to tady
<? require "db.php"; require_once('Pager.class.php'); //vytvoreni objektu, jako parametry konstruktoru se //predavaji SQL dotaz a parametr URL, ktery bude pager //pouzivat pro odkazy na dalsi stranky $pager = new Pager('SELECT * FROM clanky', 'page'); $pager->PageSize = 15; $pager->PagerAlign = "center"; //ziska z databaze pozadovanou cast vysledkove sady $pager->DataBind(); //postupne ziskavani jednotlivych zaznamu z vysledkove sady while ($obj = $pager->GetOne()) {$Pocet++; echo "<h1 class='decay'>".$obj->nazev."</h1><div class='descr'>".$obj->datum." od ".$obj->vlozil."</div><img src='../img/sample-image.gif' width='120' height='90' alt='sample image' class='left border' />".$obj->obsah."";}; //vypis odkazu na stranky //nebyly pouzity zadne mody, proto se pouzije //defaultni strankovani $pager->DrawPager(); ?>

snad si budete vedet rady cim to je .....
kdyby se vam nezdalo moje vypisovani {$Pocet++; echo "<h1 class.... tak ja to musim mit tak je to mam napsany jinak se mi nedodrzi vzhled a je pak spatne....
predem dekuji za vase odpovedi :-)
gravatar 3/2/2008 5:30:16 PM
[33] (jakub.maly@atlas.cz (jakub.maly(at)atlas.cz)) www
Re: Maly help..... odpovědět
[29] Třída defaultně nahrazuje speciální znaky HTML na výstupu - pro ochranu před "škodlivým vstupem" od uživatele.

Pokud jsi si jistý, že to, co vypisuješ, je korektní, stačí jen nastavit HtmlSpecialChars na 0

$pager = new Pager('SELECT * FROM clanky', 'page'); $pager->HtmlSpecialChars = 0; ...
gravatar 3/4/2008 6:29:07 AM
[34] (fergi (fergi(at)crabinc.eu))
Re: Re: Maly help..... odpovědět
[30]
jasne diky moc :-)
gravatar 3/15/2008 11:03:28 AM
[35] (fergi (fergi(at)crabinc.eu))
zkraceni vyrazu odpovědět
Ahoj tak sem tu ješte jednou ... nevím jak mám udělat aby se mi daný výraz zkratil když použiji
.... $pager = new Pager('SELECT * FROM clanky', 'page'); $pager->SubStr(".$obj->obsah.", 0, 100); ....

tak mi to hodi
Call to undefined method Pager::SubStr() in .....
jen bych potreboval vedet co delam spatne...
predem dik za pripadne odpovedi :-)
gravatar 3/15/2008 2:16:05 PM
[36] (Trupik (jakub.maly(at)atlas.cz)) www
Re: zkraceni vyrazu odpovědět
[32] Nechápu, o co se snažíš, Pager žádnou metodu SubStr nemá, takže ji samozřejmě nejde volat.
Možná jsi chtěl substr($obj->obsah, 0, 100) ?
gravatar 3/15/2008 7:45:06 PM
[37] (fergi (fergi(at)crabinc.eu))
Re: Re: zkraceni vyrazu odpovědět
[33] Snazim se o to aby se mi vyraz (text) zkratil treba ze 500 znaku na 100(pak bych tam dal treba odkaz cist dale)... je mi jasny ze ti to prijde jako jednoduchy a to co jsem sem napsal asi jako nesmysl ale kdyz ja sem v koncich :-((( snad jsem to napsal srozumitelne....
gravatar 3/16/2008 11:18:48 PM
[38] (Anna (anna007(at)seznam.cz)) www
Co změnit v Pager.class.php odpovědět
Je to všechno hrozně pěkné a ráda bych to použila, ale vůbec nevím, co přesně změnit v tom souboru, vůbec nechápu objektové programování, takže sama na to nepřijdu. Co se má napsat sem $hrefprefix = $_SERVER[..., to je název toho souboru či co ? to mi vůbec nefunguje. Vypíše mi to pár těch řádků, co je nastaveno, a ve stavovém řádku je script error. Tak nevím, co mám vlastně udělat.
gravatar 3/17/2008 6:35:31 PM
[39] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Co změnit v Pager.class.php odpovědět
[35] tam by se nemělo psát nic. Podívej se pořádně na příklady, tam je snad všechno jasné.
gravatar 3/23/2008 10:26:34 AM
[40] (t.K (t.Kej91(at)gmail.com)) www
Help mi odpovědět
Čau, máš to super promáklí, to musím uznat, ale narazil jsem na problém, aplikoval jsem to na prezentaci a první stránka je v pohodě, ale když kliknu na další, třeba dvojku tak se nic nestane, zůstane výpis tady na první, URL se změní (o číslo).
gravatar 3/23/2008 10:59:32 AM
[41] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Help mi odpovědět
[37] máš to blbě, co můžu říct víc, když nevím, jaká je to prezentace, jak jsi třídu inicializoval...
3/23/2008 11:11:58 AM
[42] (t.K)
Re: Re: Help mi odpovědět
[38] Mno Pager.class.php jsem nechal, přidal jsem si napojení na databázi, a jinak jsem si přepsal jen dotaz SQL, změnil počet vrácených záznamů a while(jen svoje zobrazení)
gravatar 3/23/2008 5:41:16 PM
[43] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Re: Re: Help mi odpovědět
[39] a z toho to mám jako poznat, proč to nefunguje?
gravatar 3/28/2008 10:45:38 AM
[44] (ovcopes (lv429(at)gmail.com))
dotaz na databazi odpovědět
zdravím, musím říct skvělá práce. Funguje skvěle. Měl bych je jeden dotaz - jak by šel vyřešit problém s tím, když mam dotaz "SELECT bla bla .." na více řádků. Když je na víc řádků, tak mně to nefunguje. Je to taková pitomost, jen kvůli přehlednosti. dík
4/10/2008 11:21:36 PM
[45] (weckho)
Chyba při nula záznamech v DB odpovědět
Ahoj,
děkuji za skvělou třídu, vše funguje skvěle, až na jednu věc.
Pokud předám tříde DB dotaz, který vrátí nula záznamů, tak se stejně šipky (<< < 1 > >>) odkazující na poslední stránku zobrazí jako odkaz. Odkaz předává parametr limit=0 a když na něj kliknu, tak vypíše chybu

"Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /mnt/data/accounts/s/mujweb/data/www/pager.class.php on line 183"

a pod chybou opět << < 0 > >> s odkazem na stránku první.
Zkoušel jsem přijít na to, jak tomu předejít, ale zamotal jsem se v tom :)

Nezná někdo příčinu a řešení?
Děkuji moc všem.

gravatar 4/18/2008 6:44:46 PM
[46] (Kamil (major.jr3(at)centrum.cz))
Hej je to super!! odpovědět
NO potřeboval sem nutně udělat stránkování.Jako kdybych měl čas tak si to udělál sám..sice by to trochu času zabralo(bo sem to před tím ještě nědělal).NO zkusil sem tohle a pracuje skvěle s jednoduchou implementací.A líbí se mi to třídové zpracování..objekty sou přehlednější a lepší.Sám do nich teprve pronikám.Ještě sem nestihl prostudovat celý kód..přeci jen ho je dost.Ale jinak Fakt dík!!!!
gravatar 5/20/2008 8:17:13 PM
[47] (Mart (pala.martin(at)seznam.cz))
Obrácené pořadí výpisu odpovědět
Ahoj, toto přesně jsem hledal protože už mám na jendé stránce hrozně moc článků tak aby se rozložili jakoby na víc stran. Super funfuje to! ... akorat to ma takej háček... já bych potřeboval aby se články vypisovaly od nejnovějšího čili od článku s největším ID. Do dotazu SELECT * FROM `clanky` jsem zkusil připsat ORDER BY `clanky` . `id` ... tak mi to predtim fungovalo... ale vypis se nezmenil..jen se zacina na posledni strance :| ... slo by to poresit pls?? diiky
6/4/2008 2:56:27 PM
[48] (Marketa)
Vynikajici odpovědět
Skvely, presne to, co jsem potrebovala. Diky, uz mi to pekne chodi.
M.
gravatar 6/6/2008 12:25:45 PM
[49] (Tomas (21let(at)seznam.cz))
Počet záznamů odpovědět
Ahoj, rád bych se zeptal, jakým způsobem vyhledat kolik to "vySELECTovalo" záznamů v MySQL. Diky za radu
gravatar 6/7/2008 2:06:44 PM
[50] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Počet záznamů odpovědět
[46]: Funkce get_ItemCount() vrací celkový počet záznamů (na všech stránkách dohromady), get_PageCount() vrací celkový počet stránek.
6/18/2008 2:53:52 PM
[51] (Jan Hornych)
chyba odpovědět
Už to tu jednou bylo, ale po zkoušení skriptu mi to píše toto

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /data/www/cstvcl.cz/www.cstvcl.cz/Pager.class.php on line 115

Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /data/www/cstvcl.cz/www.cstvcl.cz/Pager.class.php on line 174

<< < 1 > >>

Nevíte co s tím? Zkouším PHP tři dny, tak zatím toho moc neznám, tak jestli můžete polopatějc:) Díky
gravatar 6/18/2008 5:52:00 PM
[52] (Trupik (jakub.maly(at)atlas.cz)) www
Re: chyba odpovědět
[48] Z tohohle popisu se to nedá poznat. Dotaz nevrátil správnou sadu. Proč to nevím - možná je špatně SQL dotaz, možná je tam nějaká jiná chyba. Ujistětě se, že máte sql dotaz v jednom řádku.
gravatar 6/25/2008 4:36:51 AM
[53] (Jan Hornych (jan.hornych(at)seznam.cz))
Re: Re: chyba odpovědět
[49]
Má zde výpis funkce debugprint:

Targeted page: 1
Page count: 0
Select command: SELECT * FROM cstv
Select page command: SELECT * FROM cstv LIMIT 0, 10
Count command: SELECT COUNT(*) AS Count FROM cstv
Url prefix: /pokus2.php

Jestli to chápu dobře, tak page count by mělo být počet stránek, což v tomto případě nic nespočítalo. Je to tak?

Zeptám se jinak: Co se musí nastavit v Pager.class.php, aby to fungovalo?

Díky
7/23/2008 10:31:01 AM
[54] (Tomasek)
Re: Re: Počet záznamů odpovědět
[47]

Zkoušel jsem, ale bohužel

Fatal error: Call to undefined function get_ItemCount()

hodil jsem pod konec databind (vypis patricnych dat) toto:

echo get_ItemCount();

a nejde mi to, kdyz se podivam do souboru kde mam tridy, je tam tato funkce napsana takto:

/** pocet radku nestrankovane vysledkove sady */
private $itemCount = 0;
public function get_ItemCount() { return $itemCount; }

tak fakt nevim v cem by mohl byt problem
7/28/2008 2:00:45 AM
[55] (joe) www
Pěkné odpovědět
Z této třídy jsem se pár věcí naučil. Jediné co bych doporučil je, jak je dotaz COUNT(*), tak abys tam přidal regulérní výraz na odstranění ORDER BY, protože to může zbytečně zpomalovat.
Co mi taky vadí je, že dotaz musí být na jednom řádku, tohle napsat nemůžeš:

$sql = "
SELECT
*
FROM
table
";

Nevím proč mi nefungovalo na to str_replace("\n", " ", $sql)
možná na tom řádku je něco špatně, ale neřešil jsem to, neměl jsem na to čas :-)

Jinak pěkná práce.

PS: Pod textareaou máš "NepouČívejte žádné" ... :)
gravatar 7/29/2008 10:12:58 PM
[56] (Marian (silveron(at)tiscali.cz))
stdClass::$Count odpovědět
ahoj, zkousim rozjet tve strankovani na jednom mem webu. haze to nasledujici chybu :
pager.class.php :: 116 :: Undefined property: stdClass::$Count
pager.class.php :: 119 :: Undefined property: stdClass::$Count

samotna data rozbrazuje, ale jiz nestrankuje...

jedine co jsem v pager class upravil bylo sql dotazy :
$c = (mf( mq($this->CountCommand)));

stim ze provadeni mysql mam osetreno nasledne :
function mq($q) { global $db_sess; return mysqli_query($db_sess,$q); } function mf($r) { return mysqli_fetch_object($r); } ** $db_sess - je : $db_sess = spojeni($db_host,$db_user,$db_pass,$db_name);

na mem webu jinak vse funguje co se tyce mysql dotazu

nevis nahodou kde je zakopany pes a co jeste mam upravit v tom tvem scriptu? dekuji
gravatar 7/29/2008 10:22:08 PM
[57] (Marian (silveron(at)tiscali.cz))
stdClass::$Count  odpovědět
edit - vyreseno. $pager = new Pager().... tento sql select jsem musel dat na jeden radek (puvodne jsem ho mel na vice radcich) a zacalo to fungovat

jedna vec. v tuto chvili se mi zobrazuje strankovani korektne jen kdyz ho na strance uvedu jen jednou. Ale je zadane aby " << < 1 2 > >> " bylo uvedeno na webu nahore i dole, tedy $pager->DrawPager(); mit 2x uvedene ve scriptu tam kde ho potrebuji. ale nefunguje to. Nahore je to OK, ale dole se zobrazuje :

" << < << < 1 2 > >> 2 > >> "

jde docilit toho abych mel strankovani dole i nahore ?

dikes
gravatar 7/30/2008 1:14:11 AM
[58] (Trupik (jakub.maly(at)atlas.cz)) www
Re: stdClass::$Count  odpovědět
[54] S největší pravděpodobností se mezi prvním a druhým voláním přidají nějaké mody. Ujistěte se, že všechna nastavení modů ($pager->AddPagerMode(...)) provádíte PŘED voláním DrawPager().
8/16/2008 12:11:13 PM
[59] (Sulfan)
good odpovědět
supr pager, moc mi to pomohlo
8/27/2008 6:41:06 PM
[60] (Looser) www
Nejlepší stránkování odpovědět
Mockrát ti děkuju, ani netušíš jak dlouho jsem neco takovýho hledal :-)
gravatar 8/30/2008 2:09:08 PM
[61] (hacesoft (hacesoft(at)mujmail.cz)) www
RS odpovědět
Dobry den,
velice pekna funkce :). Ale ma drobnou mouchu a to: ze se uvnit CLASSu pouzivaji prikazi echo :(. O onoho lepsi by bylo kdyby se vse ukladalo do bufferu a patricnou metodou se vygeneroval html kod...

$sBuffer ="<table>"; require_once(default_path_scripts."/pager.php"); $pager = new Pager("SELECT id,soubor,rubrika,velikost,datum,verze,popis,stazeni,hodnoceni,pocet_hodnotitelu,naposledy_stazen FROM $nazev_tabulky", 'page'); $pager->PageSize = pocet_zaznamu_na_stranku; $pager->PagerAlign = "center"; $pager->DataBind(); $firstLastMode = new FirstLastPagerMode(); $pager->AddPagerMode($firstLastMode); $prevNextMode = new PrevNextPagerMode(); $pager->AddPagerMode($prevNextMode); $defaultMode = new DefaultPagerMode(); $pager->AddPagerMode($defaultMode); $pager->DrawPager(); $sBuffer .=->PrintPager(); $sBuffer .=download_header ($sAdrScript); while ($obj = $pager->GetOne()) $sBuffer .=vypis_list_download ($sAdrScript,$obj->id,$obj->soubor,$obj->popis,$obj->hodnoceni,$obj->pocet_hodnotitelu,$obj->rubrika,$obj->stazeni,$obj->velikost); $pager->DrawPager(); $sBuffer .=->PrintPager(); $sBuffer ="</table>";


Takze kdyby se pridala metoda neco jako:

$sBuffer .=->PrintPager();

A pri pouziti $pager->DrawPager(); se provede vse co je potreba krome vlastniho vystupu...

Jinak velice zajimavy kod.
gravatar 8/30/2008 3:51:55 PM
[62] (hacesoft (hacesoft(at)mujmail.cz)) www
upravena verze odpovědět
zdravim, tak pokud ma nekdo zajem zde davam upravenou verzi classu, tedka se vsechno predava pres promenne, nic se netiskne primo na vystup:
CLASS
<?php public function DrawPager() { if ($this->BasicPaging){ //pokud uzivatel zadne mody nenastavil, nastavi se zakladni //mody PrevNext, FirstLast a Default $this->AddPagerMode(new FirstLastPagerMode); $this->AddPagerMode(new PrevNextPagerMode); $this->AddPagerMode(new DefaultPagerMode); } //vykresleni div tagu kolem pageru s odpovidajicimi atributy if ($this->PagerID && $this->PagerID != "") $id = " id=\"$this->PagerID\""; else $id =""; if ($this->PagerCssClass && $this->PagerCssClass != "") $class = " class=\"$this->PagerCssClass\""; else $class = ""; if ($this->PagerAlign != "inherit") $align = " style=\"text-align: $this->PagerAlign\""; else $align =""; $sBuffer = "<div $id $class $align >"; //vykresleni odkazu PRED aktualni strankou - v poradi pridavani modu foreach ($this->_modes as $mode){ $sBuffer .= $mode->WriteFirstPart(); } //aktualni stranka - muze mit css tridu if ($this->CurrentPageCssClass && $this->CurrentPageCssClass != "") { $sBuffer .= "<span class=\"$this->CurrentPageCssClass\">"; $sBuffer .= $this->targetedPage; $sBuffer .= "</span> "; } else { $sBuffer .= $this->targetedPage." "; } //vykresleni odkazu ZA aktualni strankou - v opacnem poradi pridavani modu foreach (array_reverse($this->_modes) as $mode){ $sBuffer .= $mode->WriteSecondPart(); } //uzavreni bloku pageru $sBuffer .= "</div>"; return $sBuffer; } ?>


A zde je kod jak upraveny slass implementovat, je to velice jednoduche...

$sBuffer ='<table width="100%">'; require_once(default_path_scripts."/pager.php"); $pager = new Pager("SELECT id,soubor,rubrika,velikost,datum,verze,popis,stazeni,hodnoceni,pocet_hodnotitelu,naposledy_stazen FROM $nazev_tabulky", 'page'); $pager->PageSize = pocet_zaznamu_na_stranku; $pager->PagerAlign = "center"; $pager->DataBind(); //ziska z databaze pozadovanou cast vysledkove sady //mody lze kombinovat - takto lze skombinovat //zakladni strankovani spolu s odkazy na prvni, //posledni, predchozi a nasledujici stranky //defaultni strankovani $firstLastMode = new FirstLastPagerMode(); $pager->AddPagerMode($firstLastMode); $prevNextMode = new PrevNextPagerMode(); $pager->AddPagerMode($prevNextMode); $defaultMode = new DefaultPagerMode(); $pager->AddPagerMode($defaultMode); $sBuffer .='<tr><td colspan="5">'.$pager->DrawPager()."</td></tr>"; $sBuffer .=download_header ($sAdrScript); while ($obj = $pager->GetOne()){//postupne ziskavani jednotlivych zaznamu z vysledkove sady $sBuffer .=vypis_list_download ($sAdrScript,$obj->id,$obj->soubor,$obj->popis,$obj->hodnoceni,$obj->pocet_hodnotitelu,$obj->rubrika,$obj->stazeni,$obj->velikost); } $sBuffer .='<tr><td colspan="5">'.$pager->DrawPager()."</td></tr>"; $sBuffer .="</table>";


Jak vydite je to uplne jednoduche. Jen na konci provedete co pozadujete s promennou $sBuffer. Pokud pouzivate nejaky RS system tak tuto upravicku velice ocenite.

gravatar 8/30/2008 6:30:25 PM
[63] (Trupik (jakub.maly(at)atlas.cz)) www
Re: upravena verze odpovědět
[59] Ano, to se nekdy muze hodit. Trapi me ale otazka - je nutne vkladat do komentare zdrojak cele tridy, kdyz se zmenila jen jedna metoda? :o) Trochu jsem to sestrihal.
gravatar 8/30/2008 7:14:20 PM
[64] (1nt3GraC2 (1nt3GraC2(at)gmail.com))
Proměnná ve sql dotazu odpovědět
Zdravim, mam problem, když chci použít ve sql dotazu proměnnou tak mi to vyhodi chybu "Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files\VertrigoServ\www\az\fotoreporty.php on line 184" existuje na to nejake reseni?
$pager = new Pager('SELECT * FROM `fotoreporty` WHERE `schvaleni` = 1 AND `fotograf` = '$jen_fotograf' ORDER BY `fotoreporty`.`datum` DESC', 'page');

zkousel sem ten String i zretezit ale nepomohlo to, vyhodilo to tuto hlasku:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\VertrigoServ\www\az\include\Pager.class.php on line 174.
gravatar 8/30/2008 7:44:08 PM
[65] (hacesoft (hacesoft(at)mujmail.cz)) www
Re: Re: upravena verze odpovědět
[60] Zdravim, je treba vkladat cely zdrojak, protoze krom te metody co tu zustala je uprav jeste nekolik, dejte si hledat vsechny prikazy else a zjistite ze je tech uprav omnoho vice nez jedna metoda....

8/30/2008 7:51:50 PM
[66] (hacesoft) www
Re: Proměnná ve sql dotazu odpovědět
[61] zdravim, mate tam jednu zakladni chybu! kdyz pouzijete pro uzavreni retezce apostrov, tak dalsi vkadani do stejneho retezce je mozne jen pomoci uvozovek a zase obracene. Pouzivat zpetna lomitka je prasarna, kod vypada hnusne a navic pokud ho nekam hodite, tak vsechna lomitka vypadnou.
Pro vlozeni promenne pro dotaz databaze musite pouzit uvozovky a ne apostrov. nebo ukoncit retezec a pridat k ni promennou.

$pager = new Pager("SELECT * FROM `fotoreporty` WHERE `schvaleni` = 1 AND `fotograf` = $jen_fotograf ORDER BY `fotoreporty`,`datum` DESC", 'page');


tab by to snad mohlo fungovat....
8/30/2008 7:53:33 PM
[67] (hacesoft) www
Re: Re: Re: upravena verze odpovědět
[62] opravicka ne prikaz elase ale samozrejme ze prikaz ECHO, nejak jsem se prehmatl :):):).
gravatar 8/30/2008 8:16:42 PM
[68] (1nt3GraC2 (1nt3GraC2(at)gmail.com))
Proměnná ve sql dotazu odpovědět
Zdravim, mam problem, když chci použít ve sql dotazu proměnnou tak mi to vyhodi chybu "Parse error: syntax error, unexpected T_VARIABLE in C:\Program Files\VertrigoServ\www\az\fotoreporty.php on line 184" existuje na to nejake reseni?
$pager = new Pager('SELECT * FROM `fotoreporty` WHERE `schvaleni` = 1 AND `fotograf` = '$jen_fotograf' ORDER BY `fotoreporty`.`datum` DESC', 'page');

zkousel sem ten String i zretezit ale nepomohlo to, vyhodilo to tuto hlasku:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\Program Files\VertrigoServ\www\az\include\Pager.class.php on line 174.
gravatar 8/30/2008 9:29:43 PM
[69] (1nt3GraC2 (1nt3GraC2(at)gmail.com))
Re: Proměnná ve sql dotazu odpovědět
[65] sorry za dvoj post.
gravatar 8/30/2008 9:51:37 PM
[70] (1nt3GraC2 (1nt3GraC2(at)gmail.com))
Re: Re: Proměnná ve sql dotazu odpovědět
[63] Opet zdravim, tak sem zkusil a bohuzel chyba stale stejna, uplne sem nepochopil co myslis zpetnyma lomitkama, jestli toto "`", tak to sem dostal primo z phpmyadmina a vsude jinde to funguje. O pripadnych rozdilech se rad poucim, jestli mas cas muzem to probrat po mailu, abychom tu zbytecne nezvetsovali mnozstvi komentaru. Kazdopadne predem diky za odpoved.
gravatar 9/4/2008 9:01:47 PM
[71] (gumanadruhou (flyff(at)seznam.cz))
dotaz odpovědět
Super vec, vsechno mi funguje, jen me trapi jedna vec. v databazi mam TITULEK A TELO, vsechno zobrazuje spravne, ale kdyz potrebuji, aby titulek vypadalo jinak, tak TELO se chova uplne stejne, tak nejak jsem to napsal:
while ($obj = $pager->GetOne()) echo "<span class=style2>".$obj->hlavicka. "<span></br>".$obj->username." <br />";
, nejaka rada... diky
gravatar 9/11/2008 11:30:25 AM
[72] (ErrorTM (benit0(at)seznam.cz))
Nevim jak to pouzit odpovědět
Ja vazne nevim co s tim mam delat. Jak to mam implementovat na svuj web?
gravatar 9/14/2008 1:47:01 PM
[73] (LaYosH (LaYosh(at)email.cz))
podminka if($this->first) odpovědět
Pekna a pouzitelna trida. Jen jsme se chtel zeptat na tuto cast skriptu, nevim jak presne pracuje:

$hrefprefix = $_SERVER[´SCRIPT_NAME´];
$this->first=1;

foreach ($_GET as $key=>$value)
{
if ($key == $this->urlParameter)
continue;
if ($this->first)
{
$hrefprefix .= "?".$key."=".$value;
$this->first = 0;
}
else
$hrefprefix .= "&".$key."=".$value;
}
$this->prefix = $hrefprefix;
}

Jde mi predevsim o podminku if($this->first) {...}

Nevim co presne podminka vyhodnocuje? Co vraci vyraz "if($this->first)" za hodnotu? Kdyz je $this->first ==1 tak je to TRUE a kdyz $this->first==0 tak FALSE?
gravatar 9/14/2008 2:00:14 PM
[74] (Jakub Malý (jakub.maly(at)atlas.cz)) www
Re: podminka if($this->first) odpovědět
[70] Ano. Je to tam proto, že pro oddělení prvního parametru v url se používá otazník, pro další parametry pak ampersand. Nevim, kdo vymyslel tenhle nesmysl, ale je to zkrátka tak.
gravatar 9/14/2008 2:02:16 PM
[75] (Jakub Malý (jakub.maly(at)atlas.cz)) www
Re: dotaz odpovědět
[68] A není to jen chybami v HTML syntaxi v tom vašem výrazu? Span je neuzavřený, první br tak je uzavřený špatně.
gravatar 10/15/2008 6:07:14 PM
[76] (Turbo (780(at)centrum.cz))
SEO url odpovědět
Zdrvím, dekuji teto tride moje problemi se strankami to vyresilo,ale problem je v tom jest-li by sem neslo dat sem upravenou tridu pro seo vsem moc dekuji.Turbo
gravatar 10/19/2008 6:34:00 PM
[77] (franta (voltu(at)seznam.cz))
jmeno sloupce s cislem odpovědět
Nazdar
Potreboval bych prosim nak vyresit chybu, ze kdyz nazev sloupce v tabulce je cislo vypíše stránka: Parse error: parse error, unexpected T_NUM_STRING, expecting T_STRING
gravatar 1/2/2009 5:56:17 PM
[78] (Hacky (hacky(at)easyfunfilm.com)) www
Problém 1 strana odpovědět
Ahoj mám menší problém s toutu třídou nevím kam mám plácnout promenou aby když mám treba novinky/strana/2/ najedu na odkaz strana 1 aby se mi nezobrazovalo jen /novinky/ ale i to strana 1 Pomohl by mi nekdo prosím ?
gravatar 1/5/2009 9:45:21 PM
[79] (Markus (marekkera(at)volny.cz))
Nepouživejte echo odpovědět
Dobrá knihovnička, jenom bych tam ocenil metody, které nevrací text echem ale pomocí return. Když jsem používal u ajaxu tak jsem musel veškerá echa přepisovat. To jen tak na doplnění.
gravatar 1/10/2009 5:50:41 PM
[80] (kosik (kosik(at)xko.cz))
nenačte odkazy odpovědět
stránkování funguje, ale odkazy nefungují. Naskočí první stránka a odkaz na další je neaktivní a na poslední odkazuje na první.
Kde dělám chybu? Dík
gravatar 2/18/2009 9:37:32 PM
[81] (Petr (petr.jsem(at)seznam.cz))
pocet radku odpovědět
Nevím , jak vypsat kolik je celkem nalezených záznamů. Nevíte jak ?
gravatar 2/18/2009 9:56:18 PM
[82] (Trupik (jakub.maly(at)atlas.cz)) www
Re: pocet radku odpovědět
[81] zkuste $cp->get_ItemCount() (podobna funkce je taky get_PageCount()). Oboji lze volat po $cp->DataBind()
gravatar 2/19/2009 11:26:20 PM
[83] (Petr (petr.jsem(at)seznam.cz))
Re: Re: pocet radku odpovědět
[82] To jsem si myslel také, ale nefunguje to , bud to špatně volám a nebo prostě ta funkce není dopsaná. Prosím opravdu někdo nevíte ? Velmi to potřebuji , děkuju všem
gravatar 2/19/2009 11:34:16 PM
[84] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Re: Re: pocet radku odpovědět
[83] Mate pravdu, byla tam chybka, už je opravená.
gravatar 2/26/2009 8:28:12 PM
[85] (noem (asdasd(at)asd.ds))
Cekat nebo necekat? odpovědět
Zdravim, chtel jsem se zeptat, jestli bude nekdy oprava kodu tridy, ktera nebude obsahovat "echo" a tim padem se bude vypisovat tam, odkud se zavola.. Cili cekat nebo ne? Dekuji za info..
gravatar 3/8/2009 11:07:54 PM
[86] (kamil (kamil.hradil(at)centrum.cz))
UTF8 odpovědět
Dobrý den, je možné nastavit kodování znakové sady v mysql dotazu pro vypsání výsledků?
Momentálně se ve výsledcích nezobrazují české znaky.
Děkuji.
gravatar 3/13/2009 11:33:11 AM
[87] (Vladik (bacik(at)fns.uniba.sk)) www
Fantazia... odpovědět
Co k tomu povedat? Malokedy najde clovek tak skvelu vec s este skvelejsim vysledkom! Vdaka titic krat...
gravatar 6/10/2009 10:27:13 PM
[88] (Pirana (Decade(at)email.cz))
celý kod odpovědět
já to absolutně nechápu, mohl by tady někdo hodit celý popis?
Pager.class.php co bude v tomto souboru.....
gravatar 6/11/2009 8:03:05 AM
[89] (Trupik (jakub.maly(at)atlas.cz)) www
Re: celý kód odpovědět
[88] Příklady nahoře obsahují celý kód, v Pager.class.php bude třída, kterou si můžete stáhnout (odkaz pod článkem). Líp už to popsat nedokážu.
6/11/2009 10:59:48 PM
[90] (Pirana)
Re: Re: celý kód odpovědět
[89] jsem osel, nevšimnul jsem si :)
7/29/2009 12:58:35 PM
[91] (zuzak)
mě to nefunguje odpovědět
stahnul jsem to vyskoušel a mám jen bílou stránku
10/27/2009 7:57:34 PM
[92] (unlucky)
Mod rewrite odpovědět
Velmi pekny skript, ale zda se mi trosku... komplikovany :P

Mam podobny, ktery je kratsi ... no ale co, pouzivat skript nekoho jineho, kt. pouziva hodne lidi je urcite lepsi :D

By me zajimalo,jak upravim URL pro stranky pro mod rewrite typu

stranka.cz/cs/blog/2

cislo znamena stranka. Momentalne tam mam &stranka= atd..
gravatar 11/1/2009 9:15:33 PM
[93] (PetrQ (kytary(at)post.cz))
serializace odpovědět
Hezký den,
skvělá třída, používám ji hodně a rád :o)

Rád bych se zeptal - absolutní začátečník - mám v Mysql uložené serializované položky, které při běžném výpisu nejprve upravím pomocí unserialize a potom pomocí foreach vložím do tabulky. Nevím, jak použít tento postup spolu s pager class.
Děkuji všem. P.
11/8/2009 1:11:36 PM
[94] (Michael)
Nejde odpovědět
Mě to teda vůbec nefunguje, zkoušel jsem snad všechny kombinace a nic nešlo :-(

Nemůžete někdo popsat podrobněji jak to použít ? :-/
gravatar 11/29/2009 9:18:49 PM
[95] (Pavel Chmelař (pavelchmelar(at)volny.cz)) www
změny / dotaz odpovědět
Zdrávím,
super práce..jen technická, doporučuji prohodit tyhle řádky:
//zjisteni poctu zaznamu $c = (mysql_fetch_object( mysql_query($this->CountCommand))); $this->itemCount = $c->Count; //vypocet poctu stranek $this->pageCount = (int) (($c->Count + $this->PageSize - 1) / $this->PageSize); if ($this->targetedPage > $this->pageCount) $this->targetedPage = 1; //vypocet parametru pro LIMIT $firstrow = ($this->targetedPage - 1) * $this->PageSize; //ziskani pozadovane stranky $this->ResultSet = mysql_query("$this->SelectCommand ". " LIMIT $firstrow, $this->PageSize" );


za tyhle:
//vypocet parametru pro LIMIT $firstrow = ($this->targetedPage - 1) * $this->PageSize; //ziskani pozadovane stranky $this->ResultSet = mysql_query("$this->SelectCommand ". " LIMIT $firstrow, $this->PageSize" ); //zjisteni poctu zaznamu $c = (mysql_fetch_object( mysql_query($this->CountCommand))); $this->itemCount = $c->Count; //vypocet poctu stranek $this->pageCount = (int) (($c->Count + $this->PageSize - 1) / $this->PageSize); if ($this->targetedPage > $this->pageCount) $this->targetedPage = 1;



Jedná se o pouhé prohození pořadí. Důvod je ten, že pokud používáme externí CountCommand v této podobě:
$pager->CountCommand = "SELECT FOUND_ROWS() AS Count"

v původní verzi by stále vracel č.1 namísto opravdového počtu záznamů!

Jinak nevím jestli jsem hledal špatně, ale nenašel jsem možnost nastylovat neaktivní odkazy "<<" "<"
">" ">>". U krajních jsem si všimnul použití stejné css třídy jako u ,,aktualne zobrazované" což je špatně, ale menší zásah do třídy mi to vyřešil. Ovšem pouze u neaktivnich odkazu "<<" a ">>". Kde lze nastavit styl temto neaktivnich odkazům "<" ">" je mi záhadou.
Poradí mi prosím někdo:)?
gravatar 12/3/2009 10:47:41 AM
[96] (unlucky (erikator(at)centrum.cz))
strip tags a seo url odpovědět
poradi mi nekdo s tim seo url v mod rewrite?

jinak nejak to nefunguje se strip tags

$textik_art=$obj->text;
echo strip_tags($textik_art); vypisuje mi to i s kodem
gravatar 12/3/2009 12:36:26 PM
[97] (unlucky (erikator(at)centrum.cz))
Re: strip tags a seo url odpovědět
[96] aha, html specialchars :D
12/10/2009 11:30:50 AM
[98] (Michael)
Parse error odpovědět
Vždy mi to napíše: Parse error: parse error, expecting `T_OLD_FUNCTION´ or `T_FUNCTION´ or `T_VAR´ or `´}´´ in /3w/wz.cz/m/mojefinance/pager.class.php on line 9
1/6/2010 8:56:03 PM
[99] (CPBBT)
Jak pracuje třída odpovědět
Jakto, že může být použita tato konstrukce: return $this->ParentPager->prepareLink($page, $anchoringText, $cssClass);
v následující třídě.

Přece objekt, ve které je metoda "prepareLink" nebyla v dané třídě vytvořena.

Díky


{
//vypsani jednoho linku
public $ParentPager;
public $TargetedPage;
public $PageCount;

public function Link($page, $anchoringText, $cssClass)
{
return $this->ParentPager->prepareLink($page, $anchoringText, $cssClass);
}


/**
* Tato metoda bude vypisovat pred aktualni stranku
*/
public abstract function WriteFirstPart();

/**
* Tato metoda bude vypisovat za aktualni stranku
*/
public abstract function WriteSecondPart();
}
gravatar 1/6/2010 10:42:55 PM
[100] (Trupik (jakub.maly(at)atlas.cz)) www
Re: Parse error odpovědět
[98] Není možné, že jste si vybral špatně mezi verzemi pro PHP4 a PHP5?
1/7/2010 6:11:39 PM
[101] (petr)
Nulový počet záznamů odpovědět
Už se to tu objevilo, ale bez odpovědi. Když je nulový počet záznamů v dotazu, lze nějak nastavit, ať se zobrazí text např. Nejsou žádné záznamy a neobjeví se stránkování?
Díky
gravatar 3/4/2010 11:10:24 PM
[102] (David (Dem-enD(at)seznam.cz)) www
Problém odpovědět
Dobrý den,
web mám řešený tak, že v indexu je skript, který vypíše články (textové soubory) ze složky, ale zmiňované textové soubory nahrávám na FTP, tudíž texty nebudou v MySQL jen právě na tom FTP. A dotaz: Jak mám tedy udělat stránkování, když nemám obsah v MySQL? Kdyby jste mi chtěli poradit ohledně databáze, tak prosím trochu pomaleji...:)




gravatar 4/16/2010 12:42:25 PM
[103] (Pšeník (admin(at)situjte.net)) www
konflikt s předávání metodou GET odpovědět
mám menší problém při aplikaci této stránkovací třídy. Na svém webu používám dynamické vykreslování stránek(sekcí).
Tzn. klidnu na sekci webu s názvem Články a pomocí databáze se vykreslí stránka index.php?page=1 nebo page=clanky - clanky či id se nastavuje v administraci. když aplikuji stránkování do obsahu vykreslování sekcí a chci stránkovat, problém nastane při vykreslení sekce a stánky v sekci. příkaz page se nepředá a str(určuje stránku v sekci) vykreslí null, protože se napředá požadavek na sekci webu která se má vykreslit
gravatar 4/17/2010 4:44:16 PM
[104] (Spurný Aleš (spurny9(at)seznam.cz)) www
Metoda GET odpovědět
Dobrý den,
mám problém s předáním metody GET do sql dotazu.
Adresa stranky je př. index.php?page=fotogalerie&folder=1 . U dotazu
$pager = new Pager('SELECT * FROM 28t_fotogalerie', 'strana');

jsem chtěl přidat
$pager = new Pager('SELECT * FROM 28t_fotogalerie WHERE id_folder = $_GET[folder]', 'strana');

ale zjistil jsem že to tímto způsobem nepůjde.
Chyba: mysql_fetch_object(): supplied argument is not a valid MySQL result resource

Prosím o radu
gravatar 5/3/2010 3:26:46 PM
[105] (1url.cz (as(at)aas.com)) www
:) odpovědět
Také jsem si něco podobného nedávno napsal, sice ne tak univerzální...
gravatar 5/12/2010 4:26:41 PM
[106] (Martin (info(at)martin-kolar.com)) www
Priklad pouziti s podminkou WHERE odpovědět
<?php require_once('pager.class.php'); $uid=(int)$_GET['rok']; $SQL="SELECT * FROM tabulka WHERE rok=$uid ORDER BY rok,id ASC"; $pager = new Pager($SQL, 'strana'); $pager->PageSize = 5; $pager->PagerAlign = "center"; $pager->DataBind(); while ($obj = $pager->GetOne()) { } $pager->DrawPager(); ?>
 

TOPlist