ProcessWire的分页处理(非默认)
20190729更新,此文作废,关于ProcessWire的最新手工分页功能请阅读:ProcessWire的完全自定义分页
ProcessWire框架自带了分页的处理,需要在后台模板配置[URLS]中开启Allow Page Numbers,但是这样得到的分页URL是这样子的
- https://towait.com/
page2
- https://towait.com/
page3
默认的URL已经非常友好了,但是今天遇到个客户要求把URL重写成 page.html,这时候如果使用系统默认的分页处理方式得到的URL是
- https://towait.com/page1.html
page2
- https://towait.com/page2.html
page3
这里就会出问题了:
- URL相当不友好
- 由于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"