织梦栏目内容跨栏目调用

织梦默认调用多局限于当前栏目,但实际建站中,首页、频道页常需要跨栏目聚合内容,如同时调用新闻与产品栏目。本文讲解几种跨栏目调用方法。

一、arclist跨栏目调用基础

{dede:arclist}通过typeid指定栏目,可传入单个或多个栏目ID,实现跨栏目调用:

{dede:arclist typeid='1,2,3' row='10' orderby='pubdate'}
  <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}

多个ID用英文逗号分隔,会同时调用这几个栏目的文档。

二、调用指定栏目的子栏目

若想调用某顶级栏目下所有子栏目的内容,可用typeid='top'或在typeid中填顶级栏目ID并配合type属性:

{dede:arclist typeid='10' row='10'}
  ...
{/dede:arclist}

默认会包含子栏目文档。若只想当前栏目不含子栏目,加type='self'

三、排除指定栏目

需要调用全站最新内容但排除某些栏目时,可用typeid='all'配合noflag或自定义SQL。更直接的方式是用{dede:sql}:

{dede:sql sql="SELECT id,title FROM dede_archives WHERE typeid NOT IN(5,6) AND arcrank>-2 ORDER BY pubdate DESC LIMIT 10"}
  <li>[field:title/]</li>
{/dede:sql}

四、频道页多区块聚合

频道页常按子栏目分块展示,每个区块调用一个子栏目。先用{dede:channel}列子栏目,再在每个区块用arclist调用:

{dede:channel type='son' typeid='10'}
  <section>
    <h2>[field:typename/]</h2>
    {dede:arclist typeid='[field:id/]' row='5'}
      <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:arclist}
  </section>
{/dede:channel}

注意arclist嵌套在channel中时,需用[field:id/]动态传入栏目ID。

五、跨栏目调用附加字段

调用附加表字段需用addfieldschannelid指定模型:

{dede:arclist typeid='5,6' addfields='price,spec' channelid='6' row='10'}
  <li>[field:title/] - [field:price/]元</li>
{/dede:arclist}

跨栏目调用附加字段时,各栏目必须绑定同一模型,否则字段不通用。

六、调用栏目本身的单页内容

栏目的"栏目内容"(单页)用{dede:type}{dede:sql}调用:

{dede:sql sql="SELECT content FROM dede_arctype WHERE id=10"}
  [field:content/]
{/dede:sql}

常用于在频道页展示栏目介绍。

七、注意事项

八、使用建议

建议把跨栏目调用集中在首页与频道页,详情页尽量只调用本栏目与相关内容,避免SQL过于复杂。对于多区块聚合的页面,可结合缓存或静态化降低数据库压力。合理规划栏目ID与模型绑定,能让跨栏目调用更顺畅,也能减少后期维护成本。