自己写的简易分页类

/** 燕十八 公益PHP培训 

课堂地址:YY频道88354001 

学习社区:www.zixue.it **/

<?php
    class pageLib{
        private $totalNum;//总记录数
        private $pageRow;//每页的记录数
        private $pageNum;//一共有几页
        private $pageNow;//当前页
        private $sideNum=1;//当前页左右两边各显示多少个页码连接
		private $parm=PAGE_PARM;//分页的参数,比如page,依据你自己的定义
		private $limit;//limit语句
        public function __construct($totalNum,$pageRow,$parm=''){
             $this->totalNum=$totalNum;
             $this->pageRow=$pageRow;
			 if($parm!=''){
		         $this->parm=$parm;
             }
             $this->pageNow=isset($_GET[$this->parm])?$_GET[$this->parm]:1;
             $this->pageNum=ceil($totalNum/$this->pageRow); 
			 $startpage=$this->pageNow-1;
			 $this->limit='limit '.$startpage*$this->pageRow.','.$this->pageRow;     
        }
        public function __get($key){
            return $this->$key;
        }
        private function first(){
               if($this->pageNow>($this->sideNum+2)){
            return  "<a href='".$this->url().$this->parm."=1'> [1] ...</a>";
            }
			if($this->pageNow==1){
			return '';
			}
            
            return  "<a href='".$this->url().$this->parm."=1'> [1] </a>";
        }
        
        
        private function last(){
           if(($this->pageNow<$this->pageNum-$this->sideNum-1)){
            return  "<a href='".$this->url().$this->parm."=".$this->pageNum."'> ... [".$this->pageNum."] </a>";
          }
		  	if($this->pageNow==$this->pageNum){
			return '';
			}
             return  "<a href='".$this->url().$this->parm."=".$this->pageNum."'> [".$this->pageNum."] </a>";
        }
        
        private function pagelist(){
            $str='';
           //当前页左边
         
                    if($this->pageNow>(1+$this->sideNum+1)){//
                        for($i=1;$i<=$this->sideNum;$i++){
                            $str.="<a href='".$this->url().$this->parm."=".($this->pageNow-$i)."'> [".($this->pageNow-$i)."] </a>";
                        }     
                    }else{
                            for($i=$this->pageNow-1;$i>1;$i--){
                            $str.="<a href='".$this->url().$this->parm."=".$i."'> [".$i."] </a>";
                            }         
                    }
               
            
             $str.="<a οnclick='return false;' href='".$this->url().$this->parm."=".$this->pageNow."'><span class='page_now'> ".$this->pageNow." </span></a>";//当前页
            //当前右边
           
                    if(($this->pageNow<$this->pageNum-$this->sideNum-1)){
                        for($i=1;$i<=$this->sideNum;$i++){
                            
                            $str.="<a href='".$this->url().$this->parm."=".($this->pageNow+$i)."'> [".($this->pageNow+$i)."] </a>";
                        }
                    }else{

                            for($i=$this->pageNow+1;$i<$this->pageNum;$i++){
                                $str.="<a href='".$this->url().$this->parm."=".$i."'> [".$i."] </a>";
                            }

                    }
                
            
            return $str;
        }
        
        private function prev(){
            if($this->pageNow==1){//当前是第一页
                $prevnum=1;
            }else{
                $prevnum=$this->pageNow-1;//上一页的页码
            }
            $str.="<a href='".$this->url().$this->parm."=".$prevnum."'>".上一页." </a>";
            return $str;
        }
        
        private function next(){
            $str='';
            if($this->pageNow==$this->pageNum){//当前是最后一页
                $nextnum=$this->pageNow;//下一页的页码
            }else{
                $nextnum=$this->pageNow+1;
            }
            $str.="<a class='next' href='".$this->url().$this->parm."=".$nextnum."'>".下一页." </a>";
            return $str;
        }

        //生成url
		private function url(){
                    $p=$this->parm;//分页的参数
		   $url=parse_url($_SERVER['REQUEST_URI']);
		   if(isset($url['query'])){
		        parse_str($url['query'],$a); 
			    unset($a[$p]);
				if(!empty($a)){
                        return $url['path'].'?'.http_build_query($a).'&';
				}
				return $url['path'].'?';

		   }
		   return $url['path'].'?';
		}
        
        
        public function show(){
			$str.=$this->prev();
            $str.=$this->first();
            $str.=$this->pagelist();
            $str.=$this->last();        
            $str.=$this->next();
			$str.= "<span style='margin-right:10px;' class='f_l f6'>总计<strong>".$this->totalNum.'</strong>个产品</span>';
            return $str;
        }
    }
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简易分页器组件实现: ```html <template> <div class="pagination"> <button :disabled="currentPage === 1" @click="changePage(1)">首页</button> <button :disabled="currentPage === 1" @click="changePage(currentPage - 1)">上一页</button> <span v-for="page in pages" :key="page" :class="{ active: currentPage === page }" @click="changePage(page)">{{ page }}</span> <button :disabled="currentPage === totalPage" @click="changePage(currentPage + 1)">下一页</button> <button :disabled="currentPage === totalPage" @click="changePage(totalPage)">末页</button> </div> </template> <script> export default { name: "Pagination", props: { currentPage: { type: Number, required: true }, totalPage: { type: Number, required: true } }, computed: { pages() { let start, end; if (this.totalPage <= 5) { start = 1; end = this.totalPage; } else { if (this.currentPage <= 3) { start = 1; end = 5; } else if (this.currentPage >= this.totalPage - 2) { start = this.totalPage - 4; end = this.totalPage; } else { start = this.currentPage - 2; end = this.currentPage + 2; } } return Array.from({ length: end - start + 1 }, (_, i) => start + i); } }, methods: { changePage(page) { if (page !== this.currentPage) { this.$emit("change", page); } } } }; </script> <style> .pagination { display: flex; justify-content: center; align-items: center; margin: 20px 0; } button, span { margin: 0 5px; padding: 5px 10px; border: none; border-radius: 5px; cursor: pointer; } button[disabled], span.active { background-color: #ccc; cursor: default; } </style> ``` 使用示例: ```vue <template> <div> <div v-for="item in items" :key="item.id">{{ item.name }}</div> <pagination :current-page="currentPage" :total-page="totalPage" @change="handlePageChange" /> </div> </template> <script> import Pagination from "@/components/Pagination.vue"; export default { name: "ItemList", components: { Pagination }, data() { return { items: [], currentPage: 1, totalPage: 1 }; }, mounted() { this.fetchData(); }, methods: { fetchData() { // 发送请求获取数据并更新items、totalPage等数据 }, handlePageChange(page) { this.currentPage = page; this.fetchData(); } } }; </script> ``` 这个分页器组件实现了基本的分页功能,包括首页、上一页、下一页、末页和页码列表。其中,页码列表根据当前页码和总页数动态生成,最多显示5个页码,当前页码高亮显示。组件通过 `props` 接收当前页码和总页数,通过 `$emit` 事件传递页码变化的消息。在使用时,只需要在父组件中监听 `change` 事件,更新当前页码并重新获取数据即可。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值