Habe hier eine nicht ganz ausgereifte, aber gut funktionierende, Pagenation Class.
Alles anzeigen
Wer etwas Ahnung mit PHP hat, wird keine Probleme haben sie für die eigenen Anforderungen entsprechend zu erweitern.
PHP-Quellcode
- <?php
- /**
- * Pagenation class.
- * PDO CONNECTION IN STATIC CLASS "DB" IS REQUIRED!
- * $pagenation = new Pagenation($limiter, $start);
- * $pagenation->doCommand($query, $array=false);
- * foreach($pagenation->result as $row) { // ACTION }
- * $pagenation->printPageBar($html_start, $html_end, $url);
- */
- class Pagenation {
- /**
- * @desc Number of results per page
- * @var int
- * @access private
- */
- private $limiter;
- /**
- * @desc Limit-Start in query (Necessary)
- * @var int
- * @access private
- */
- private $start;
- /**
- * @desc sql query that gets paged
- * @var string
- * @access private
- */
- private $query;
- /**
- * @desc clone of $query
- * @var string
- * @access private
- */
- private $query_unused;
- /**
- * @desc combiner array
- * @var array
- * @access private
- */
- private $array;
- /**
- * @desc returned assoc, result of query
- * @var assoc
- * @access public
- */
- public $result;
- /**
- * const
- * @desc if bad parameter this message is died!
- */
- const PAGENATION_BAD_PARAMETER = 'Nur Zahlen!';
- /**
- * @param int $limiter
- * @param int $page
- */
- public function __construct($limiter, $page) {
- $this->limiter = $limiter;
- $this->page = (empty($page))? 0 : htmlspecialchars($page);
- $this->page = (preg_match("/^[0-9]+$/", $this->page)) ? $this->page : die(self::PAGENATION_BAD_PARAMETER);
- $this->start = $page * $this->limiter - $this->limiter;
- }
- /**
- * @desc returns results of query ( paged )
- * @param string $query
- * @param array $array
- * @return assoc
- */
- public function doCommand($query, $array=false) {
- $this->array = (isset($array))? $array : false;
- $this->query_unused = $query;
- $this->query = $query . " LIMIT {$this->start}, {$this->limiter}";
- $stmt = DB::getInstance()->prepare($this->query);
- if($array == false)
- $stmt->execute();
- else
- $stmt->execute($array);
- return $this->result = $stmt->fetchAll();
- }
- /**
- * @desc displays page bar. Page bar can be customised here!
- * @param string $html_start
- * @param string $html_end
- * @param string $url
- */
- public function printPageBar($html_start, $html_end, $url) {
- $stmt = DB::getInstance()->prepare($this->query_unused);
- if(!$this->array)
- $stmt->execute();
- else
- $stmt->execute($this->array);
- $rows = $stmt->rowCount();
- $pages = $rows / $this->limiter; //ROWS DIVIDED BY ENTRY LIMIT
- echo $html_start;
- for($a=0 ; $a < $pages ; $a++) {
- $b = $a + 1;
- if($b == $this->page)
- echo ' <b>' . $b . '</b> ';
- else
- echo ' <a href="' . $url . $b . '">' . $b . '</a> ';
- }
- echo $html_end;
- }
- }
- ?>
Wer etwas Ahnung mit PHP hat, wird keine Probleme haben sie für die eigenen Anforderungen entsprechend zu erweitern.