dede如何调用上级栏目的文章列表?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文
  1. 获取当前栏目的上级栏目 ID
  2. 使用获取到的上级栏目 ID,调用该栏目下的文章列表

下面我将为您提供几种常用且有效的方法,并附上详细的代码解释。

dede调用上级栏目文章列表
(图片来源网络,侵删)

在当前栏目页调用上级栏目的文章列表(最常用)

这种方法适用于在当前栏目的列表页或内容页,显示其父栏目的文章列表。

第 1 步:获取上级栏目 ID

在调用列表之前,我们需要先获取当前栏目的父栏目 ID,DedeCMS 提供了全局变量 $typetype$typename,但更直接和常用的是通过 GetTopid() 函数。

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

这段代码的作用是:

  • {dede:field name='typeid'}:获取当前栏目的 ID。
  • function="GetTopid(@me)":将当前栏目的 ID 作为参数,传递给 GetTopid 函数。
  • GetTopid() 函数会返回一个以当前栏目 ID 为键的数组,array('typeid' => 5),我们只需要这个 ID 值。

为了方便后续调用,我们通常把这个 ID 赋值给一个变量。

dede调用上级栏目文章列表
(图片来源网络,侵删)

第 2 步:调用上级栏目的文章列表

现在我们有了上级栏目的 ID,就可以使用 arclist 标签来调用文章列表了,关键在于使用 typeid 属性指定这个 ID。

完整代码示例

将以下代码放在您想要显示上级栏目文章列表的位置,list_article.htm 模板文件中。

<h2>上级栏目的最新文章</h2>
<ul>
  {dede:arclist typeid='gettopid' titlelen='30' row='8'}
  <li>
    <a href="[field:arcurl/]">[field:title/]</a>
    <span class="date">([field:pubdate function="MyDate('Y-m-d', @me)"/])</span>
  </li>
  {/dede:arclist}
</ul>

代码解释:

  • {dede:arclist ...}:文章列表调用标签。
  • typeid='gettopid':这是最核心的部分。typeid 属性用于指定要调用哪个栏目的文章,这里我们没有直接写数字,而是写了 gettopid,DedeCMS 会自动解析第一步 {dede:field name='typeid' function="GetTopid(@me)"/} 的结果,并将其中的 ID 值赋给 typeid,这样就实现了动态调用,len='30'`:标题长度,截取 30 个字符。
  • row='8':获取文章的数量,这里是 8 篇。
  • [field:arcurl/]:文章的链接地址。
  • [field:title/]:文章的标题。
  • [field:pubdate ...]:文章的发布日期,并用 MyDate 函数格式化为 年-月-日

页(文章页)调用上级栏目的文章列表

页(如 article_article.htm)中调用方法类似,因为内容页也能获取到当前文章所属的栏目信息。

完整代码示例

<h3>相关栏目推荐</h3>
<dl>
  {dede:arclist typeid='gettopid' row='5' orderby='pubdate'}
  <dt><a href="[field:arcurl/]">[field:title/]</a></dt>
  <dd>[field:description function="cn_substr(@me, 100)"/]...</dd>
  </dd>
  {/dede:arclist}
</dl>

这里的逻辑和方法一完全一样,都是通过 typeid='gettopid' 来动态获取上级栏目 ID 并调用其文章。


调用上级栏目的名称(作为列表标题)

有时候我们不仅想列出文章,还想在列表上方显示上级栏目的名称,这可以通过嵌套标签实现。

完整代码示例

<h2>{dede:field name='typename' function="GetTopid(@me)"/} 的最新文章</h2>
<ul>
  {dede:arclist typeid='gettopid' titlelen='30' row='8'}
  <li>
    <a href="[field:arcurl/]">[field:title/]</a>
  </li>
  {/dede:arclist}
</ul>

代码解释:

  • {dede:field name='typename' function="GetTopid(@me)"/}:这个标签会返回上级栏目的名称。GetTopid 函数不仅能处理 ID,也能处理名称,它会返回当前栏目的顶级栏目信息,这里我们直接用它来获取顶级栏目的名称,作为标题。

重要注意事项

  1. GetTopid 函数:这个函数是 DedeCMS 的内置函数,用于获取顶级栏目,如果您的栏目结构是“顶级栏目 -> 二级栏目 -> 三级栏目”,GetTopid 获取的是顶级栏目的 ID,如果您想获取的是直接父级栏目的 ID,GetTopid 在只有两级时是有效的,如果层级更深,GetTopid 会一直向上找到顶级。

    • 如果只需要直接父级:在 DedeCMS 5.7 及以上版本中,可以直接使用 {dede:field name='topid'/} 来获取直接父级栏目的 ID,所以调用上级栏目文章可以更简单地写成:
      {dede:arctype typeid='{dede:field.topid/}'}
          <h2>[field:typename/]</h2>
      {/dedetype}
      {dede:arclist typeid='{dede:field.topid/}' row='10'}
          <li><a href="[field:arcurl/]">[field:title/]</a></li>
      {/dede:arclist}

      这种写法更清晰明了,推荐使用。

  2. 栏目缓存:修改模板后,请确保清除了 DedeCMS 的缓存,后台 -> 系统 -> 清除缓存,或者直接删除 /data/cache/ 目录下的缓存文件,否则可能看不到更新效果。

  3. 模板文件位置:请确保将代码放置在正确的模板文件中,在栏目列表页调用,就放在 list_栏目ID.htmlist_article.htm 中;在文章内容页调用,就放在 article_article.htm 中。

需求 推荐代码 说明
调用上级栏目文章列表 {dede:arclist typeid='{dede:field.topid/}' row='10'}...{/dede:arclist} 最推荐,使用 {dede:field.topid/} 获取直接父级ID,清晰高效。
(备选)调用上级栏目文章列表 {dede:arclist typeid='gettopid' row='10'}...{/dede:arclist} 传统方法,gettopid 会获取顶级栏目ID,适用于两级栏目结构。
调用上级栏目名称 {dede:field.name='typename'/}{dede:field.topid/} 获取当前栏目的直接父级名称。

对于大多数情况,使用 {dede:field.topid/} 是最直接、最不容易出错的方法,希望这些信息能帮助您解决问题!

-- 展开阅读全文 --
头像
织梦模板JS能解析吗?
« 上一篇 01-15
函数返回值类型由什么决定?
下一篇 » 01-15

相关文章

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

目录[+]