dedecms5.7针对weight排序是有bug的,下面我来一步步告诉大家如何解决weight无效的解决办法,具体请参考下面。
涉及的文件是includetaglibarclist.lib.php文件:
第570行左右:
| 代码如下 | 复制代码 |
| if ( $isweight==’y’ ) | |
这一行代码简直是废柴,$orderWeight = list_sort_by($orderWeight, ‘weight’, ‘asc’); 对结果进行排序。
这个是有问题的,因为在得到这个$orderWeight之前,检索文档表的语句为:
| 代码如下 | 复制代码 |
|
SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule, tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath arc.arcrank > -1 ORDER BY arc.sortrank DESC |
|
很明显了吧,我们在写标签的时候,写的是
| 代码如下 | 复制代码 |
|
{dede:arclist orderby=’weight’ typeid=’29′ isweight=’y’ limit=’4,1′ titlelen=’100′ infolen=’100′ } |
|
,本意是数据按照weight进行排序,二处理程序是按照
sortrank 检索的数据库,指定 isweight=’y’ 仅仅是起到了将检索出的数据集再根据weight排序。
所以处理办法非常简单:在该程序文件330行处,增加一行按照weight排序的处理语句:
| 代码如下 | 复制代码 |
|
else if($orderby == ‘weight’) $ordersql = ” order by arc.weight asc”;
Pascal基础教程 Pascal入门必备基础教程 CHM版
下载
无论做任何事情,都要有一定的方式方法与处理步骤。计算机程序设计比日常生活中的事务处理更具有严谨性、规范性、可行性。为了使计算机有效地解决某些问题,须将处理步骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的“序列”,完成预定的任务。将处理问题的步骤编排好,用计算机语言组成序列,也就是常说的编写程序。在Pascal语言中,执行每条语句都是由计算机完成相应的操作。编写Pascal程序,是利用Pasca |
|
我们再分离一个让list标签支持weight排序
| 代码如下 | 复制代码 |
|
{dede:list pagesize='10' titlelen='50' orderby='weight'} •[field:textlink/] |
|
办法:
1、打开文件arc.listview.class.php
2、查找“else if($orderby=="lastpost") {” 语句,大概在609行,在此行前面按下回车健,插入如下语句:
| 代码如下 | 复制代码 |
|
else if($orderby=="weight") { $ordersql = " order by arc.weight $orderWay"; } |
|
3、继续查找“if(ereg('hot|click|lastpost',$orderby))”语句,修改为:
| 代码如下 | 复制代码 |
|
if(ereg('hot|click|weight|lastpost',$orderby)) |
|
修改完成后,保存,如果目标里面已经使用了weight排序,生成一下,就可以看到,文档列表已经安装weight排序
4、模板调用
| 代码如下 | 复制代码 |
|
{dede:arclist row='10' titlelen='50' orderby='weight'} •[field:textlink/] |
|










