dedecms中如何让专题不显示在文章列表中

dede的对专题的构思有很多好的方面,但是也有不合理的地方,比如专题的处理。

在dede中专题会默认显示在文章列表中,多数时候我们是不希望这样的,设置专题就是为了和普通文章区分开来。
但是dede默认是要这样显示的。那么我们可以来改arclist标签对应的php文件。

处理arclist文章列表的标签对应的php文件是文件\include\taglib\arclist.lib.php。

然后找到查询文章列表的sql语句,经过仔细的分析,初步认为设置查询语句条件是在lib_arclistDone()函数的$orwhere变量里面。在文件中搜索orwhere,发现orwhere其实是一个数组 $orwheres = array();,这个数组是这样赋值的: $orwheres[] = " And arc.channel !=-1",先判断标签属性,如果有某某标签需要更改查询条件,就用这种方式将限制条件的字符串保存在
orwheres里面,在最后将整个数组用join函数连在一起,结合其他变量形成sql语句。在lib_arclistDone函数中是这样做的
if(isset($orwheres[0])) {
$orwhere = join(' And ',$orwheres);
$orwhere = preg_replace("#^ And#is", '', $orwhere);
$orwhere = preg_replace("#And[ ]{1,}And#is", 'And ', $orwhere);
}
if($orwhere!='') $orwhere = " WHERE $orwhere ";

上面这段代码形成 where查询条件

然后sql语句是这样的:

$query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
$addfieldsSql
FROM `$maintable` arc LEFT JOIN `jcode_arctype` tp on arc.typeid=tp.id
$addfieldsSqlJoin
$orwhere $ordersql $limitsql";

弄清楚了查询文章的sql语句在哪里,我们就很好修改了,不是要取消默认专题被显示的功能么,我们都知道所有专题都有个channel字段,该字段为-1就表示为专题,那么我们只需在orwheres里面加上这个条件就行了。

$orwheres[] = " And arc.channel !=-1";

但是我们还需要考虑到,有些地方是需要显示专题列表的,仅仅这样做,会让需要专题的地方也显示不出来。
所以最终我决定这样写:

if(preg_match('#spec#i', $listtype))
$channelid=-1;
else
$orwheres[] = " And arc.channel !=-1";
if(!empty($channelid)) $orwheres[] = " And arc.channel = '$channelid' ";

把上面这段代码的位置放在大概该文件的305行的地方,需要注意的是不仅仅是增加代码而已,原有的代码还是有小小的改动,不过假如你读懂了我写的,你应该知道怎么改。如果你不放心,可以先保存再修改试试,不成功的话也不会有大的影响。

有了上面的代码,所有arclist标签默认情况下均不会显示专题。

如果需要显示专题的话需要这样写arclist标签:

{dede:arclist titlelen=42 row=10 type='spec'}
<li><a href="[field:arcurl/]" target="_blank">[field:title function=' (strlen("@me")>28 ? cn_substr("@me",28)."..." : "@me" ) '/]</a></li>  
{/dede:arclist}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值