在使用 Dedecms 的 `dede:likearticle` 标签时,如果您希望获取多个指定栏目下的相关文章,并且这些栏目下还有子栏目,那么官方默认的程序可能无法满足您的需求。为了解决这个问题,您需要对代码进行一些修改。 打开文件 `\\include\\taglib\\likearticle.lib.php` 并找到以下代码:

if( !empty($typeid) && !preg_match('#,#', $typeid) ) {
    $typeid = GetSonIds($typeid);
}
    
接下来,在上述代码的下方加入以下内容:

else {
    $typeids = explode(',', $typeid);
    foreach($typeids as $ttid) {
        $typeidss[] = GetSonIds($ttid);
    }
    $typeidStr = join(',', $typeidss);
    $typeidss = explode(',', $typeidStr);
    $typeidssok = array_unique($typeidss);
    $typeid = join(',', $typeidssok);
}
    
通过以上修改,您可以实现从多个指定栏目及其子栏目中提取相关文章的功能。这一改动的关键在于处理 `$typeid` 参数,当其包含多个栏目 ID 时,通过 `explode()` 函数将其拆分为数组,并逐一调用 `GetSonIds()` 方法获取所有子栏目的 ID。最后,使用 `array_unique()` 去重,确保最终结果不会重复。 以下是具体步骤的详细说明:
1. **判断条件**:如果 `$typeid` 不为空且不包含逗号,则直接调用 `GetSonIds()` 获取子栏目 ID。
2. **多栏目处理**:如果 `$typeid` 包含多个栏目 ID(以逗号分隔),则将其拆分为数组并遍历每个栏目 ID,调用 `GetSonIds()` 获取对应子栏目。
3. **去重与合并**:将所有子栏目 ID 合并为一个字符串,再转换为数组并去重,最后重新拼接成字符串。
完成上述修改后,保存文件并刷新缓存即可生效。这样,您就可以在模板中使用 `dede:likearticle` 标签时,同时获取多个栏目及其子栏目下的相关文章了。
例如,如果您希望从栏目 ID 为 1 和 2 的栏目及其子栏目中获取相关文章,可以在模板中使用以下代码:

{dede:likearticle typeid='1,2' row='10'}
    
  • [field:title/]
  • {/dede:likearticle}
    这将显示来自栏目 1 和 2 及其子栏目下的前 10 条相关文章标题。此方法不仅提高了灵活性,还增强了 Dedecms 的功能扩展性。