Autor Zpráva
smid83
Profil *
Ahoj mužete mi někdo poradit udělal jsem jednoduchý skript na stránkování samozdřejmě i s css stylem a chtělbych se zeptat jestli nejde nějak zjednodušit do nějakého skriptu abych nemusel vše když udělám novou sránku tak to musím vše předělávat a dodávat ručně že bych pak přidal jenom číslo jedná se pak ovelké stránkování že tam budu mít i třeba 1000 stran předem vám děkuji za rady
if ($_GET['str'] =="1"):
echo"<div class='paginate'><span class='disabled'>previous</span><span class='current'>1</span><a href='".$url."str=2'>2</a><a href='".$url."str=3'>3</a><a href='".$url."str=2'>next</a></div>
";
endif;
if ($_GET['str'] =="2"):
echo"<div class='paginate'><a href='".$url."str=1'>previous</a><a href='".$url."str=1'>1</a><span class='current'>2</span><a href='".$url."str=3'>3</a><a href='".$url."str=3'>next</a></div>
";
endif;
if ($_GET['str'] =="3"):
echo"<div class='paginate'><a href='".$url."str=2'>previous</a><a href='".$url."str=1'>1</a><a href='".$url."str=2'>2</a><span class='current'>3</span><span class='disabled'>next</span></div>
";
endif;
Tori
Profil
smid83:
Někde si zjistěte (nejspíš v DB, jestli čtete data odtamtud), kolik stránek ten výpis bude mít. Pak stačí jednoduchý cyklus:
$pocetStranek = 3; // tohle si odněkud zjistíte
$aktualni = isset($_GET['str']) ? (int) $_GET['str'] : 1;

echo "<div class='paginate'>";
if ($aktualni - 1 > 0)  // předchozí stránka 
    echo '<a href="' . $url . 'str=' . ($aktualni-1) . '">previous</a>';
else
    echo "<span class='disabled'>previous</span>";

for ($i = 1; $i <= $pocetStranek; $i++) {
    echo ($aktualni == $i ? "<span class='current'>$i</span>" : "<a href='".$url."str=$i'>$i</a>");
}

if ($aktualni + 1 <= $pocetStranek)  // následující stránka 
    echo '<a href="' . $url . 'str=' . ($aktualni+1) . '">next</a>';
else
    echo "<span class='disabled'>next</span>";
echo '</div>';

Při větším počtu stránek se používá stránkování např.: 1 | 2 | 3 .. 5 .. 10 .. 20 .. 50 .. 90 .. 98 | 99 | 100 Nemůžu teď najít použitelný odkaz na algoritmus, kterým to je dělané.
smid83
Profil *
pravě že ne čte to normalne vždit to máte v ukázce get str 1 get str 2 get str 3 kolik mam get takova bude strana


já právě dělám ty tečky taky ručně předvedu příklad 11 str
if ($_GET['str'] =="11"):
echo"<div class='paginate'><a href='".$url."str=10'>previous</a><a href='".$url."str=1'>1</a><a href='".$url."str=2'>2</a><a href='".$url."str=5'>...</a><a href='".$url."str=6'>6</a><a href='".$url."str=7'>7</a><a href='".$url."str=8'>8</a><a href='".$url."str=9'>9</a><a href='".$url."str=10'>10</a><span class='current'>11</span><a href='".$url."str=12'>12</a><a href='".$url."str=13'>13</a><a href='".$url."str=14'>14</a><a href='".$url."str=15'>15</a><a href='".$url."str=16'>16</a><a href='".$url."str=17'>...</a><a href='".$url."str=19'>19</a><a href='".$url."str=20'>20</a><a href='".$url."str=12'>next</a></div>
";
endif
Tori
Profil
smid83:
kolik mam get takova bude strana
Nemyslela jsem číslo aktuální stránky ale kolik stránek je celkem. Stránkování přece někde končí, nemáte miliardu stránek.
Kcko
Profil
smid83:
Zkus si vzít inspiraci z toto prastarého ale snad funkčního kódu stránkování
smid83
Profil *
ted mam 27 stránek ale bude jich mnohem vic okolo 2000


KckoJá vám děkuji za tento kod ale ten už jsem jednou používal je dobrej ale vím že tam sem měl broblém s css tiloláním nevěděl jsem jak na to zkusim se na to ještě jednou podívat ale pochybuju že si stím poradím
smid83
Profil *
tak jsem ten skript co poslal odkaz Kcko nakonec dokazal na stylovat ale neporadil by mi mi ještě někdo aby to bylo dokonalí jak ktomu skryptu přidám ještě předchozí a další zde posílám holý skrypt
<?php


/** ---------- nastaveni ---------- */

$options = array(
                    'rows_total' => 100,  // celkovy pocet zaznamu 
                    'offset'     => 7, // po kolika budeme strankovat
                    'interval'   => 4, // interval cisel nalevo a napravo od aktivniho = vybraneho cisla
                    'url'        => '?url=1&', // adresa ke ktere se pripoji strankovani parametr
                );
echo pagingBlock($options);


/**
 * Strankovani s promenlivym stredem 
 * 
 * @param array $options  pole slouzici k nastaveni hodnot ktere funkce vyzaduje viz priklad  
 * @date 28-12-2009  
 * @author Roman Janko <admin@rjwebdesign.net>  
 *   
 **/  
