不知道大家在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
现在更新下专题页面,文档排序是不是和后台输入的一样咯!
转载于:https://blog.51cto.com/windchaser/1248827