ProcessWire的分页处理(非默认)

20190729更新,此文作废,关于ProcessWire的最新手工分页功能请阅读:

ProcessWire框架自带了分页的处理,需要在后台模板配置[URLS]中开启Allow Page Numbers,但是这样得到的分页URL是这样子的

  • https://towait.com/page2
  • https://towait.com/page3

默认的URL已经非常友好了,但是今天遇到个客户要求把URL重写成 page.html,这时候如果使用系统默认的分页处理方式得到的URL是

  • https://towait.com/page1.htmlpage2
  • https://towait.com/page2.htmlpage3

这里就会出问题了:

  1. URL相当不友好
  2. 由于ProcessWire默认的分页处理方式是把分页参数放到urlSegment中处理的,这种URL无法被当成urlSegment处理,所以获取不到分页参数,也就是无效的

所以爬了官方社区,找出了这个相当好的解决方案,最终URL会变成

  • https://towait.com/page1.html?page=2
  • https://towait.com/page2.html?page=3

以下是核心代码:

//自定义CSS样式及按钮文字
$paginationArray = array( 'nextItemLabel' => "下一页", 'previousItemLabel' => "上一页", 'listMarkup' => "<ul class='nav'>{out}</ul>", 'itemMarkup' => "<li class='{class}'>{out}</li>", 'linkMarkup' => "<a href='{url}'><span>{out}</span></a>" );

$limit = 12;
$start = $input->get->page ? ($input->get->page - 1) * $limit : 0;
$pageNum = $input->get->page ? : 1; // page number for pager
$matches = $pages->find("template=product-content, start=$start, limit=$limit, sort=-id");
$pagination = new PageArray();
$pagination->setTotal($matches->getTotal());
$pagination->setLimit($limit);
$pagination->setStart($pageNum);
$pagerHTML = $pagination->renderPager($paginationArray);
$pagerHTML = str_replace("toreplaceprefix", "", $pagerHTML);

$matches为结果记录集,$pagerHTML为分页输出

需要注意的是使用此法分页需要关闭"Allow Page Numbers"

Post Comment