PHP封装的分页导航处理类

        开发WEB程序,最常见的页面之一就是列表页,而列表页中一定会有分页导航的功能,我们当然可以在页面中直接插入PHP代码,运算相关的信息,例如页数,总记录数,总页数,根据当前页的不同,可能显示的内容及样式都有所不同,这样做是达到目的了,可是带来的极大弊端有三点:1、代码的可读性大大降低;2、页面夹杂着这一大段运算分页逻辑的代码,以后代码维护的难度大大提高了;3、当多个列表页面用到这一分页导航时,无共用性。ps一句:本人写代码有两点原则:1、绝不做重复劳动,逻辑一样的功能块一定要单独隔离出来;2、做一件事最多只能第一次痛苦一下,再做这件事时一定不会再痛苦(因为在这期间我肯定要想出个办法解决让我痛苦的问题)。为此,我写了如下的分页导航处理类(PHP5):

/* 分页样式类的父类 */
class SplitStyle
{
 public $Page;         // 当前页数
 public $RecsPerPage;  // 每页记录数
 public $CountOfRows;  // 总记录数
 public $CountOfPages; // 总页数
 public $QueryUrl;     // 带查询字符串的URL
 
 /* 构造函数 */
 function __construct($page, $recsPerPage, $countOfRows, $countOfPages, $queryUrl)
 {
  $this->Page         = $page;
  $this->RecsPerPage  = $recsPerPage;
  $this->CountOfRows  = $countOfRows;
  $this->CountOfPages = $countOfPages;
  $this->QueryUrl     = $queryUrl;
 }
 
 /* 运算相关分页信息 */
 protected function OperateInfo()
 {
  /* 当前页数排错 */
  if ($this->Page < 1)
   $this->Page = 1;
  if ($this->Page > $this->CountOfPages)
   $this->Page = $this->CountOfPages;
 }
 
 /** 
 * 获取分页链接
 * @index(int) 页数索引
 * 返回分页链接URL(string)
 */
 protected function GetHerf($index)
 {
  return $this->QueryUrl . "page=" . $index;
 }
}
/* 常用分页样式类 */
class SplitStyleCommon extends SplitStyle
{
 /* 输出分页HTML结果 */
 public function OutputResult()
 {
  $this->OperateInfo(); // 运算相关分页信息
  $result = ""; // 要输出的结果
  
  /* 起始数字 */
  $start = floor($this->Page / 10) * 10;
  if ($start == 0)
   $start = 1;
  
  /* 结尾数字 */
  if ($this->Page % 10 == 0)
   $end = (ceil($this->Page / 10) + 1) * 10;
  else
   $end = ceil($this->Page / 10) * 10;
  
  /* 结尾数字不能大于总页数 */
  if ($end > $this->CountOfPages)
   $end = $this->CountOfPages;
  
  for ($i = $start; $i <= $end; $i++)
  {
   if ($i == $this->Page)
    $result .= '<span>' . $i . '</span> ';
   else
    $result .= '<a href="' . $this->GetHerf($i) . '">' . $i . '</a> ';
  }
  
  echo $result;
 }
}

说明:第一个类准备了最常见的分页信息,第二个类为扩展类,里面的OutputResult成员方法(这里省略了诸如每页记录数,总记录数,总页数的信息,这里强调的是分页逻辑)实现了一种很常见的数字分页(首次显示1到10页,点第10页则显示10到20页,以此类推),当分页逻辑或HTML结构不同时,很显然还可以再增加一个子类(假设它实现的是像Google那样的分页形式)。这样,我们在列表页中就只需调用该类就可以了,而具体的逻辑就由类去内部实现了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值