Diskuze: Stránkování novinek
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 2 zpráv z 2.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ideální by bylo, kdyby si stránkování řešil už na úrovni databáze (bylo by zbytečné vybrat všechny články, když jich pak stejně vypíšeš jen 10).
Zobrazená stránka bude reprezentována např. $_GET parametrem:
localhost/index.php?stranka=1
V souboru, kde čteš z databáze články a ukládáš je do proměnné $new pak uprav svůj SQL dotaz:
$stranka = isset($_GET['stranka']) ? $_GET['stranka'] : 1; // Pokud se stránka nezadá v URL, bude to ta první
$pocetNaStranku = 10; // Počet článků na stránku
$new = mysqli_query($db, 'SELECT * FROM clanky LIMIT ' . $pocetNaStranku . ' OFFSET ' . (($stranka - 1) * $pocetNaStranku));
LIMIT určuje, kolik maximálně položek z tabulky se vybere, OFFSET pak od jaké pozice se tento LIMIT bude počítat:
Příklad se stránkou 7:
LIMIT = 10 // Na stránce bude vždy jen 10 článků
OFFSET = 10 * (7 - 1) = 60 // Od 60. článku se začne počítat celkem 10 položek, takže se zobrazí 60. - 69. článek
Následně je už jen nutné přidat někam do stránky (opět PHP cyklem) tlačítka pro přechod na jednotlivé stránky. Kolik tlačítek má být můžeš zjistit pomoci SQL funkce COUNT(*), která spočítá všechny články v tabulce:
$pocetClanku = ... // SQL dotaz s COUNT(*)
$pocetTlacitek = ceil($pocetClanku / $pocetNaStranku) // Zaokrouhluje se vždy nahoru, i když zde je 31 článků, nestačí 3, ale 4 stránky
// Jednotlivá tlačítka budou vést na adresy:
// index.php?stranka=1
// index.php?stranka=2
// ...
V poslední řadě je pak také nutné dořešit ochranu proti SQL injekci, jelikož číslo stránky bude veřejně dostupně z URL řádku.
Zobrazeno 2 zpráv z 2.