通常情况以下代码就可以实现详情页的上一页下一页效果,仅限于数量不多的情况,默认是按日期排列。
注意我们如何使用当前页面的发布日期来获取其前后相邻页面。
当然,您可以使用“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' />" );