Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Paginátor (stránkování výsledků) v PHP

Paginátor je script napsaný v PHP pro vygenerování odkazů pro výpis většího množství položek na jednotlivé stránky.

Tento script byl napsán pro soutěž na ITnetwork a získal jako jeden ze dvou placku "Machr na PHP", za toto ocenění velmi děkuji :)

Nechť je vám script k užitku.

Třída 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é spuštění je celkem jednoduché:

Parametry:

  1. Celkový počet záznamů
  2. Počet výpisů na stránku
  3. Počáteční výpis (číslo vycházející z rozsahu celkový počet/ počet výpisů na stránku)
  4. Jméno identifikátoru DIV
  5. Jméno proměnné v URL adrese "GET"
  6. Styl začátku a konce výpisu, 0 = čísla, 1 = šipky

Povinný je jen první parametr, další budou v případě jejich nepoužití nastavené z přednastavených hodnot.

require "paginator_class.php";

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

Těším se na reakce.


Galerie

Program byl vytvořen v roce 2013.

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 327x (2.34 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

Všechny články v sekci
Zdrojákoviště - Knihovny v PHP
Program pro vás napsal David Hynek
Avatar
Uživatelské hodnocení:
2 hlasů
já jsem redaktor?
Aktivity