欢迎来到元素模板ys720.com,本站提供专业的织梦模板PBOOTCMS模板网站模板网站修改/网站仿站
当前位置:主页 > 程序教程 > DEDECMS教程 >
DEDECMS教程

织梦dedecms的dede:list和dede:arclist分页问题(包括列表序号)

(元素模板) / 2018-04-15 18:29

客户要求页面显示文章列表,这个dede:list就能胜任,但调试过程中发现,dede:list的序号,在分页的时候,第二页序号不是依序第一页递增,而是重新开始计数的,感到很奇怪。搜索了半天,很少有人提到这个问题,提到的,也没有很好的解决方法,后来终于找到一位,按照他的思路,实现了dede:list的序号在各分页中,正常递增。


解决过程:

1、首先是显示分页导航和序号显示,这个简单;

分页导航:

{dede:pagelist listitem="index,end,pre,next,pageno" listsize="4"/}

序号显示:

在{dede:list ...}和{/dede:list}之间,使用[field:global name=autoindex /],生成页面后,这段代码就是一个自然序号。

但问题来了,因为是分页显示,点击第二页的时候,出来的列表序号,仍然从1开始,假设第一页是1,2,3……10,第二页应该是11,12,13……,但是情况不是这样。

一位网友的解决办法是修改/include/acr.listview.class.php这个文件里的一个变量(链接:http://bbs.dedecms.com/simple/?t275848.html),他自己创建了一个代替autoindex的变量,我读了一下代码,发现dede的程序员,在生成autoindex的时候,确实没有考虑页码和每页数量的关系,仅仅是局部循环,每次都从0开始,结果当然是之前看到的那样。

找到病灶,解决就容易了。

2、仿效那位网友的做法,新建了一个变量,没有动他的autoindex,怕影响其他页面的调用。

差不多在827行(我的dede版本是5.7SP1),新增$GLOBALS['cindex'] = 0;

然后在紧接着的for循环里,在$GLOBALS['autoindex']++;的后面,增加一行$GLOBALS['cindex'] = ($this->PageNo-1)*$this->PageSize + $i + 1;

/include/acr.listview.class.php这个文件的修改就这些。

3、回到模板页(list_...htm),把之前用的[field:global name=autoindex /]修改为[field:global name=cindex /],保存,上传修改的两个文件,重新生成页面,搞定!

客户还有一个需求,文章模板页,要显示文章列表,并且这个列表需要分页……

 

继续在网上搜索解决办法。

 

大家一般在文章模板页是用dede:arclist这个标签来显示列表的,基本的代码比较简单,由两部分组成:

 

1、javascript

在文章模板页这个文件的

里,添加如下代码:

 

 

2、dede代码

在指定的显示列表的位置,添加如下代码:

{dede:arclist row='100' tagid='index' pagesize='10' titlelen='120'}

  • [field:global name=cindex /]. [field:title/]

{/dede:arclist}

随着这个列表的分页导航代码是:{dede:arcpagelist tagid='index'/}


需要说明的是,这里的row的值要填大一些,我一开始没填,结果列表的数量就是pagesize的数量。


保存文件,上传并重新生成,发现列表正常显示,分页导航也正常显示了,但是列表序号和之前遇到的问题一样,每一页都从1开始。

 

带着之前的经验,开始寻找和这个显示有关的class文件,花了点时间,定位到是在/include/taglib/arclist.lib.php,照葫芦画瓢,重新定义了一个$GLOBALS['cindex']变量,然后去文章模板页引用……但是发现不好使!只好虚心地研究了一下这个页面里的代码,发现找不到一个关键的PageNo变量,PageSize有,就是$line,但少一个就不行啦。折腾了半天,又突然发现,在切换页码的时候,列表的序号是会变的,再仔细研究,发现序号还和一个文件有关,就是/plus/arcmulti.php,也就是说,dede:arclist这个标签,如果你添加了序号代码,它是有两次的生成过程,第一次是页面生成的时候,这时候的序号是通过/include/taglib/arclist.lib.php决定的,当用户点击分页导航页码浏览其它页面时,因为使用的是ajax,此时的序号是由/plus/arcmulti.php生成的。

 

跑到/plus/arcmulti.php去,很快发现,这个页面里有一个现成的$strnum可以用,于是照着之前的做法,加了$GLOBALS['cindex'] = 0和$GLOBALS['cindex'] = $strnum + $i + 1;点击分页导航时,列表的序号显示正常了!

 

那第一次显示的列表序号怎么办呢,后来一想,那就简单处理了,仍然在/include/taglib/arclist.lib.php创建$GLOBALS['cindex'](为的是一致),然后让它和autoindex一样,在for循环里++就行了,也就是说只需要考虑他第一页的自然序号显示就行。

 

解决了两个问题,草草记下。一个是给自己备忘,再一个,兴许你也在苦苦寻找……祝顺利!

Copyright @ 2013-2021 元素模板 www.ys720.com All Rights Reserved. 版权所有 元素模板 www.ys720.com