织梦dedecms列表{dede:list}标签显示文章,一般默认是后加的文章展示在前面,但是我们经常碰到客户需要自己在管理后台可以对文章手动进行排序,这是我们就要用到织梦文章的按权重排序功能。

我不知道这是织梦的bug还是什么,明明编辑文章有权重这个功能可以实现手动排序,为什么程序不直接做好,还要手动修改程序才能实现这个功能。
我们首先找到根目录include/arc.listview.class.php文件并打开。
查找 //排序方式,会看到下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
//排序方式 $ordersql = ''; if($orderby=="senddate" || $orderby=="id") { $ordersql=" ORDER BY arc.id $orderWay"; } else if($orderby=="hot" || $orderby=="click") { $ordersql = " ORDER BY arc.click $orderWay"; } else if($orderby=="lastpost") { $ordersql = " ORDER BY arc.lastpost $orderWay"; } else { $ordersql=" ORDER BY arc.sortrank $orderWay"; } |
修改成为下面的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//排序方式 $ordersql = ''; if($orderby=="senddate" || $orderby=="id") { $ordersql=" ORDER BY arc.id $orderWay"; } else if($orderby=="hot" || $orderby=="click") { $ordersql = " ORDER BY arc.click $orderWay"; } else if($orderby=="lastpost") { $ordersql = " ORDER BY arc.lastpost $orderWay"; } else if($orderby=="weight") { $ordersql = " ORDER BY arc.weight $orderWay"; } else { $ordersql=" ORDER BY arc.sortrank $orderWay"; } |
然后查找 //如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢) ,把 if(preg_match(‘/hot|click|lastpost|weight/’, $orderby)) 修改为下面的代码:
1 |
if(preg_match('/hot|click|lastpost|weight/', $orderby)) |
保存文件并覆盖,前台模板怎么调用?{dede:list orderby=’weight’ orderway=’asc’} ,这个是按权重越小排名越靠前,如果想按权重越大排名越靠前则把“asc”改为“desc”。
正常来说,这样应该叫就可以了,但是我修改后发现并没有按权重排序,还是按默认的时间排序的,我纳闷了好一会儿,最后发现我的文章权重根本没修改过来,也就是说我在后台修改文章的权重没有生效,百度下发现了问题原因。织梦dedeCMS系统后台不能修改内容权重怎么解决?找到后台文件 dede/album_edit.php ,搜素 //更新数据库的SQL语句 ,在下面 filename=’$filename’ 后面加一句:
1 |
weight='$weight', |
保存覆盖后,终于生效了。
dede:arclist 这个标签官方程序是支持按权重调用文章的,正确的标签写法是这样的
1 |
{dede:arclist typeid='1' row='8' isweight='y'} <li><span>权重:[field:weight /]</span><a href="[field:arcurl /]">[field:title /]</a></li> {/dede:arclist} |
列表要按权重排序的话,需要打开 \include\arc.listview.class.php 找到
1 |
else if($orderby=="lastpost") { $ordersql = " ORDER BY arc.lastpost $orderWay"; } |
在它的下面加上
1 |
else if($orderby == 'weight') { $ordersql = " ORDER BY arc.weight $orderWay"; } |
继续找到
1 |
/hot|click|lastpost |
改成
1 |
/hot|click|lastpost|weight |
暂无评论