在使用DEDE CMS时,有时我们需要将一篇文章同时归属于主栏目和副栏目。虽然文档的最终管理仍在主栏目中,但副栏目的前台列表页同样可以展示这些文章。这种功能满足了某些特殊栏目需求。然而,在实际操作中,我们不仅希望文章出现在列表页,还希望它们能够在首页或其他页面中展示。这就需要用到arclist标签进行调用。但默认情况下,arclist标签无法直接调用副栏目的文档。

 

这是因为arclist标签文件中的相关PHP代码函数不支持副栏目的调取。为了解决这个问题,我们可以通过修改代码来让arclist支持副栏目的调用。

 

第一步: 查找根目录下的 /include/taglib/arclist.lib.php 文件。

 

第二步: 打开 arclist.lib.php 文件后,找到大约在第261行的代码:

$orwheres[] = " arc.typeid in ($typeid) ";

将其替换为以下代码:

$vicewheres = ""; 
foreach($typeid as $tid){
    $liketypeid2 = ",".$tid.",";
    $vicewheres.= " or CONCAT(';',arc.typeid2,';') like '%".$liketypeid2."%' ";
}
if($vicewheres!="") 
    $orwheres[] = " (arc.typeid in ($typeid) $vicewheres) ";
else 
    $orwheres[] = " arc.typeid in ($typeid) ";

 

第三步: 接下来,找到大约在第303行的代码:

if ($CrossID=='') 
    $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).')';
else 
    $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).','.$CrossID.')';

将其替换为以下代码:

// 副栏目处理
$vicewheres = "";
$typeids = explode(",",GetSonIds($typeid));
$crossids = explode(",",$CrossID);
$typeidss = array_merge($typeids,$crossids);
$typeidss = array_unique($typeidss);

foreach($typeidss as $tid){
    $liketypeid2 = ",".$tid.",";
    $vicewheres.= " or CONCAT(';',arc.typeid2,';') like '%".$liketypeid2."%' ";
}

if($CrossID==''){
    if($vicewheres!="") 
        $orwheres[] = ' (arc.typeid in ('.GetSonIds($typeid).') '.$vicewheres.') ';
    else 
        $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).') ';
}else{
    if($vicewheres!="") 
        $orwheres[] = ' (arc.typeid in ('.GetSonIds($typeid).','.$CrossID.') '.$vicewheres.') ';
    else 
        $orwheres[] = ' arc.typeid in ('.GetSonIds($typeid).','.$CrossID.') ';
}

 

通过以上步骤,我们可以成功解决DEDECMS中arclist标签无法调用副栏目文章的问题。这样,无论是在首页、列表页还是其他页面,都可以灵活地展示副栏目的内容。

 

希望这篇文章能帮助到正在寻找解决方案的朋友们!如果还有其他问题,欢迎随时提问。