dede list 调用副栏目

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

使用 channelartlist 标签(最推荐、最灵活)

channelartlist 是一个功能非常强大的标签,它可以循环指定的栏目列表,并且在循环内部可以自由调用该栏目的文章列表,使用它调用副栏目最为灵活和直观。

dede list 调用副栏目
(图片来源网络,侵删)

适用场景: 在副栏目列表页(list_special_xxx.htm)中,循环调用该副栏目本身及其下的所有文章。

代码示例:

假设你已经在后台设置了“副栏目”,并且系统为你生成了对应的列表模板(list_special_1.htm1 是副栏目的ID),你只需要在模板文件中写入以下代码:

{dede:channelartlist typeid='1' addfields='typename,seotitle'}
  <h2>{dede:field name='typename'/}</h2>
  <ul>
    {dede:list pagesize='10' titlelen='50'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
      </li>
    {/dede:list}
  </ul>
  <div class="dede_pages">
    <ul>{dede:pagebreak/}</ul>
  </div>
{/dede:channelartlist}

代码解析:

dede list 调用副栏目
(图片来源网络,侵删)
  1. {dede:channelartlist typeid='1' ...}

    • typeid='1':这里的 1 是你副栏目本身的ID,你需要将 1 替换成你实际的副栏目ID。channelartlist 会循环这个栏目本身。
    • addfields='typename,seotitle':可选参数,用于获取栏目的附加字段,如栏目名称、SEO标题等。
  2. {dede:field name='typename'/}

    • channelartlist 循环内部,用于获取当前循环的栏目的名称,也就是你的副栏目名称。
  3. {dede:list ...}

    • 这是文章列表标签,它必须放在 channelartlist 标签的内部。
    • 它会自动列出 channelartlist 所指定的栏目(也就是你的副栏目)下的所有文章。

使用 arclist 标签(最常用、最简单)

如果你的需求只是简单地在一个位置(比如首页、其他栏目页)列出某个副栏目下的文章,arclist 标签是最佳选择。

适用场景:页或任何非列表页中,调用指定副栏目下的文章。

代码示例:

<h3>相关文章(来自副栏目)</h3>
<ul>
  {dede:arclist typeid='1' row='8' titlelen='30'}
    <li>
      <a href="[field:arcurl/]">[field:title/]</a>
      <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
  {dede:arclist}
</ul>

代码解析:

  • {dede:arclist typeid='1' ...}
    • typeid='1':这是最关键的参数!这里的 1 就是你要调用的副栏目的ID,系统会自动找到这个ID下的所有文章。
    • row='8':表示调用8篇文章。
    • titlelen='30'最多显示30个字符。

页调用当前文章的副栏目及其文章

这个场景比较特殊,你想在文章详情页(article_article.htm)中,显示这篇文章所属的“副栏目”,并列出该副栏目下的其他文章。

代码示例:

{dede:field name='typeid' runphp='yes'}
  $dsql = new DedeSql(false);
  // 获取当前文章的副栏目ID,假设副栏目存储在附加表的 `fu` 字段
  $typeid = @me;
  $row = $dsql->GetOne("SELECT fu FROM `dede_archives` WHERE id='$typeid'");
  $fu_id = $row['fu'];
  // 如果存在副栏目
  if($fu_id){
    // 获取副栏目名称
    $type_row = $dsql->GetOne("SELECT typename FROM `dede_arctype` WHERE id='$fu_id'");
    $typename = $type_row['typename'];
    // 输出副栏目标题和链接
    @me = "<h4>相关栏目:<a href='/plus/list.php?tid=".$fu_id."'>".$typename."</a></h4>";
    // 调用副栏目下的文章列表(排除当前文章)
    $arc_id = $GLOBALS['arcid'];
    $list = "";
    $dsql2 = new DedeSql(false);
    $dsql2->SetQuery("SELECT id,title FROM `dede_archives` WHERE typeid='$fu_id' AND id!='$arc_id' ORDER BY pubdate DESC LIMIT 5");
    $dsql2->Execute('a');
    while($row2 = $dsql2->GetArray('a')){
      $list .= "<li><a href='/plus/view.php?aid=".$row2['id']."'>".$row2['title']."</a></li>";
    }
    @me .= "<ul>".$list."</ul>";
  }else{
    @me = ""; // 如果没有副栏目,则不显示任何内容
  }
{/dede:field}

代码解析:

  1. {dede:field name='typeid' runphp='yes'}

    • 这段代码的核心是 runphp='yes',它允许在模板中直接执行PHP代码。
    • @me 在这里代表当前字段的值,即当前文章的栏目ID。
  2. 查询副栏目ID:

    • 代码首先查询 dede_archives 表(文章主表),根据当前文章ID找到 fu 字段(如果你的副栏目字段名不是 fu,请修改)的值,也就是副栏目的ID。
  3. 获取副栏目信息并输出:

    • 如果找到了副栏目ID,就再查询 dede_arctype 表(栏目表)获取副栏目的名称。
    • 然后拼接HTML代码,输出副栏目的标题和链接。
  4. 调用副栏目下的文章:

    • 再次查询 dede_archives 表,找出属于该副栏目ID (typeid='$fu_id') 且不等于当前文章ID (id!='$arc_id') 的文章。
    • 使用 LIMIT 5 限制只显示5篇。
    • 循环输出文章列表。

重要前提:如何设置副栏目?

无论使用哪种方法,你首先必须在后台正确地为文章设置副栏目。

  1. 进入后台 -> 核心 -> 内容模型管理
  2. 选择你正在使用的文章模型(通常是“文章”),点击后面的“管理字段”。
  3. 找到名为“副栏目”的字段,确保它的状态是“启用”。
  4. 发布或编辑文章时,在“常规选项”中,你就可以在“副栏目”的下拉菜单中选择一个或多个副栏目了。

总结与选择建议

方法 适用场景 优点 缺点
channelartlist 副栏目列表页 结构清晰,逻辑严谨,符合织梦模板规范 需要为副栏目创建独立的列表模板
arclist 任意页面(首页、内容页等) 简单、快捷、灵活 只能调用文章,不能直接获取副栏目本身的信息(如名称)
runphp 页调用关联信息 功能强大,可定制性极高 代码较复杂,需要懂PHP,对新手不友好

对于绝大多数情况,方法一和方法二已经足够解决你的问题,请根据你的具体页面位置选择合适的标签。

-- 展开阅读全文 --
头像
树上的织梦网如何拿下来
« 上一篇 01-05
织梦CMS用户名不存在怎么办?
下一篇 » 01-05

相关文章

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

目录[+]