首先,我们需要了解如何通过`arclist`标签调用主栏目和副栏目的信息。以下是具体的标签调用代码:
{dede:arclist row='2' titlelen='100' typeid=2 orderby='id'}
[field:typename/]
[field:typeid2 function="get_url_by_typeid2(@me)"/]
{/dede:arclist}
接下来,我们需要在`\\include\\extend.func.php`文件中添加以下函数代码,以便正确解析副栏目的信息:
// 得到副栏目信息,并组织字符串
function get_url_by_typeid2($typeid2){
$arrs=explode(",",$typeid2); // 解析副栏目字段
if($typeid2==0){
return '';
} else {
$url='';
foreach($arrs as $v){
$url.=''.get_typename($v).'';
}
return $url;
}
}
// 根据栏目编号typeid调用typename栏目名
function get_typename($typeid){
global $dsql;
$rs=$dsql->getOne("select typename from arctype where id='$typeid'");
return $rs['typename'];
}
需要注意的是,默认情况下,Dedecms的`arclist`标签无法调用副栏目中的文章内容。例如,如果一篇文章属于“互联网”这个副栏目,但“互联网”栏目中却不会显示这篇文章。为了解决这个问题,我们需要修改系统文件`\\include\\taglib\\arclist.lib.php`。 原始代码如下:
if($CrossID=='') $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).')';
else $orwheres[] = ' arc.typeid IN ('.GetSonIds($typeid).','.$CrossID.')';
将其修改为以下代码:
if($CrossID=='')
$orwheres[] = " (arc.typeid in (".GetSonIds($typeid).") or arc.typeid2 in (".GetSonIds($typeid).") or CONCAT( ',', arc.typeid2, ',' ) LIKE '%,".$typeid.",%')";
else
$orwheres[] = " (arc.typeid in (".GetSonIds($typeid).",".$CrossID.") or arc.typeid2 in (".GetSonIds($typeid).",".$CrossID.") or CONCAT( ',', arc.typeid2, ',' ) LIKE '%,".$typeid.",%')";
通过以上修改,您可以成功实现Dedecms中主栏目和副栏目的调用功能,同时解决了副栏目文章不显示的问题。这些改动不仅增强了系统的灵活性,还提高了用户体验。 希望本文对您有所帮助!如果您有任何疑问,请随时提问。