不知道大家在DEDE开发过程中有没有遇到这个问题哦~

刚研究出来和大家分享下,由于公司最近项目有这个需求,本来都快没希望了无意间在谷歌搜索中发现几条SQL函数,研究过DEDE的开发人员应该清楚,DEDE专题节点输出是结合了arclist标签的方式来进行解析的,输出的结构通过SQL语句查询之后循环组合成一组HTML标签生成静态页;好,那我们就依照这个原理来改进它,让其支持自定义排序;

先和大家分享下我搜索到的几个SQL函数:

instr、find_in_set、substring_index、field

用法如下:

instr用法:

select * from table1 order by instr('1,4,5,7,2',id)

find_in_set用法:

select * from test where id in(3,1,5) order by find_in_set(id,'3,1,5');

substring_index用法:

select * from test where id in(3,1,5) order by substring_index('3,1,2',id,1);

field用法:

select * from a where id in(8,11,3) order by field(id,8,11,3);

我采用的是最后一个函数:field 实现了DEDE专题节点自定义ID排序的小需求功能;

首先打开include/taglib/arclist.lib.php文件,查找到下述内容:

else if($orderby == 'scores') $ordersql = "  ORDER BY arc.scores $orderWay";

再该代码后面添加一句判断:

else if($orderby == 'custom') $ordersql = " ORDER BY field(arc.id,$idlist)";

OK,已经完成了百分之九十九了;最后一步打开include/taglib/channel/specialtopic.lib.php文件,大约在61行,将

default

改为

custom

现在更新下专题页面,文档排序是不是和后台输入的一样咯!