Avatar
oggymotslp
Člen
Avatar
oggymotslp:

Zdravím,

na stránce mám výpis novinek:

$i = 0;

                        foreach ($new as $n)
                        {
                        $i++;

                                echo('<div id="tabulka2"><article>
                                                <header>
                                                <div id="obal">
                                                <div id="prvni">
                                                <b><i>' . $datuma . '</i></b>
                                                </div>
                                                <div id="druhy">
                                                <h2><font color="#6e2b90"><a href="clanek.php?id=' . $n['id'] . '">' . $n["titulek"] . '</a></font></h2>
                                                </div>
                                                <div id="tre">
                                                <b><i>' . $n['autor'] .'</i></b>
                                                </div>
                                                </div>
                                                <div class="delicObsah"></div>
                                                </header>
                                                <section> <big>
                                                ' . $small . '
                                                </big></section></div></br></br>');
                        }

A vůbec nevím jak mám udělat, aby to po 10 článcích stránkovalo.

Děkuji všem za rady :)

Odpovědět 20. září 15:04
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
Oxtimus
Člen
Avatar
Odpovídá na oggymotslp
Oxtimus:

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.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 20. září 15:25
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.