Cms技巧
分享创造价值 合作实现共赢

Cms技巧

当前位置: 首页 > 新闻动态 > Cms技巧

PHPCMS自定义标签无法分页问题解决办法

发布时间:2019-12-16 11:16:47作者:admin点击:

PHPCMS提供了很多标签方便调用数据,但是在二次开发中,有时要自己写PHPCMS标签,但是遇到分页的时候无法显示分页,本人介绍开发PHPCMS标签分页的正确解决方案。

比如PHPCMS的lists标签:

代码如下

{pc:content action=”lists” catid=”2″ where=”thumb!=” AND status=99″ order=”id DESC” num=”4″}

通过自带的lists标签,可以很方便调用某个类别的列表,在模板中调用,显示分页直接用{$pages}即可,在/modules/content/classes/content_tag.class.php中自定义了一个PHPCMS列表标签,但是自定义的列表标签,调用{$pages},分页是出不来的,那么如何进行分页呢?

代码如下 if (isset($page)) {
$str .= '$pagesize = '.$num.';';
$str .= '$page = intval('.$page.') ? intval('.$page.') : 1;if($page<=0){$page=1;}';
$str .= '$offset = ($page - 1) * $pagesize;';
$datas['limit'] = '$offset.",".$pagesize';
$datas['action'] = $action;
$str .= '$'.$op.'_total = $'.$op.'_tag->count('.self::arr_to_html($datas).');';
$str .= '$pages = pages($'.$op.'_total, $page, $pagesize, $urlrule);';
}

我们要了解PHPCMS标签的原理就明白了,在/libs/classes/template_cache.class.php中定义了模板标签解析类,原来lists标签能够分页,调用了pages函数,我们注意第8行,有个_tag->count()的方法,这个方法返回的参数作为pages的第一个参数,也就是总页数,而自定义列表标签,并没有count这个方法。

在/modules/content/classes/content_tag.class.php中,有个count方法,如下:

代码如下
/**
* 分页统计
* @param $data
*/
public function count($data) {
if($data['action'] == 'lists') {
$catid = intval($data['catid']);
if(!$this->set_modelid($catid)) return false;
if(isset($data['where'])) {
$sql = $data['where'];
} else {
if($this->category[$catid]['child']) {
$catids_str = $this->category[$catid]['arrchildid'];
$pos = strpos($catids_str,',')+1;
$catids_str = substr($catids_str, $pos);
$sql = "status=99 AND catid IN ($catids_str)";
} else {
$sql = "status=99 AND catid='$catid'";
}
}
return $this->db->count($sql);
}

TOP

QQ客服

18910140161