最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHPCMS自定义标签无法分页问题解决办法
时间:2022-06-25 16:21:50 编辑:袖梨 来源:一聚教程网
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); } |
看到第6行,当标签动作是lists时,进行一系列操作获取总数,因此我们自定义的列表标签,也应该加一个这样的判断,当$data[‘action’]==’自定义的动作名称’时,计算查询条件的总数。如:
代码如下 | 复制代码 |
|
代码紧接着上面的。
这样,PHPCMS自定义的列表标签也可以使用{$pages}正常显示分页
PHPCMS不修改程序自定义分页格式
请看源代码
代码如下 | 复制代码 |
{if $pages} <select name="select_pages" onchange="location.href=this.options[this.selectedIndex].value;"> {str_replace("a href", "option value", str_replace("..", "", str_replace("", "页", str_replace("", " {/if} |
这里用到了PHP的替换函数str_replace,可以任意的替换默认生成代码,从而实现PHPCMS不修改程序自定义分页格式。
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22