在使用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标签无法调用副栏目文章的问题。这样,无论是在首页、列表页还是其他页面,都可以灵活地展示副栏目的内容。
希望这篇文章能帮助到正在寻找解决方案的朋友们!如果还有其他问题,欢迎随时提问。