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

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

Publikováno v sekci PHP v 28. 12. 2009 - 22:23

aktualizováno

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 
/**
 * 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>  
 *   
 **/  

$options = array(
                    'rows_total' => 100,
                    'offset'     => 7,
                    'interval'   => 4,
                    'url'        => '?url=1&',
                );
echo pagingBlock($options);



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

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

?>

Kategorie

  • Osobní názory - 1x
  • PHP - 9x
  • MYSQL - 4x
  • CSS - 7x
  • jQuery - 3x
  • Sociální síť - 1x
  • Nette - 5x
  • Tipy & triky - 3x
  • Twitter Bootstrap - 1x
  • Týdenní tipy a novinky - 4x
  • SCSS - 1x
  • GIT - 1x
  • Gulp - 1x

  • Komentáře (6x)

    #1 reagovat Taps:
    Velmi užitečný skriptík, díky
    #2 reagovat Lukáš:
    [1] Taps zkouška
    #3 reagovat Sergi:
    Diky Romane
    Jenom doplním:

    $actual_page = empty($_GET["s"]) ? 1 : intval($_GET["s"]);
    Zdravím, pěkný script, jsem v tomhle začátečník a konečně něco, co funguje. Ale chci se zeptat, jestli by jsi mi neporadil, jak udělat, aby se mi stránkoval výpis z databáze s tvým scriptem ( v databázi mám více článků, které chci nastránkovat )?

    Vložit nový komentář


    • 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
    • vulgární, rasistické či jinak nepřípustné komentáře budou smazány