Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Klasa stronicowanie
Sekwer
post 21.07.2009, 08:22:04
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 2
Dołączył: 18.01.2009

Ostrzeżenie: (0%)
-----


Witam. Zabawę z klasami zacząłem niedawno i chciałbym, żeby panowie ocenili czy ta poniższa jest cokolwiek warta.

  1. <?php
  2. class pager {
  3.    protected $sep = '&nbsp;';
  4.    protected $fpage = '|&lt;';
  5.    protected $prev = '&lt;';
  6.    protected $next = '&gt;';
  7.    protected $epage = '&gt;|';
  8.  
  9.    public function __construct($id, $url){
  10.        $this -> id = $id;
  11.        $this -> url = $url;
  12.    }
  13.  
  14.    public function rpp($rpp){
  15.        if(!is_numeric($rpp)){
  16.            return false;
  17.        }
  18.        $this -> rpp = $rpp;
  19.    }
  20.  
  21.    public function rpn($rpn){
  22.        if(!is_numeric($rpn)){
  23.            return false;
  24.        }
  25.        $this -> rpn = $rpn;
  26.    }
  27.  
  28.    protected function makeurl($page, $name, $title = ''){
  29.        $url = $this -> url;
  30.        $link = str_replace('#PAGE#', $page, $url);
  31.        if($title == ''){
  32.            $string = '<a href="'.$link.'">'.$name.'</a>';
  33.        } else {
  34.            $string = '<a href="'.$link.'" title="'.$title.'">'.$name.'</a>';
  35.        }
  36.        return $string;
  37.    }
  38.  
  39.    public function nav($records){
  40.        $id = $this -> id;
  41.        $sep = $this -> sep;
  42.        $perpage = $this -> rpp;
  43.        $pernav = $this -> rpn;
  44.  
  45.        $fpage = $this -> fpage;
  46.        $prev = $this -> prev;
  47.        $next = $this -> next;
  48.        $epage = $this -> epage;
  49.  
  50.        $pages = ceil($records/$perpage);
  51.  
  52.        if($_GET[$id] == '' or !is_numeric($_GET[$id]) or $_GET[$id] < 1 or $_GET[$id] > $pages){
  53.            $page = 1;
  54.        } else {
  55.            $page = $_GET[$id];
  56.        }
  57.  
  58.        if($page <= $pernav){
  59.            $start = 1;
  60.            $lratio = $pernav - $page + 1;
  61.        } else {
  62.            if($page > $pages - $pernav){
  63.                $start = $pages - $pernav - $pernav;
  64.            } else {
  65.                $start = $page - $pernav;
  66.            }
  67.        }
  68.  
  69.        if($page > $pages - $pernav){
  70.            $end = $pages;
  71.        } else {
  72.            $end = $page + $pernav + $lratio;
  73.        }
  74.  
  75.        if($page > $pernav + 1){
  76.            $nav .= $this -> makeurl(1, $fpage, 'Pierwsza strona').$sep;
  77.        }
  78.  
  79.        if($page > 1){
  80.            $nav .= $this -> makeurl($page - 1, $prev, 'Poprzednia strona').$sep;
  81.        }
  82.  
  83.        for($l = $start; $l < $page; $l++){
  84.            $nav .= $this -> makeurl($l, $l, 'Strona: '.$l).$sep;
  85.        }
  86.  
  87.        for($r = $page; $r < $end+1; $r++){
  88.            if($r == $page){
  89.                $nav .= '<span>'.$r.'</span>'.$sep;
  90.            } else {
  91.                $nav .= $this -> makeurl($r, $r, 'Strona: '.$r).$sep;
  92.            }
  93.        }
  94.  
  95.        if($page < $pages){
  96.            $nav .= $this -> makeurl($page + 1, $next, 'Następna strona').$sep;
  97.        }
  98.  
  99.        if($page < $pages - $pernav){
  100.            $nav .= $this -> makeurl($pages, $epage, 'Ostatnia strona');
  101.        }
  102.        return $nav;
  103.    }
  104.  
  105.    public function limit(){
  106.        $get = $this -> id;
  107.        if(is_numeric($_GET[$get])){
  108.            $rpp = $this -> rpp;
  109.            $limit = $_GET[$get]*$rpp;
  110.            $this -> limit = $limit;
  111.            return $limit;
  112.        }
  113.    }
  114.  
  115.    public function start(){
  116.        $limit = $this -> limit;
  117.        if(is_numeric($limit)){
  118.            $rpp = $this -> rpp;
  119.            $start = $limit - $rpp;
  120.            return $start;
  121.        }
  122.    }
  123. }
  124.  
  125. // Wywołanie klasy
  126.  
  127. $records = mysql_fetch_array(mysql_query('SELECT COUNT(*) FROM table'));
  128.  
  129. $pager = new pager('page', './pager.php?page=#PAGE#');
  130. $pager -> rpp(25);
  131. $pager -> rpn(5);
  132. $nav = $pager -> nav($records[0]);
  133. $limit = $pager -> limit();
  134. $start = $pager -> start();
  135.  
  136. $sql = mysql_query('SELECT * FROM table LIMIT '.$start.','.($limit - $start + 1));
  137.  
  138. // ...
  139.  
  140. echo $nav;
  141. ?>
Powód edycji: [erix] przeniosłem
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 02:17