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.


Posted

in

by

Comments

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

  1. papco Avatar
    papco

    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

  2. head Avatar

    papco akosi som nepochopil co presne myslis ;), ale ak potrebujes poradit len s mysql_fetch_array() tak sa pozri na php dokumentaciu: http://www.php.net/manual/en/

  3. slaco Avatar
    slaco

    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

  4. head Avatar

    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

  5. head Avatar

    UPDATE: do článku som pridal link na wordpress funkciu pre stránkovanie a takisto som opravil chybný SQL príklad…

  6. Vlado Avatar

    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,

  7. head Avatar

    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é *