function pagingBlock($options = array())
{
    $html = '';
    
    $pages_total = ceil($options['rows_total'] / $options['offset']);
    $interval    = $options['interval'];
    $actual_page = empty($_GET["s"]) ? 1 : $_GET["s"];
    $url         = $options['url']; //"?url=1&";
    
    
    /** ---------- fix proti URL hacku ---------- */
    if ($actual_page < 0)     
        $actual_page = 1;
    
    if ($actual_page > $pages_total) 
        $actual_page = $pages_total;


    /** ---------- co budeme ukazovat, interval ---------- */
    $show = array();
    
    for ($i = $actual_page - $interval; $i <= $actual_page + $interval; $i++)
    {
        if ($i > 0 && $i <= $pages_total)
            $show[] = $i;
    }
    
    
    /** ---------- zacatek rady ---------- */
    
    if ($actual_page - $interval == 2)
    {
        $html .= "<a href='".$url."s=1'>1</a> ";
    }
    
    if ($actual_page - $interval > 2)
    {
        $html .= "<a href='".$url."s=1'>1</a> ... ";
    }
    
    
    /** ---------- dynamicky stred ---------- */
    
    for ($i = 1; $i <= $pages_total; $i++)
    {
        if (in_array($i, $show))
        {
            if ($i == $actual_page)
            {
                $html .= " <strong>$i</strong> ";
            }
            else
            {
                $html .= "<a href='".$url."s=$i'>$i</a> ";
            }
        }
    }
    
    /** ---------- konec rady ---------- */
    
    if ($actual_page + $interval + 1 == $pages_total)
    {
        $html .= "  <a href='".$url."s=".$pages_total."'>".$pages_total."</a>";
    }
    
    if ($actual_page + $interval + 1 < $pages_total)
    {
        $html .= " ... <a href='".$url."s=".$pages_total."'>".$pages_total."</a>";
    }
    
    
    /** ---------- vystup  ---------- */
    return $html;
}

?>
Kcko
Profil
smid83:
Jednodušše

<?php
 





 
/** ---------- nastaveni ---------- */
 
$options = array(
                    'rows_total' => 100,  // celkovy pocet zaznamu 
                    'offset'     => 7, // po kolika budeme strankovat
                    'interval'   => 4, // interval cisel nalevo a napravo od aktivniho = vybraneho cisla
                    'url'        => '?url=1&', // adresa ke ktere se pripoji strankovani parametr
                );
echo pagingBlock($options);
 
 
/**
 * Strankovani s promenlivym stredem 
 * 
 * @param array $options  pole slouzici k nastaveni hodnot ktere funkce vyzaduje viz priklad  
 * @date 28-12-2009  
 * @author Roman Janko <admin@rjwebdesign.net>  
 *   
 **/  
function pagingBlock($options = array())
{
    $html = '';
    
    $pages_total = ceil($options['rows_total'] / $options['offset']);
    $interval    = $options['interval'];
    $actual_page = empty($_GET["s"]) ? 1 : $_GET["s"];
    $url         = $options['url']; //"?url=1&";
    
    
    /** ---------- fix proti URL hacku ---------- */
    if ($actual_page < 0)     
        $actual_page = 1;
    
    if ($actual_page > $pages_total) 
        $actual_page = $pages_total;
 
 
    /** ---------- co budeme ukazovat, interval ---------- */
    $show = array();
    
    for ($i = $actual_page - $interval; $i <= $actual_page + $interval; $i++)
    {
        if ($i > 0 && $i <= $pages_total)
            $show[] = $i;
    }
    

    /** ---------- predchozi ---------- */
    if ($actual_page > 1)
    {

        $html .= "<a href='".$url."s=".($actual_page - 1)."'>předchozí</a> ";
    }


    
    /** ---------- zacatek rady ---------- */
    
    if ($actual_page - $interval == 2)
    {
        $html .= "<a href='".$url."s=1'>1</a> ";
    }
    
    if ($actual_page - $interval > 2)
    {
        $html .= "<a href='".$url."s=1'>1</a> ... ";
    }
    
    
    /** ---------- dynamicky stred ---------- */
    
    for ($i = 1; $i <= $pages_total; $i++)
    {
        if (in_array($i, $show))
        {
            if ($i == $actual_page)
            {
                $html .= " <strong>$i</strong> ";
            }
            else
            {
                $html .= "<a href='".$url."s=$i'>$i</a> ";
            }
        }
    }
    
    /** ---------- konec rady ---------- */
    
    if ($actual_page + $interval + 1 == $pages_total)
    {
        $html .= "  <a href='".$url."s=".$pages_total."'>".$pages_total."</a>";
    }
    
    if ($actual_page + $interval + 1 < $pages_total)
    {
        $html .= " ... <a href='".$url."s=".$pages_total."'>".$pages_total."</a>";
    }


    /** ---------- dalsi ---------- */
    if ($actual_page < $pages_total)
    {

        $html .= " <a href='".$url."s=".($actual_page + 1)."'>další</a>";
    }

    
    
    /** ---------- vystup  ---------- */
    return $html;
}
 
?>

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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