dede文章页如何调用频道信息?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

核心思路

在DedeCMS的文章页模板(通常是 article_article.htm)中,系统已经内置了当前文章的ID等信息,我们可以利用这个ID,通过DedeCMS提供的全局函数 GetOneType() 来获取其所属栏目的完整信息,然后再进行调用。

dede文章页调用频道
(图片来源网络,侵删)

调用当前栏目的基本信息(最常用)

这种方法最直接,可以获取到栏目的名称、链接、简介等常用信息。

适用场景:在文章页面包屑导航上方或下方,显示“所属栏目:[栏目名称]”或“更多来自 [栏目名称] 的文章”等。

代码示例:

在您的 article_article.htm 模板文件中,在需要显示的位置加入以下代码:

dede文章页调用频道
(图片来源网络,侵删)
{dede:field name='typeid' function="GetOneType(@me,0)/"}

代码解析:

  • {dede:field name='typeid'}: 这是获取当前文章所属的栏目ID。
  • function="GetOneType(@me,0)": 这是核心。
    • @me:代表 typeid 这个字段的值,也就是栏目ID。
    • GetOneType():这是DedeCMS的一个核心PHP函数,用于根据栏目ID获取该栏目的详细信息。
    • 0:表示获取当前栏目,而不是其上级栏目,虽然这里写 0 和不写效果一样,但明确写上可以增强代码可读性。

如何调用具体信息?

使用上面的代码后,DedeCMS会返回一个包含所有栏目信息的数组,你需要在模板中通过 字段名 来调用具体内容。

示例1:调用栏目名称和链接

dede文章页调用频道
(图片来源网络,侵删)
<!-- 方式一:直接调用,代码简洁 -->
<p>本文来自:<a href="{dede:field name='typeid' function="GetOneType(@me,0)/['typedir']"}">{dede:field name='typeid' function="GetOneType(@me,0)/['typename']"}</a></p>
<!-- 方式二:使用 {dede:tagname} 标签,代码更清晰,推荐 -->
{dede:field name='typeid' function="GetOneType(@me,0)/"}
<p>本文来自:<a href="[field:typedir/]">[field:typename/]</a></p>
{/dede:field}

示例2:调用栏目简介

{dede:field name='typeid' function="GetOneType(@me,0)/"}
<p>栏目简介:[field:description/]</p>
{/dede:field}

常用栏目调用字段列表:

字段名 说明 示例
typename 栏目名称 [field:typename/]
typedir 栏目链接地址 [field:typedir/]
description 栏目简介 [field:description/]
seotitle 栏目SEO标题 [field:seotitle/]
keywords 栏目关键词 [field:keywords/]

调用顶级栏目的信息(频道页)

你可能想在文章页显示这篇文章所属的“顶级栏目”(也就是频道页)的信息,而不是它直接所在的栏目。

适用场景:网站有明确的频道划分(如新闻中心、产品中心、下载中心等),希望在文章页显示“[频道名称] > [栏目名称] > [文章标题]”这样的层级关系。

代码示例:

{dede:field name='typeid' function="GetOneType(@me,1)/"}

代码解析:

  • 与方法一的唯一区别是函数的第二个参数,这里我们写的是 1
  • GetOneType(@me,1):这个 1 表示获取当前栏目的“顶级父栏目”信息。

如何使用:

{dede:field name='typeid' function="GetOneType(@me,1)/"}
<p>所属频道:<a href="[field:typedir/]">[field:typename/]</a></p>
{/dede:field}

结合面包屑导航(综合应用)

这是最实用的场景,通常我们会在面包屑导航中显示从顶级栏目到当前栏目的完整路径。

DedeCMS的面包屑标签 {dede:field name='position' /} 默认已经实现了这个功能,它会自动显示 “首页 > 顶级栏目 > 二级栏目 > ... > 当前栏目”。

示例代码:

<div class="breadcrumb">
    <span>您的位置:</span>
    {dede:field name='position' /}
</div>

输出效果示例:

<div class="breadcrumb">
    <span>您的位置:</span>
    <a href='http://www.yoursite.com/'>主页</a> > 
    <a href='http://www.yoursite.com/news/'>新闻中心</a> > 
    <a href='http://www.yoursite.com/news/gundong/'>国内新闻</a> > </div>

如果你想在面包屑之外,单独再强调一下当前栏目,可以结合方法一使用:

<div class="breadcrumb">
    <span>您的位置:</span>
    {dede:field name='position' /}
</div>
<hr>
{dede:field name='typeid' function="GetOneType(@me,0)/"}
<h3>更多来自 <a href="[field:typedir/]">[field:typename/]</a> 的文章</h3>
{/dede:field}

总结与注意事项

  1. 推荐使用 {dede:field}:虽然直接在 function 里写 ['typename'] 也能用,但使用 {dede:field}...{/dede:field} 包裹的方式,代码结构更清晰,更符合DedeCMS模板的规范,也更容易维护。

  2. 缓存问题:修改模板文件后,请务必登录DedeCMS后台,点击“生成” -> “更新HTML”,重新生成文章页面,否则看不到效果。

  3. 字段不存在:如果调用某个字段(如 [field:seotitle/])后没有内容,说明你在后台添加该栏目时没有填写这个信息,这是正常的。

  4. 栏目类型:这些方法同样适用于普通栏目、封面栏目和外部链接栏目,对于外部链接栏目,[field:typedir/] 会调用你在后台设置的外部链接地址。

选择最适合您网站布局和需求的方法即可,对于绝大多数情况,方法一和方法三的结合使用已经足够强大和灵活。

-- 展开阅读全文 --
头像
C语言如何设计高效实验设备管理系统?
« 上一篇 03-12
C诺克如何用顺序结构实现?
下一篇 » 03-12

相关文章

取消
微信二维码
支付宝二维码