Kategórie
PHP

Stránkovanie výstupu v PHP

Čo si myslíte, aké zložité je urobiť stránkovanie záznamov, ktoré môžete vidieť na nasledujúcom príklade ?

S mojou PHP triedou je to veľmi jednoduché. Ak chcete vedieť ako na to, tak čítajte ďalej.

Nebudem tu do detialov opisovať ako to funguje, len uvediem nejaké príklady použitia a na zvyšok tu máte zdrojáky ;).

Takže najprv kód z hore uvedeného príkladu. Máme pole so 150 záznamami a vypisujeme ich po 10 záznamov na stránku. O to ktorá stránka sa má zobraziť a takisto aj o vygenerovanie „stránkovača“ sa stará objekt triedy MyPaginator.

Render();

/**
 *  vypísanie konkrétnych záznamov na základe údajov zo stránkovača
 */ 
for($j = 0; $j < $paginator->ItemsPerPage; $j++) {
  echo $a[$paginator->Offset+$j] . "
\n"; } $paginator->Render(); ?>

Tu máte celý zdroják príkladu a zdroják triedy MyPaginator.

Vzhľad stránkovača si môžete upraviť pomocou CSS, alebo samotné html, ktoré sa generuje môžete zmeniť úpravou metód Render() a PrintIndex().

Ak je vám moj stránkovač povedomý, tak vedzte, že som sa inšpiroval QPaginatorom z výborného frameworku Qcodo, avšak ten môj sa dá použiť samostatne…

Príklad využitia pri SQL dotaze

Ukážem čiste len príklad selectu. Predpokladá sa, že $objPaginator už bol inicializovaný s celkovým počtom záznamov a s počtom záznamov na stránku.

$sqlQuery = printf("SELECT * FROM tabulka LIMIT %s, %s", $objPaginator->Offset, $objPaginator->ItemsPerPage); 

Uvedené príklady sú síce jednoduché, ale verím, že na pochopenie toho ako to funguje sú postačujúce ;). Ak máte nejaké otázky tak do komentárov s nimi!

Stránkovanie vo WordPresse

WordPress poskytuje pre stránkovanie podobnú funkciu, ktorá dokáže vygenerovať linky na jednotlivé podstránky či už ako HTML linky, HTML zoznam s linkami, alebo PHP pole… Funkcia sa volá paginate_links.

7 odpovedí na “Stránkovanie výstupu v PHP”

dobrý deň, ja sa chcem spytať ako dam z databazy tovary tak aby sa zobrazovali napr. pomocou mysql_fetch_array($sql){include(„tovary_box.php“);}; kde $sql je výber z tabulky mysql_query(…)

dakujem

ma to chybicku ked pridem na stranku zo strankovanim tak sa mi maju ukazat najnovsie zaznami a nie najstarsie

dalsia vec pri ulozeni stranky povedzme page 9 by mal jej obah zostat aj pri pridany novych zaznamov

Tak tá chybička tam nie je, treba si to presnejšie pozriet :) Nie je problém, aby na stránke so stránkovanim boli najnovšie záznamy, stačí tomu prispôsobiť napríklad SQL select…

A s tým druhým bodom tiež nesuhlasím, je to vec pohľadu, mne vyhovuje, že sa staršie veci posúvajú ďalej a nie sú stále na rovnakej stránke, a mnoho mnoho iných webov to má rovnako

Zdravim, :-)

Strankovac je super len mam jednu otazocku. Poradte mi prosim ako mam aplikovat strankovac na result z mysql_query().LIMIT v dotaze sa pravdepodobne asi nepouzije.
Tu je moj pokus:

$result=mysql_query(„SELECT * FROM komentar“);
if(!$result):
echo mysql_errno($spojenie) . „:“ . mysql_error($spojenie). „\n“;
else:
$j=0;
while($row = mysql_fetch_row($result)):
$j=$j++;
echo $row[$paginator->Offset+$j];
endwhile;
endif;

Opravte ma prosim. Vopred Vam dakujem,

Najprv sa spytam, ze preco nemozete pouzit limit v dotaze ? Je to ovela efektivnejsie ako vyselectovat vsetko a potom to filtrovat…

A ku kodu: nepojde to. mysql_fetch_row vrati jeden riadok z vystupu ako asociativne pole, cile $row[$paginator->Offset+$j] nema ziadny zmysel…

Jednoznacne by som to spravil cez zmenu selectu (pridanie LIMIT $objPaginator->Offset, $objPaginator->ItemsPerPage).

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *