Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Klasa stronicowanie
Sekwer
post
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
 
Start new topic
Odpowiedzi
Sekwer
post
Post #2





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

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


Chciałem napisać stronicowanie wyłącznie do mysql. Pilsener kod, który podałeś jest chyba ze skryptu stronicowania Dariusza Majgiera (głowy nie dam).

Ten post edytował Sekwer 23.07.2009, 19:23:11
Go to the top of the page
+Quote Post
Speedy
post
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


Cytat(Sekwer @ 23.07.2009, 20:22:50 ) *
Chciałem napisać stronicowanie wyłącznie do mysql. Pilsener kod, który podałeś jest chyba ze skryptu stronicowania Dariusza Majgiera (głowy nie dam).


Bez sensu. Kogo obchodzi, jakie dane stronicujesz? Źródło danych nie powinno mieć w takim przypadku znaczenia. Nie ważne, czy dane pochodzą z pliku *.txt, zserializowanej tablicy, bazy mysql, pgsql, oracle, firebird, pliku *.xml, czy diabli wiedzą czego jeszcze, to klasa, czy funkcja ma działać. Jeśli tak nie jest, to pojawił się błąd projektowy. Radzę zapoznać się z oklepanym wzorcem MVC, a w szczególności z warstwą modelu.

Ten post edytował Speedy 24.07.2009, 00:16:57
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 11.10.2025 - 21:18