IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Paginátor (stránkovanie výsledkov) v PHP

Paginátor je script napísaný v PHP pre vygenerovanie odkazov pre výpis väčšieho množstva položiek na jednotlivé stránky.

Tento script bol napísaný pre súťaž na ITnetwork a získal ako jeden z dvoch placku "Machr na PHP", za toto ocenenie veľmi ďakujem :)

Nech je vám script na úžitok.

Trieda scriptu:

<?php

class Paginator
{
  private $celkem;
  private $pocet;
  private $pozice;
  private $adresa;
  private $trida;
  private $roztec = 4; //vzdalenost od aktualni pozice -1 :o)
  private $zacatek;
  private $konec;

  /*
    první parametr  = celkový počet záznamů
    druhý parametr  = počet záznamů pro výpis
    třeti parametr  = startovací stránka
    čtvrtý parametr = ID divu výpisu pro stylování v CSS
    patý parametr   = nazev odkazu pro GET
    šestý parametr  = styl zobrazení začátku a konce (0 = šipky, 1 = čísla)
  */

  function __construct($c = 0, $p = 10, $z = 1, $t = 'paginator',$g = 'poz',$s = 0)
  {
    $this->celkem = $c;
    $this->adresa = $_SERVER['PHP_SELF'];
    $this->znak = "?";
    $this->pocet = $p;
    $this->trida = $t;
    $this->g = $g;
    $this->rozsah = ceil($this->celkem / $this->pocet);
    $this->pozice = ((isset($_GET[$this->g]) and $_GET[$this->g]*1>0)?$_GET[$this->g]:(($z>$this->rozsah)?$this->rozsah:$z)); // zjisteni pozice z URL
    $this->zacatek = ($s == 0)?"&lt;&lt;":1;
    $this->konec = ($s == 0)?"&gt;&gt;":$this->rozsah;
  }

  function __toString()
  {
    return "<div id='".$this->trida."'>\n".$this->adresa()."</div>\n";
  }

  function odkaz($a,$n,$p)
  {
    return "\t".(($n == $p)?"<strong>$a</strong>":"<a href='{$this->adresa}{$this->znak}{$this->g}=$n'>$a</a>")."\n";
  }

  public function adresa()
  {
    if($this->celkem == 0) return "\tNejsou zde žádné výpisy.\n";
    if($this->celkem <= $this->pocet) return "\tZobrazeno všech {$this->celkem} výpisů.\n";
    else
    {
      $v = "";
      $s = "";
      $p = $this->pozice;
      if($this->rozsah > ($this->roztec * 2))
      {
        $s .= $this->odkaz($this->zacatek,1,$p);
        if(($p-1000)>0) $s.= $this->odkaz("-1000",$p-1000,$p);
        if(($p-100)>0) $s.= $this->odkaz("-100",$p-100,$p);
        if(($p-10)>0) $s.= $this->odkaz("-10",$p-10,$p);
        if($p-1>$this->roztec) $s .= "\t<span>...</span>\n";
        for($a=1;$a<(2*$this->roztec);$a++)
        {
          $n = ($a+$p-((($p-1)<$this->roztec)?$p-1:($p<($this->rozsah-$this->roztec)?$this->roztec:$p-$this->rozsah+(2*$this->roztec))));
          $s .= $this->odkaz($n,$n,$p);
        }
        if($p<($this->rozsah-$this->roztec)) $s.= "\t<span>...</span>\n";
        if(($p+10)<$this->rozsah) $s.= $this->odkaz("+10",$p+10,$p);
        if(($p+100)<$this->rozsah) $s.= $this->odkaz("+100",$p+100,$p);
        if(($p+1000)<$this->rozsah) $s.= $this->odkaz("+1000",$p+1000,$p);
        $s .= $this->odkaz($this->konec,$this->rozsah,$p);
      }
      else
        for($a=1;$a<=$this->rozsah;$a++) $s.= $this->odkaz($a,$a,$p);
      return $s;
    }
  }
}
?>

A samotné spustenie je celkom jednoduché:

parametre:

  1. Celkový počet záznamov
  2. Počet výpisov na stránku
  3. Počiatočné výpis (číslo vychádzajúce z rozsahu celkový počet / počet výpisov na stránku)
  4. Meno identifikátora DIV
  5. Meno premennej v URL adrese "GET"
  6. Štýl začiatku a konca výpisu, 0 = čísla, 1 = šípky

Povinný je len prvý parameter, ďalšie budú v prípade ich nepoužitia nastavenej z prednastavených hodnôt.

require "paginator_class.php";

$vypis = new Paginator(1000,20,1,'vypis3','poz3'); //
echo $vypis;

Teším sa na reakcie.


Galéria


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 327x (2.34 kB)
Aplikácia je vrátane zdrojových kódov v jazyku php

 

Všetky články v sekcii
Knižnice pre PHP
Preskočiť článok
(neodporúčame)
Knižnica DateUtils pre český dátum a čas v PHP
Program pre vás napísal David Hynek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
já jsem redaktor?
Aktivity