织梦自定义排序,按照自己添加的字段实现排序
标签dede:arclist的排序是通过orderby来指定的,如下:{dede:arclist orderby=’排序字段’ }
{/dede:arclist}
orderby=’sortrank’ 文档排序方式
§ orderby=’hot’ 或 orderby=’click’ 表示按点击数排列
§ orderby=’sortrank’ 或 orderby=’pubdate’ 按出版时间排列
§ orderby=’near’
§ orderby==’lastpost’ 按最后评论时间
§ orderby==’scores’ 按得分排序
§ orderby=’id’ 按文章ID排序
§ orderby=’rand’ 随机获得指定条件的文档列表
而能给orderby赋值的只能是上面列出的值,也就是说dede:arclist 标签只能按照上面列出的字段排序。
那怎样才能按照自定义的字段排序呢?假如我现在在dede_archives表里面添加了一个字段orderid,
我想按照这个字段排序。直接这样写:{dede:arclist orderby=’orderid’ }是不行的。那应该怎样修改?
一、数据库操作:用MYSQL的管理工具或者其他,修改dede_archives表结构,添加一列orderid字段
DeDeCMS文档默认按最后时间排序的,如果某一文章需要置顶,那么只要重新编辑提交该文章就顶上去了,可是导致的问题也是很多,如果你希望你最近更新的文章在第十条插入的话,那么你需要把这十一条内容重新提交一次,按照顺序!
所以,这么复杂,这么不科学的方法显然不适合我们。
二次开发版:新建一个表,让这个表控制每个文章的数值,我们依靠这个数值来排列,类似添加文章里TAG旁的那个权重一样,我们也给他添加一个权重,只不过这个权重是用来控制文章的排序顺序。
OK,想法有了,那么就开始实现吧,百度了一圈,发现之前也有站长和我相同想法的,不过他们提供的方法是对照旧版DEDE而言,新版不适合他们的代码,不过依葫芦画瓢咱还是可以的。
废话不多说,教程开始
步骤比较多,但是都很简单,无脑操作的,有需要的朋友请认真一步步看下去。
数据库操作1:首先得给数据库添加一个表,让它来记录这个权重。所以我们进入PHPMYADMIN,找到dede_archives选择结构一栏进入,然后添加表orderid
文件修改1、打开 根目录/dede/article_add.php //修改代码文件 搜索找到
$query = "INSERT INTO `dede_archives`(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle, color,writer,source,litpic,pubdate,senddate,mid,voteid,notpost,description,keywords,filename,dutyadmin,weight) VALUES ('$arcID','$typeid','$typeid2','$sortrank','$flag','$ismake','$channelid','$arcrank','$click','$money', '$title','$shorttitle','$color','$writer','$source','$litpic','$pubdate','$senddate', '$adminid','$voteid','$notpost','$description','$keywords','$filename','$adminid','$weight');";
$query = "INSERT INTO `dede_archives`(id,typeid,typeid2,sortrank,flag,ismake,channel,arcrank,click,money,title,shorttitle, color,writer,source,litpic,pubdate,senddate,mid,voteid,notpost,description,keywords,filename,dutyadmin,weight,orderid) VALUES ('$arcID','$typeid','$typeid2','$sortrank','$flag','$ismake','$channelid','$arcrank','$click','$money', '$title','$shorttitle','$color','$writer','$source','$litpic','$pubdate','$senddate', '$adminid','$voteid','$notpost','$description','$keywords','$filename','$adminid','$weight','$orderid');";
排序权重: | (请填写数字,越大越靠前) |
if(preg_match('/hot|click|lastpost/', $orderby))
if(preg_match('/hot|click|orderid|lastpost/', $orderby))
排序权重: | (请填写数字,越大越靠前) |
else if($orderby=="hot" || $orderby=="click") { $ordersql = " ORDER BY arc.click $orderWay"; }
else if($orderby=="orderid") { $ordersql = " order by arc.orderid $orderWay"; //orderid为dede_archives表里面自己添加的字段 }
else if($orderby == 'id') $ordersql = " ORDER BY arc.id $orderWay";
else if($orderby == ’orderid’) $ordersql = ” order by arc.orderid $orderWay,arc.id $orderWay”;
{dede:arclist typeid=’1′ row=’10′ titlelen=’60′ orderby=′orderid′}
【重点】
其实自定义排序是一种很灵活的形式
也根本不需要再添加什么字段
因为dede5.7版本后数据表中是有weight这个字段的,如果我们想要自定义根据这个字段排就可以了
上面那种方法是改的地方比较多,但是很死板,将操作集中到了编辑区,只是为编辑区增加了一个插件的功能而已
灵活的来讲,上述方法不适用于采集的文章
就比如我的站点,是有采集的
对于采集的许多数据,排序不准,该怎么办?
这里我的方法就是在sql软件中,更新某种特定格式的数据的权重
例如2017开头的权重我都设置为了70,2016开头的为60,2015的为50
所以只用到了第一种方法,让织梦支持权重即可
然后是arclist不能在视图中指定orderway='asc|desc'
所以这里只能在arclist标签的源文件中,设置符合自己需求的顺序或逆序方式即可
版权声明:本文发布于E时代互联网络科技 内容均来源于互联网 如有侵权联系删除