00001 <?php
00010 class tpPager extends Plugin
00011 {
00015 function tpPager() {
00016 $this->Plugin();
00017 $this->depend('html');
00018 }
00019
00020 function generate($url, $perpage, $curpage, $total, $var_prefix='p_')
00021 {
00022 $numpages = ceil($total / $perpage);
00023 if($numpages <= 1) return '';
00024
00025 $out = '<ul class="pagination">';
00026 $cp = $curpage;
00027 $pp = $perpage;
00028
00029 $page = $this->_pagelink($cp, $cp, $pp, $url, $var_prefix);
00030
00031 if($cp > 1) {
00032 $page = $this->_pagelink($cp-1, $cp, $pp, $url, $var_prefix).$page;
00033 $left = $cp - 2;
00034 if($left > 0) {
00035 if($left > 2) $page = '<li class="ellipsis"><span>...</span></li> '.$page;
00036 if($left > 1) $page = $this->_pagelink(2, $cp, $pp, $url, $var_prefix).$page;
00037 $page = $this->_pagelink(1, $cp, $pp, $url, $var_prefix).$page;
00038 }
00039 }
00040
00041 if($cp < $numpages) {
00042 $page = $page.$this->_pagelink($cp+1, $cp, $pp, $url, $var_prefix);
00043 $left = $numpages - $cp - 1;
00044 if($left > 0) {
00045 if($left > 2) $page = $page.'<li class="ellipsis"><span>...</span></li> ';
00046 if($left > 1) $page = $page.$this->_pagelink($numpages-1, $cp, $pp, $url, $var_prefix);
00047 $page = $page.$this->_pagelink($numpages, $cp, $pp, $url, $var_prefix);
00048 }
00049 }
00050 $out .= rtrim($page);
00051
00052 $out .= '</ul>';
00053 return $out;
00054 }
00055
00056 function _pagelink($pagenum, $curpage, $perpage, $url, $prefix)
00057 {
00058 if($pagenum == $curpage) {
00059 $out = "<li class=\"current\"><span>$pagenum</span></li> ";
00060 } else {
00061
00062 $GET = array_merge($_GET, array($prefix.'p'=>$pagenum, $prefix.'pp'=>$perpage));
00063 $qs = array();
00064 foreach($GET as $k=>$v) {
00065 $qs[] = "$k=$v";
00066 }
00067 $qs = implode('&', $qs);
00068 $out = '<li><span>'.$this->depends->html->link($pagenum, url($url.'?'.$qs)).'</span></li> ';
00069 }
00070 return $out;
00071 }
00072
00073 function _attribs($attribs)
00074 {
00075 $ret = '';
00076 foreach($attribs as $k=>$v) {
00077 $ret .= " $k=\"$v\"";
00078 }
00079 return $ret;
00080 }
00081
00082 }
00083
00084 ?>