通常情况以下代码就可以实现详情页的上一页下一页效果,仅限于数量不多的情况,默认是按日期排列。
注意我们如何使用当前页面的发布日期来获取其前后相邻页面。
当然,您可以使用“pages”标签的所有其他可用参数,例如,要显示与当前页面位于同一文件夹中的下一页,请添加“folder”参数。
<ul class="uk-pagination"> <cms:pages start_on=k_page_date order='asc' limit='1' offset='1'> <li><a href="<cms:show k_page_link />"><span class="uk-margin-small-right" uk-pagination-previous></span> <cms:show k_page_title /></a></li> </cms:pages> <cms:pages stop_before=k_page_date limit='1'> <li class="uk-margin-auto-left"><a href="<cms:show k_page_link />"><cms:show k_page_title /> <span class="uk-margin-small-left" uk-pagination-next></span></a></li> </cms:pages> </ul>
我的问题是:有没有简单的方法可以循环显示所有帖子,并且:
— 到达最后一篇帖子时显示第一篇帖子
— 到达第一篇帖子时显示最后一篇帖子
这样,用户在查看第一篇和最后一篇帖子时就不会出现空白了。
-----
当 cms:pages 没有返回任何结果时,就会出现空白。这种情况可以通过在 cms:pages 中放置 <cms:no_results> 标签对来处理。请在 no_results 中放置相应的代码,用于获取最后一条帖子。
<cms:pages stop_before=k_page_date limit='1'> <h5><cms:date k_page_date format='d.m.Y' /></h5> <h4><cms:show en_titulo /></h4> <cms:no_results> // HERE WE SHOW MOST LATEST (LAST) POST </cms:no_results> </cms:pages> <cms:pages start_on=k_page_date order='asc' limit='1' offset='1'> <h5><cms:date k_page_date format='d.m.Y' /></h5> <h4><cms:show en_titulo /></h4> <cms:no_results> // HERE WE SHOW MOST EARLIEST (FIRST) POST </cms:no_results> </cms:pages>
如果页面数量较多,循环遍历所有页面来查找下一页和上一页可能会影响性能。为了避免这种情况,我们在此解决方案中使用了 PHP。
<cms:if k_is_page > <cms:php> global $CTX; $page_ids = explode( ",", "<cms:pages folder=k_page_foldername include_subfolders='0' ids_only='1' />" ); $cur_page_id = "<cms:show k_page_id />"; $pos = array_search( $cur_page_id, $page_ids ); if( $pos!==FALSE ){ if( $pos>0 ){ // Prev page id $prev_page_id = $page_ids[$pos-1]; $CTX->set( 'prev_page_id', $prev_page_id, 'global' ); } if( $pos<count($page_ids)-1 ){ // Next page id $next_page_id = $page_ids[$pos+1]; $CTX->set( 'next_page_id', $next_page_id, 'global' ); } } </cms:php> <cms:if k_current_page > <h4>Showing page <cms:show k_current_page /> of <cms:show k_total_pages /> pages <cms:if k_page_foldername>in folder <cms:show k_page_foldername /></cms:if></h4> </cms:if> <!-- show links to next and prev images --> <cms:if prev_page_id > <cms:pages id=prev_page_id skip_custom_fields='1'> <a href="<cms:show k_page_link />"><cms:show k_page_title /></a> </cms:pages> </cms:if> <cms:if next_page_id > <cms:pages id=next_page_id skip_custom_fields='1'> <a href="<cms:show k_page_link />"><cms:show k_page_title /></a> </cms:pages> </cms:if> </cms:if>
如果我们在列表后台做了自定义排序,即 orderby='weight', 这种情况需要做一些改动:
$page_ids = explode( ",", "<cms:pages orderby='weight' order='asc' ids_only='1' />" );