菜鸟科技网

页如何调用副栏目?

在dedecms内容页中调用副栏目是网站开发中常见的需求,尤其是在内容分类较多且存在主副栏目关联的情况下,副栏目的调用可以帮助用户更快速地访问相关内容,提升网站的导航体验和内容关联性,以下将详细介绍dedecms内容页调用副栏目的实现方法,包括代码示例、注意事项及常见问题解决。

页如何调用副栏目?-图1
(图片来源网络,侵删)

dedecms内容页调用副栏目的核心思路是通过获取当前文章的副栏目ID,然后利用栏目列表或arclist标签调用相关内容,具体实现步骤如下:

获取副栏目ID

在dedecms中,文章的副栏目存储在dede_archives表的typeid字段(主栏目)和sortrank字段(副栏目ID,需通过配置开启),默认情况下,副栏目需要手动添加,且需确保后台“系统参数-核心设置”中是否启用了“支持多级栏目”和“副栏目”功能,若已启用,可通过以下代码获取副栏目ID:

{dede:field name='typeid' function='GetTopid(@me)'/}

此代码获取的是主栏目ID,若需获取副栏目ID,需结合数据库查询或自定义函数实现,建议在include/common.func.php中添加自定义函数:

function GetSubTypeid($aid) {
    global $dsql;
    $query = "SELECT dede_addonarticle.typeid FROM dede_addonarticle WHERE aid='$aid'";
    $row = $dsql->GetOne($query);
    return $row['typeid'];
}

调用副栏目内容

获取副栏目ID后,可通过arclistlist标签调用该栏目的文章,以下为常用代码示例:

页如何调用副栏目?-图2
(图片来源网络,侵删)

调用副栏目标题

{dede:field name='typeid' function='GetSubTypeid(@me)'/}

调用副栏目下的文章列表

{dede:arclist typeid='[field:typeid function="GetSubTypeid(@me)"/]' row='5' titlelen='30'}
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

调用副栏目名称及链接

{dede:field name='typeid' function='GetSubTypeid(@me)'/}
{dede:channel type='self' typeid='[field:typeid function="GetSubTypeid(@me)"/]'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

注意事项

  1. 权限配置:确保模板文件对include/common.func.php有读取权限,否则自定义函数无法生效。
  2. 栏目关联:副栏目需在文章编辑时手动选择,否则无法获取相关ID。
  3. 标签参数arclist标签中的typeid参数需动态传入,避免硬编码导致调用错误。
  4. 缓存问题:若修改后未显示效果,可尝试清除后台“系统-SQL命令行工具”中的缓存表。

常见问题与解决方案

以下是实际操作中可能遇到的问题及解决方法:

| 问题现象 | 可能原因 | 解决方案 | |----------|----------|----------|无法显示 | 未正确获取副栏目ID | 检查GetSubTypeid函数是否添加到common.func.php,并确认文章是否设置了副栏目 |重复 | arclist标签未设置row参数 | 明确指定row值,如row='5'限制显示数量 | | 链接跳转错误 | 栏目ID与实际不符 | 使用{dede:field name='typeid'/}打印主栏目ID,对比副栏目ID是否正确 |

相关问答FAQs

问题1:为什么调用副栏目时显示空白?
解答:通常是因为文章未设置副栏目或自定义函数未正确加载,请检查文章编辑页面的“副栏目”选项是否已选择,并确认common.func.php中的GetSubTypeid函数语法无误,若问题依旧,可尝试直接在模板中硬编码副栏目ID测试是否为函数调用问题。

问题2:如何调用多个副栏目的内容?
解答:若文章关联多个副栏目,需修改GetSubTypeid函数以返回数组或逗号分隔的ID字符串,然后在arclist标签中使用typeid='id1,id2'格式,修改函数为:

页如何调用副栏目?-图3
(图片来源网络,侵删)
function GetSubTypeids($aid) {
    global $dsql;
    $query = "SELECT GROUP_CONCAT(typeid) FROM dede_addonarticle WHERE aid='$aid'";
    $row = $dsql->GetOne($query);
    return $row['GROUP_CONCAT(typeid)'];
}

调用时使用:

{dede:arclist typeid='[field:typeid function="GetSubTypeids(@me)"/]' row='10'}

通过以上方法,可灵活实现dedecms内容页副栏目的调用,满足不同场景下的内容展示需求,实际操作中需根据网站结构调整代码,并注意测试验证。

分享:
扫描分享到社交APP
上一篇
下一篇