Autor Zpráva
leorond
Profil
Ahoj, potřeboval bych upravit tento skript aby se nevypisovaly všechny stránky 1 2 3 4 5 6 7 8 9 10 atd. ale například po 5 stránkách takto ... 4 5 6 7 8 ..., jde mi o to abych když budu mít například 100 řádků v DB tak se mi nevypsalo za sebou 100 čísel ve stránkování.

<?php 
$radku = mysql_num_rows(mysql_query("SELECT id FROM stranky;"));

$po = 1; /* počet řádků na stránku */
$max_stranek = ceil($radku / $po); /* počet stránek */
$url_stranka = ($_GET["stranka"] / $po) + 1; /* Aktuální stránka */

for($i=0; $i < $max_stranek; $i++) 
{
    $cislo = ($i + 1);
    $url_cislo  = ($cislo * $po) - $po;
    if($url_stranka != $cislo) 
    {
        echo "<a href=\"?strana=strana/home&stranka=".$url_cislo."\">".($i + 1)."</a>\n";
    } 
    else 
    {
        echo "<strong>".($i + 1)."</strong>\n";
    }
}

if(empty($_GET["stranka"])) 
{
$stranka = 0;
} 
else 
{
$stranka = $_GET["stranka"];
}
$cist = mysql_query("SELECT * FROM stranky ORDER BY id DESC LIMIT ".intval($stranka).",$po");
while($data = mysql_fetch_assoc($cist)) 
{
    echo htmlspecialchars($data["nadpis"])."<br>";
}
?>

Děkuji za pomoc
mimochodec
Profil
Použij google, Luku. A hledej php stránkování. Nebo to zkus vymyslet sám, vlastně k tomu potřebuješ jen porovnávání čísel a if a for. Nevím, jakou čekáš radu.
leorond
Profil
mimochodec: promiň ale abych slušně zareagoval na tvůj příspěvek

Použij google, Luku. A hledej php stránkování. Nebo to zkus vymyslet sám, vlastně k tomu potřebuješ jen porovnávání čísel a if a for. Nevím, jakou čekáš radu.
V tom případě nechápu existenci fóra kde samozvaný profesionál odkazuje na vyhledávač ve kterém se to dá najít, napadá mne jen tolik že všechno co umíš hledáš na google nebo mu děláš nějakou reklamní kampaň. V podstatě mě vyháníš na jiné fórum kde najdu řešení které jenom zkopíruji, nic se nenaučím a pravděpodobně to bude slátanina všeho možného. No děkuji ti za pomoc
mimochodec
Profil
leorond:
Ve většině případů, kdy na nějaký dotaz reaguji, se snažím pomoct. V tomto případě ne. Proč?
- z uvedeného kódu vyplývá, že umíš použít if, for a porovnání.
- požadovaná věc je tak triviální, že to, co píšu výše, k jejímu naprogramování stačí. Jsi na stránce 10? Chceš zobrazit čísla 8 9 10 11 12? Co přesně na tom chceš poradit, potřebuješ ukázku použití for? Pak jsou tady výjimky - pro stránku č. 1 asi nechceš čísla -1 0 1 2 3. K ošetření tohoto potřebuješ funkci if. S tím zjevně pracovat umíš, tak co potřebuješ víc?
- kdybys ten google použít zkusil, vypadlo by na tebe několik hotových řešení, která nejsou ani objevná, ani nijak geniální, prostě to jen někdo už napsal. Je to tak jednoduché, že k tomu žádná genialita není potřeba, ale zároveň je s tím tolik práce, že nevidím důvod, proč bych těch 20 řádků měl kvůli tobě psát.


Přesto možná trochu poradím.
Výsledek ovlivňují tato čísla:
- celkový počet položek
- počet položek na stránku
- aktuální pozice
- počet zobrazených čísel

Nakresli si na papír jednak nějakou "běžnou" situaci, kdy aktuální pozice je někde uprostřed a potřebuješ tu zmiňovanou řadu tak, jak jsem psal ten příklad 8 9 10 11 12. Napsat cyklus pro toto je pohoda. Pak si ošetři všechny výjimky, tedy aktuální pozici poblíž nuly a poblíž maxima. Jestli budeš mít napevno dáno, že těch čísel je pět, bude to jednodušší. Jestli i to chceš mít v proměnné, bude to trochu delší. Po půl hodině budeš mít na papíru všechny možné situace a pak to jen přepíšeš do ifů a forů.
leorond
Profil
Přesně tohle jsem potřeboval vědět, i když už spoustu věcí zvládám sám tak občas potřebuji trochu pošťouchnout správným směrem. Děkuji


Tak jsem to zkusil udělat a dostávám perfektní výsledek [ 1 ] [ 2 ] [ 3 ] ... [ 10 ], přesně tak jsem to chtěl :)

<?php
$radku = mysql_num_rows(mysql_query("SELECT id FROM stranky;"));
 
$po = 5; /* počet řádků na stránku */
$max_stranek = ceil($radku / $po); /* počet stránek */
$url_stranka = ($_GET["stranka"] / $po) + 1; /* Aktuální stránka */
$posun = 3; //definování zobrazení počtu stránek okolo aktuální
for($i=0; $i < $max_stranek; $i++) {
$cislo = ($i + 1);
$url_cislo = ($cislo * $po) - $po;
if ($cislo == 1 && $url_stranka > $posun+1) {echo "<a href=\"?strana=strana/home&stranka=".$url_cislo."\">[".($i + 1)."]</a>…";} //zobrazení odkazu na 1.stránku
if ($cislo == $max_stranek && $url_stranka < $max_stranek-$posun) {echo "…<a href=\"?strana=strana/home&stranka=".$url_cislo."\">[".($i + 1)."]</a>";} //zobrazení odkazu na poslední stránku
 if($url_stranka != $cislo && ($cislo>$url_stranka-$posun-1 and $cislo<$url_stranka+$posun+1)) {
 echo " <a href=\"?strana=strana/home&stranka=".$url_cislo."\">[".($i + 1)."]</a> ";
 } else {
 if ($url_stranka == $cislo){echo "".($i + 1)."";} 
 }
}
if(empty($_GET["stranka"]))
{
    $stranka = 0;
}
else
{
    $stranka = $_GET["stranka"];
}
$cist = mysql_query("SELECT * FROM stranky ORDER BY id DESC LIMIT ".intval($stranka).",$po");
while($data = mysql_fetch_assoc($cist))
{
    echo "<p>".htmlspecialchars($data["nadpis"])."</p>";
}

?>



Ale pár otázek k tomu ještě mám, co kdybych nechtěl každé to stránkování přímo takhle vkládat ale chtěl jsem ho například includovat? Šlo by to?
tiso
Profil
leorond: tak, svoje stránkovanie si si urobil, teraz by si si v rámci učenia a napredovania mal prejsť iné riešenia a snažiť sa ich pochopiť. To tvoje je zbytočne náročné na prostriedky a komplikované. Dá sa to napísať oveľa lepšie.

Šlo by to?
Šlo, ale znovupoužiteľnosť sa robí inak - vytvoríš si na stránkovanie funkciu alebo metódu triedy a tú potom používaš.
leorond
Profil
Ano už to tu řeším, vždy se dá lecos zlepšit a zjednodušit.
Keeehi
Profil
Další rada, ta funkce nebude přímo vypisovat stránkování, ale bude jen vracet pole čísel stránek. Z takového pole je už velmi jednoduché vytvořit odkazy a na různých místech mohou vypadat různě dle potřeby.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: