Stránkování - dynamický střed aneb ustupujicí čísílka

Publikováno v sekci PHP v Pondělí 28.12.2009 - 22:23

Každý potřebuje stránkovat jakýkoliv výstup. Všude na netu jsou kvanta stránkovacích skriptů. Většině začátečníků postačí výpis číselné řady (čísílek), ale co tehdy pokud jich je moc?

Napíšou na diskusní forum, že potřebují aby se měnil střed čísílek, a někdo zkušenější napíše, vždyt je to jen pár podmínek, nic co bys nevymyslel. Ano je to tak, ale někomu to může dělat problémy, a proto jsem napsal velmi jednoduchý skriptík, který je dělá to co může začátečník potřebovat. Udělá odkaz na první a poslední číslo v číselné řadě a upravuje dynamický střed podle vybraného čísla. Ke svému správnému fungovaní potřebuje předat pole 4 parametrů, viz ukázka. Ať slouží.

Na ukázku stránkování se můžete podívat zde

<?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;
}

?>

5 komentářů « Zpět


Komentáře

reagovat #1 Taps:
08.01.10 11:49
Velmi užitečný skriptík, díky
reagovat #2 Lukáš:
14.03.10 14:38
[1] Taps zkouška
reagovat #3 Sergi:
24.05.10 16:56
Diky Romane
29.01.12 14:38
Jenom doplním:

$actual_page = empty($_GET["s"]) ? 1 : intval($_GET["s"]);

Přidat komentář

Nový vzkaz

* Tato pole jsou povinná, [smajlíci]

  • na jiné komentáře odkazujte pomocí odkazu reagovat
  • vaše IP adresa bude zaznamenána
  • používají se gravatary
  • můžeme si tykat
  • HTML tagy vypnuty. PHP kód se také neprovede. Pokud potřebuju přiložit ukázku vašeho kódu, použijete službu pastebin, nebo jej vložte mezi značky [code] [/code]
  • vulgární, rasistické či jinak nepřípustné komentáře budou smazány