IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
oggymotslp
Člen
Avatar
oggymotslp:20.9.2016 15:04

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.9.2016 15:04
Proč to dělat jednoduše, když to jde i složitě :D
Avatar
Michal
Člen
Avatar
Odpovídá na oggymotslp
Michal:20.9.2016 15:25

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í
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
20.9.2016 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.