当前位置:首页 > CMS教程 > Thinkphp > 列表

TP5框架实现自定义分页样式的方法示例

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-25 10:40:59 浏览: 评论:0 

本文实例讲述了TP5框架实现自定义分页样式的方法,分享给大家供大家参考,具体如下:

1. 在extend\目录下创建page目录,在page目录下创建Page.php文件,将以下代码放入文件中。

  1. <?php 
  2. namespace page; 
  3. use think\Paginator; 
  4. class Page extends Paginator 
  5.    
  6.   //首页 
  7.   protected function home() { 
  8.     if ($this->currentPage() > 1) { 
  9.       return "<a href='" . $this->url(1) . "' title='首页'>首页</a>"; 
  10.     } else { 
  11.       return "<p>首页</p>"; 
  12.     } 
  13.   } 
  14.    
  15.   //上一页 
  16.   protected function prev() { 
  17.     if ($this->currentPage() > 1) { 
  18.       return "<a href='" . $this->url($this->currentPage - 1) . "' title='上一页'>上一页</a>"; 
  19.     } else { 
  20.       return "<p>上一页</p>"; 
  21.     } 
  22.   } 
  23.    
  24.   //下一页 
  25.   protected function next() { 
  26.     if ($this->hasMore) { 
  27.       return "<a href='" . $this->url($this->currentPage + 1) . "' title='下一页'>下一页</a>"; 
  28.     } else { 
  29.       return"<p>下一页</p>"; 
  30.     } 
  31.   } 
  32.    
  33.   //尾页 
  34.   protected function last() { 
  35.     if ($this->hasMore) { 
  36.       return "<a href='" . $this->url($this->lastPage) . "' title='尾页'>尾页</a>"; 
  37.     } else { 
  38.       return "<p>尾页</p>"; 
  39.     } 
  40.   } 
  41.    
  42.   //统计信息 
  43.   protected function info(){ 
  44.     return "<p class='pageRemark'><b>" . $this->lastPage . 
  45.       "</b><b>" . $this->total . "</b>条数据</p>"; 
  46.   } 
  47.    
  48.   /** 
  49.    * 页码按钮 
  50.    * @return string 
  51.    */ 
  52.   protected function getLinks() 
  53.   { 
  54.    
  55.     $block = [ 
  56.       'first' => null, 
  57.       'slider' => null, 
  58.       'last'  => null 
  59.     ]; 
  60.    
  61.     $side  = 3
  62.     $window = $side * 2; 
  63.    
  64.     if ($this->lastPage < $window + 6) { 
  65.       $block['first'] = $this->getUrlRange(1, $this->lastPage); 
  66.     } elseif ($this->currentPage <= $window) { 
  67.       $block['first'] = $this->getUrlRange(1, $window + 2); 
  68.       $block['last'] = $this->getUrlRange($this->lastPage - 1, $this->lastPage); 
  69.     } elseif ($this->currentPage > ($this->lastPage - $window)) { 
  70.       $block['first'] = $this->getUrlRange(1, 2); 
  71.       $block['last'] = $this->getUrlRange($this->lastPage - ($window + 2), $this->lastPage); 
  72.     } else { 
  73.       $block['first'] = $this->getUrlRange(1, 2); 
  74.       $block['slider'] = $this->getUrlRange($this->currentPage - $side, $this->currentPage + $side); 
  75.       $block['last']  = $this->getUrlRange($this->lastPage - 1, $this->lastPage); 
  76.     } 
  77.    
  78.     $html = ''
  79.    
  80.     if (is_array($block['first'])) { 
  81.       $html .= $this->getUrlLinks($block['first']); 
  82.     } 
  83.    
  84.     if (is_array($block['slider'])) { 
  85.       $html .= $this->getDots(); 
  86.       $html .= $this->getUrlLinks($block['slider']); 
  87.     } 
  88.    
  89.     if (is_array($block['last'])) { 
  90.       $html .= $this->getDots(); 
  91.       $html .= $this->getUrlLinks($block['last']); 
  92.     } 
  93.    
  94.     return $html; 
  95.   } 
  96.    
  97.   /** 
  98.    * 渲染分页html 
  99.    * @return mixed 
  100.    */ 
  101.   public function render() 
  102.   { 
  103.     if ($this->hasPages()) { 
  104.       if ($this->simple) { 
  105.         return sprintf( 
  106.           '%s<div class="pagination">%s %s %s</div>', 
  107.           $this->css(), 
  108.           $this->prev(), 
  109.           $this->getLinks(), 
  110.           $this->next() 
  111.         ); 
  112.       } else { 
  113.         return sprintf( 
  114.           '%s<div class="pagination">%s %s %s %s %s %s</div>', 
  115.           $this->css(), 
  116.           $this->home(), 
  117.           $this->prev(), 
  118.           $this->getLinks(), 
  119.           $this->next(), 
  120.           $this->last(), 
  121.           $this->info() 
  122.         ); 
  123.       } 
  124.     } 
  125.   } 
  126.    
  127.   /** 
  128.    * 生成一个可点击的按钮 
  129.    * 
  130.    * @param string $url 
  131.    * @param int  $page 
  132.    * @return string 
  133.    */ 
  134.   protected function getAvailablePageWrapper($url, $page) 
  135.   { 
  136.     return '<a href="' . htmlentities($url) . '" rel="external nofollow" title="第"'. $page .'"页" >' . $page . '</a>'; 
  137.   } 
  138.    
  139.   /** 
  140.    * 生成一个禁用的按钮 
  141.    * 
  142.    * @param string $text 
  143.    * @return string 
  144.    */ 
  145.   protected function getDisabledTextWrapper($text) 
  146.   { 
  147.     return '<p class="pageEllipsis">' . $text . '</p>'; 
  148.   } 
  149.    
  150.   /** 
  151.    * 生成一个激活的按钮 
  152.    * 
  153.    * @param string $text 
  154.    * @return string 
  155.    */ 
  156.   protected function getActivePageWrapper($text) 
  157.   { 
  158.     return '<a href="" class=" rel="external nofollow" cur">' . $text . '</a>'; 
  159.   } 
  160.    
  161.   /** 
  162.    * 生成省略号按钮 
  163.    * 
  164.    * @return string 
  165.    */ 
  166.   protected function getDots() 
  167.   { 
  168.     return $this->getDisabledTextWrapper('...'); 
  169.   } 
  170.    
  171.   /** 
  172.    * 批量生成页码按钮. 
  173.    * 
  174.    * @param array $urls 
  175.    * @return string 
  176.    */ 
  177.   protected function getUrlLinks(array $urls) 
  178.   { 
  179.     $html = ''
  180.    
  181.     foreach ($urls as $page => $url) { 
  182.       $html .= $this->getPageLinkWrapper($url, $page); 
  183.     } 
  184.    
  185.     return $html; 
  186.   } 
  187.    
  188.   /** 
  189.    * 生成普通页码按钮 
  190.    * 
  191.    * @param string $url 
  192.    * @param int  $page 
  193.    * @return string 
  194.    */ 
  195.   protected function getPageLinkWrapper($url, $page) 
  196.   { 
  197.     if ($page == $this->currentPage()) { 
  198.       return $this->getActivePageWrapper($page); 
  199.     } 
  200.    
  201.     return $this->getAvailablePageWrapper($url, $page); 
  202.   } 
  203.    
  204.   /** 
  205.    * 分页样式 
  206.    */ 
  207.   protected function css(){ 
  208.     return ' <style type="text/css"> 
  209.       .pagination p{ 
  210.         margin:0; 
  211.         cursor:pointer 
  212.       } 
  213.       .pagination{ 
  214.         height:40px; 
  215.         padding:20px 0px; 
  216.       } 
  217.       .pagination a{ 
  218.         display:block; 
  219.         float:left; 
  220.         margin-right:10px; 
  221.         padding:2px 12px; 
  222.         height:24px; 
  223.         border:1px #cccccc solid; 
  224.         background:#fff; 
  225.         text-decoration:none; 
  226.         color:#808080; 
  227.         font-size:12px; 
  228.         line-height:24px; 
  229.       } 
  230.       .pagination a:hover{ 
  231.         color:#077ee3; 
  232.         background: white; 
  233.         border:1px #077ee3 solid; 
  234.       } 
  235.       .pagination a.cur{ 
  236.         border:none; 
  237.         background:#077ee3; 
  238.         color:#fff; 
  239.       } 
  240.       .pagination p{ 
  241.         float:left; 
  242.         padding:2px 12px; 
  243.         font-size:12px; 
  244.         height:24px; 
  245.         line-height:24px; 
  246.         color:#bbb; 
  247.         border:1px #ccc solid; 
  248.         background:#fcfcfc; 
  249.         margin-right:8px; 
  250.       } 
  251.       .pagination p.pageRemark{ 
  252.         border-style:none; 
  253.         background:none; 
  254.         margin-right:0px; 
  255.         padding:4px 0px; 
  256.         color:#666; 
  257.       } 
  258.       .pagination p.pageRemark b{ 
  259.         color:red; 
  260.       } 
  261.       .pagination p.pageEllipsis{ 
  262.         border-style:none; 
  263.         background:none; 
  264.         padding:4px 0px; 
  265.         color:#808080; 
  266.       } 
  267.       .dates li {font-size: 14px;margin:20px 0} 
  268.       .dates li span{float:right} 
  269.     </style>'; 
  270.   } 

2. 修改  application\config.php  中的配置文件即可

  1. //分页配置  
  2.   'paginate'        => [  
  3.     'type'   => 'page\Page',//分页类  
  4.     'var_page' => 'page',  
  5.     'list_rows' => 15,  
  6.   ], 

3. 分页样式为

Tags: TP5自定义分页样式

分享到: