您的位置:首页 > 其它

DedeCMS让{dede:list}标签支持weight权重排序、flag属性

2015-10-16 14:09 483 查看
修改{dede:list}标签后,可支持权重排序、flag标签功能

 

在开发过程中客户需要在列表中支持权重排序,和推荐功能。经过不断的摸索,终于将{dede:list}标签修改成功。 
使用方法:{dede:list   orderby='weight'
orderway='asc' flag='c' } 
orderby='weight' orderway='asc'  与权重排序、从小到大。(与{dede:arclist}标签的使用方法相同) 
flag='c'  推荐标识(与{dede:arclist}标签的使用方法相同) 

好了,不多讲了,现在放上修改后源码,给需要的朋友们! 
 include.rar (9
K) 下载次数:64  修改后代码,直接复制到根目录下即可! 
这是utf-8编码的,使用GB2312的朋友可以自已转码一下! 
更新信息:2012-3-26. 
此修改后的文件在栏目页面时会与{arclist} 的 flag 标签有兼容问题。 
如果栏目列表页只显示列表信息则没有问题。 
但与{arclist} 的 flag标签和用时,则{list}标签将不会显示具体内容。 

特此声明。有时间我会再研究一下并做修改~~~谢谢大家的支持!

另一种解决方案:只针对 flag="p" 无图则不显示缩略图 http://my.oschina.net/lyx2012/blog/58046

 

{dede:list pagesize=18 orderby=pubdate titlelen=26}

        [field:array runphp='yes']

                @me=strpos(@me['litpic'],'defaultpic')?'':"<li><a href='@me[arcurl]' title='@me[fulltitle]' target=\"_blank\"><img src='@me[litpic]' width=\"223\" height=\"154\" /><div class=\"zral_list_txt\">@me[title]</div></a></li>";

        [/field:array]

{/dede:list}

 

http://bbs.dedecms.com/455219-1.html

 

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="
4000
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}标签就支持了按权重排序的调用,并且动静态状态下测试均成功!

 

5、将文件中原有的这部分注释掉

//        if($this->TotalResult==-1)

//        {

//            $cquery = "SELECT COUNT(*) AS dd FROM `#@__arctiny` arc WHERE ".$this->addSql;

//            $row = $this->dsql->GetOne($cquery);

//            if(is_array($row))

//            {

//                $this->TotalResult = $row['dd'];

//            }

//            else

//            {

//                $this->TotalResult = 0;

//            }

//        }

6、在238行左右  $this->dtp->LoadTemplate($tempfile);下添加如下代码:

    

        foreach($this->dtp->CTags as $tagid=>$ctag)

        {     

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

                if($flag!='') {

                $this->addSql .=  " and arc.flag like '%{$flag}%'";

                }

        }

        if($this->TotalResult==-1)

        {    //修改了

       

            $cquery = "SELECT COUNT(*) AS dd FROM `#@__archives` arc WHERE ".$this->addSql;

            $row = $this->dsql->GetOne($cquery);

         

            if(is_array($row))

            { 

                $this->TotalResult = $row['dd']; 

            }

            else

            {

                $this->TotalResult = 0;

            }

           

        }

       

7、在647行左右$ctag->GetAtt("orderway"),下面添加一行:

      $ctag->GetAtt('flag')

8、在721行左右function GetArcList($limitstart=0,$row=10,$col=1,$titlelen=30,$infolen=250,

   $imgwidth=120,$imgheight=90,$listtype="all",$orderby="default",$innertext="",$tablewidth="100",$ismake=1,$orderWay='desc',$flag='')中添加了$flag=''

9、在754行左右也就是排序方式上面添加 :

   

        //添加flag标签

        $whereFlag = "";

        if($flag!='') {

            $whereFlag = " and arc.flag like '%{$flag}%'";

        }

       

10、在813行左右 修改成  if(preg_match('/hot|click|lastpost|weight|flag/', $orderby))

     接着在下面的$query  sql语句中WHERE {$this->addSql} 后面添加 {$whereFlag}

11、847行左右   $query sql语句中WHERE arc.id in($idstr)后面添加 {$whereFlag} 

 

 

flag属性就添加成功了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: