phpcms无法生成全部静态列表页

摘要

phpcms无法生成全部静态列表页,需要检查列表页之前的代码中是否有使用PC标签的list模块,而且标签中加入了page参数,导致后续列表page参数还是采用之前的值(当后一个列表总条数小于前一个列表时),就会出现无法生成所有列表页。同理,一个模板页面中使用多个PC标签时,只能使用一次page参数。

问题描述

  • PHPCMS程序版本:Phpcms V9.6.3 Release 20170515

我举一个例子描述该情况,比如一个新闻列表,里边有60条数据,按照每页10条应该生成6个页面,但却只生成2个列表页。这种情况是由于在新闻列表之前的菜单中也采用了列表数据模式,比如有一个产品下拉列表,里边有10条数据,按照每页5条是生成2个下拉列表,但菜单中是没有翻页,只是在PC标签中加入page参数,而列表中未采用pages页面,导致生成的PAGES常量被定义,后边新闻列表还采用PAGES为2的常量,因此只生成2个列表页。

菜单中产品下拉列表代码如下:

{pc:content action="lists" catid="27" num="5" order="id DESC" page="$page"}{loop $data $r}
<a title="{$r[title]}" href="{$r[url]}">{str_cut($r[title],30)}</a>
{/loop}{/pc}

新闻列表代码如下:

{pc:content action="lists" catid="30" num="10" order="id DESC" page="$page"}{loop $data $r}
<a title="{$r[title]}" href="{$r[url]}">{str_cut($r[title],30)}</a>
{/loop}
<div id="pages" class="text-c">{$pages}</div>
{/pc}

原因分析

通过分析代码发现,正是由于菜单中产品下拉列表代码书写不规范,未使用分页,却加入分页参数(红色部分),导致后边新闻列表分页参数使用之前的,进而导致程序出错。

解决方案及总结

  1. 去掉分页参数(红色部分),问题顺利解决。这种情况再次警告我们书写代码一定要规范。
  2. 一个页面模板文件中如果有多个PC标签列表时,只能使用一次page参数,否则将导致第二个列表生成多页面时出错。

知识扩展

分页参数总页数常量定义代码(列表页生成多个页面时使用):

/**
 * 分页函数
 *
 * @param $num 信息总数
 * @param $curr_page 当前分页
 * @param $perpage 每页显示数
 * @param $urlrule URL规则
 * @param $array 需要传递的数组,用于增加额外的方法
 * @return 分页
 */function pages($num, $curr_page, $perpage = 20, $urlrule = '', $array = array(),$setpages = 10) {
    ……
    $pages = ceil($num / $perpage);
    if (defined('IN_ADMIN') && !defined('PAGES')) define('PAGES', $pages);

转载请注明:半亩方塘 » phpcms无法生成全部静态列表页