织梦二级栏目名称如何调用?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 织梦建站 正文

核心方法一:使用 channelarclistsg 标签(最常用)

这是最标准、最推荐的方法,适用于在首页、列表页等地方调用指定一级栏目下的所有二级栏目。

织梦二级栏目名称调用
(图片来源网络,侵删)

场景描述

假设你的网站有一个一级栏目叫“产品中心”(其ID为 2),下面有三个二级栏目:“产品A”、“产品B”、“产品C”,现在你想在首页的某个位置,只列出“产品中心”下的这三个二级栏目。

方法 1:使用 {dede:channel}

这个标签主要用于生成栏目导航,非常适合调用指定层级的子栏目。

代码示例:

{dede:channel type='son' typeid='2'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

代码详解:

织梦二级栏目名称调用
(图片来源网络,侵删)
  • {dede:channel ...}:这是织梦的栏目调用标签。
  • type='son':这是最关键的属性,表示调用“子栏目”,它会调用当前指定 typeid 下的所有直接子栏目(即二级栏目)。
  • typeid='2':指定要调用其子栏目的一级栏目ID。你需要在这里替换成你自己的栏目ID
  • [field:typelink/]:字段标签,表示栏目的完整链接地址(/plus/list.php?tid=3)。
  • [field:typename/]:字段标签,表示栏目的名称(“产品A”)。

方法 2:使用 {dede:arclistsg}

这个标签虽然主要用于调用文章列表,但它也可以非常方便地获取并循环子栏目信息,并且在循环中可以直接使用 {dede:field} 来获取子栏目信息。

代码示例:

{dede:arclistsg typeid='2' channelid='1'}
    {dede:field name='typename'/} / 
{/dede:arclistsg}

代码详解:

  • {dede:arclistsg ...}:文章列表专用标签,但支持获取子栏目。
  • typeid='2':指定要调用其子栏目的一级栏目ID。
  • channelid='1':指定模型ID,对于栏目调用,通常填写 1(普通文章模型)即可。
  • {dede:field name='typename'/}:在 arclistsg 循环体内,使用 field 标签来获取当前子栏目的名称。

核心方法二:使用 SQL 查询(最灵活)

channelarclistsg 标签无法满足复杂需求时(需要调用跨栏目的二级栏目,或者需要根据特定条件筛选),直接使用 SQL 查询是最佳选择。

场景描述

你想调用所有一级栏目ID为 258 的二级栏目,并按排序号升序排列。

代码示例:

{dede:sql sql='SELECT id,typename,typedir FROM `dede_arctype` WHERE reid IN (2,5,8) AND ishidden<>1 ORDER BY sortrank ASC'}
    <a href="[field:typedir function='str_replace("{cmspath}","",@me)'/]">[field:typename/]</a>
{/dede:sql}

代码详解:

  • {dede:sql ...}:织梦执行自定义SQL的标签。
  • sql='...':要执行的SQL语句。
  • dede_arctype:织梦存放栏目的核心数据表,如果你的表前缀不是 dede_,请修改
  • WHERE reid IN (2,5,8):这是查询的核心条件。
    • reid 字段表示“上级栏目ID”。
    • IN (2,5,8) 表示查找所有 reid258 的记录,也就是这些一级栏目下的所有二级栏目。
  • AND ishidden<>1:这是一个常用条件,用于过滤掉在后台被“隐藏”的栏目。
  • ORDER BY sortrank ASC:按后台设置的“排序值”进行升序排列。
  • [field:typedir ...]typedir 字段包含的路径是 {cmspath}/a/b 这样的格式,需要用 str_replace 函数去掉 {cmspath} 才能得到正确的相对路径。
  • [field:typename/]:直接调用栏目名称。

特殊场景:在文章内容页(article_article.htm)调用当前文章所在二级栏目名称

这个需求很常见,比如在文章详情页显示面包屑导航。

代码示例:

当前位置:<a href='{dede:global.cfg_cmsurl/}/'>首页</a> > 
{dede:field name='typename'/}

代码详解:

  • 这个方法非常简单,因为文章内容页的模板中,{dede:field name='typename'/} 这个标签默认就是获取当前文章所在顶级栏目的名称。
  • 如果你想要的是直接上级栏目(也就是二级栏目)的名称,就需要稍微修改一下。

获取直接上级栏目(二级栏目)名称的方法:

{dede:geturl runphp='yes'}
    $reid = @me;
    $row = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id = $reid");
    @me = $row['typename'];
{/dede:geturl}

代码详解:

  1. {dede:geturl runphp='yes'}geturl 标签可以获取当前栏目的ID,runphp='yes' 允许我们在PHP代码中使用这个ID。
  2. $reid = @me;:将获取到的当前栏目ID(对于二级栏目来说,就是它自己的ID)赋值给变量 $reid
  3. $dsql->GetOne(...):使用织梦的全局数据库对象 $dsql 去查询 dede_arctype 表,根据ID获取栏目的 typename
  4. @me = $row['typename'];:将查询到的栏目名称重新赋值给 @me@me 就是标签的最终输出结果。

总结与建议

场景 推荐方法 优点 缺点
调用指定一级栏目的所有二级栏目 {dede:channel type='son' typeid='N'} 代码简洁,语义清晰,专为导航设计 功能相对固定
调用指定一级栏目的所有二级栏目 {dede:arclistsg typeid='N'} 灵活,可在循环内调用更多子栏目信息 主要用于列表,稍显“重”
复杂查询、跨栏目调用 {dede:sql} 功能最强大,完全可控 需要懂SQL,代码稍复杂,有一定性能开销
在文章页获取上级栏目名 {dede:geturl runphp='yes'} 精准,能解决 typename 标签的局限性 代码稍复杂,需要理解PHP赋值 @me

给你的建议:

  1. 90% 的情况下,使用 {dede:channel type='son' typeid='你的ID'} 就足够了。 这是最标准、最易读的解决方案。
  2. 在使用任何标签前,请务必确认你的 栏目ID表前缀(如果不是 dede_)。
  3. 如果遇到问题,请检查后台栏目管理中,相关栏目的“隐藏”选项是否被勾选。

-- 展开阅读全文 --
头像
dede在线电影模板如何快速搭建?
« 上一篇 今天
dede页面关键字如何设置与优化?
下一篇 » 今天
取消
微信二维码
支付宝二维码