织梦按权重排序和自定义排序

【按权重排序】

dede:list 的方法

1、找到"根目录\include\arc.listview.class.php"文件。

2、修改代码:在文件第727行处添加按weight排序判断代码(红色部分为新添加代码)。

 

复制代码
//排序方式
$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";
        }
复制代码

 

3、再在第778行处找到此段代码

  

//如果不用默认的sortrank或id排序,使用联合查询(数据量大时非常缓慢)
     if(preg_match('/hot|click|lastpost|weight/', $orderby))

 

  并添加红色部分内容。

4、标签调用:

  

{dede:list orderby='weight' orderway='asc'}

 

  这样{dede:list}标签就支持了按权重排序的调用,并且动静态状态下测试均成功!

 

 

下面是dede:arclist的修改方法

 

1、在织梦系统中找到以下目录\include\taglib中的arclist.lib.php文件并打开

   大约在74 、75行找到:

      // arclist是否需要weight排序,默认为"N",如果需要排序则设置为"Y"
    $isweight = $ctag->GetAtt('isweight');

把这行修改为:

  $weight = $ctag->GetAtt('weight');

大约在327行找到,并修改

    //文档排序的方式
    $ordersql = '';
    if($orderby=='hot' || $orderby=='click') $ordersql = " ORDER BY arc.click $orderWay";
    else if($orderby == 'sortrank' || $orderby=='pubdate') $ordersql = " ORDER BY arc.sortrank $orderWay";
    else if($orderby == 'id') $ordersql = "  ORDER BY arc.id $orderWay";
    else if($orderby == 'near') $ordersql = " ORDER BY ABS(arc.id - ".$arcid.")";
    else if($orderby == 'lastpost') $ordersql = "  ORDER BY arc.lastpost $orderWay";
    else if($orderby == 'scores') $ordersql = "  ORDER BY arc.scores $orderWay";
    else if($orderby == 'rand') $ordersql = "  ORDER BY rand()";

     else if($orderby == 'weight') $ordersql = "  order by arc.weight asc";//插入这句 从小到大

    else $ordersql = " ORDER BY arc.sortrank $orderWay";

 

然后用orderby='weight'

 

【自定义排序】

标签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 //修改代码文件

搜索找到

1
2
3
4
5
$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' );";

修改为

1
2
3
4
5
$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' );";

2、打开dede/article_edit.php     //修改代码文件
搜索weight='$weight'在它之后加逗号并回车换行加入以下代码orderid='$orderid'
 
3、打开dede/templets/article_add.htm    //修改模板文件
在适合位置添加以下代码,我是在内容摘要之后添加的。

1
2
3
4
5
6
7
8
<table width= "100%"  border= "0"  cellspacing= "0"  cellpadding= "0"  style= "margin-bottom:3px;" >
        <tbody>
   <tr> 
         <td width= "90"  class = "bline"  height= "24" >&nbsp;排序权重:</td>
         <td  class = "bline" ><input type= 'text'  name= 'orderid'  value= '0'  style= 'width:100px;'  />(请填写数字,越大越靠前)</td>
   </tr>
   </tbody>
   </table>

4、打开dede/include/arc.listview.class.php //修改模版文件
搜索 

1
if (preg_match( '/hot|click|lastpost/' $orderby ))

修改为

1
if (preg_match( '/hot|click|orderid|lastpost/' $orderby ))

5、打开dede/templets/article_edit.html    //修改模板文件
在适合位置添加以下代码,我是在文章副栏目之后添加的

1
2
3
4
5
6
7
8
<table width= "100%"  border= "0"  cellspacing= "0"  cellpadding= "0"  style= "margin-bottom:3px;" >
        <tbody>
     <tr>
     <td width= "90"  class = "bline"  height= "24" > 排序权重:</td>
     <td   class = "bline" ><input type= 'text'  name= 'orderid'  value= '<?php echo $arcRow["orderid"]?>'  style= 'width:100px;'  />(请填写数字,越大越靠前)</td>
     <td></td>
     </tr>
     </tbody></table>

6、打开include/arc.listview.class.php     //修改代码文件
搜索

1
2
3
else  if ( $orderby == "hot"  ||  $orderby == "click" ) {
             $ordersql  " ORDER BY arc.click $orderWay" ;
         }

在其后添加

1
2
3
else  if ( $orderby == "orderid" ) {
             $ordersql  " order by arc.orderid $orderWay" //orderid为dede_archives表里面自己添加的字段
             }

7、打开include/taglib/arclist.lib.php     //修改代码文件
搜索

1
else  if ( $orderby  ==  'id' $ordersql  "  ORDER BY arc.id $orderWay" ;

在它之后回车增加一行,加入以下代码

1
else  if ( $orderby  == ’orderid’)  $ordersql  = ” order by arc.orderid  $orderWay ,arc.id  $orderWay ”;

8、最后在HTML模板调用如下:

1
2
3
4
5
{dede:arclist typeid=’1′ row=’10′ titlelen=’60′  orderby=′orderid′}
 
《你的模版文件代码》
 
{/dede:arclist}

至此,我们就完成我们需要的功能了。在后台排序权重文字,填写任意数字(数值越大,排序越靠前)

【重点】

其实自定义排序是一种很灵活的形式

也根本不需要再添加什么字段

因为dede5.7版本后数据表中是有weight这个字段的,如果我们想要自定义根据这个字段排就可以了

上面那种方法是改的地方比较多,但是很死板,将操作集中到了编辑区,只是为编辑区增加了一个插件的功能而已

灵活的来讲,上述方法不适用于采集的文章

就比如我的站点,是有采集的

对于采集的许多数据,排序不准,该怎么办?

这里我的方法就是在sql软件中,更新某种特定格式的数据的权重

例如2017开头的权重我都设置为了70,2016开头的为60,2015的为50

所以只用到了第一种方法,让织梦支持权重即可

然后是arclist不能在视图中指定orderway='asc|desc'

所以这里只能在arclist标签的源文件中,设置符合自己需求的顺序或逆序方式即可

 

转载于:https://www.cnblogs.com/wgphp/p/8052919.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值