dede arclist自定义字段怎么调用?

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

arclist 中调用自定义字段,主要有两种方法:

dede arclist 自定义字段
(图片来源网络,侵删)
  1. 直接调用(推荐):在 arclist 标签中使用 addfields='字段名1,字段名2'channelid='栏目ID' 属性,这是最直接、最高效的方式。
  2. SQL 查询调用:通过 innertext 结合 php 代码,自己编写 SQL 查询来获取并显示自定义字段,这种方式最灵活,但代码量稍多。

第一步:准备工作(非常重要)

在调用任何自定义字段之前,请确保你已经完成了以下设置,否则调用会失败。

  1. 添加自定义字段

    • 进入后台的「核心」-「内容模型管理」。
    • 选择你的内容模型(通常是“文章模型”),点击后面的“更改”或“管理字段”。
    • 在“字段管理”页面,点击“添加新字段”。
    • 字段名:这是你在代码中调用的唯一标识,建议使用英文,director(导演)、actor(演员)、price(价格)。
    • 字段提示:在后台添加内容时,这个文字会出现在输入框上方,请输入电影导演”。
    • 字段类型:根据你的需求选择,如“单行文本”、“多行文本”、“数字”、“图片”等。
    • 保存设置。
  2. 更新数据库结构

    • 添加完字段后,DedeCMS 会提示你“成功增加一个字段”,但此时数据表结构可能还未完全更新,为了确保万无一失,请手动执行一次“一键更新网站数据缓存”。
    • 进入后台的「系统」-「一键更新网站」-「更新数据库」。
  3. 中填写数据

    dede arclist 自定义字段
    (图片来源网络,侵删)
    • 发布一篇新文章,或者编辑一篇旧文章。
    • 你会看到刚才添加的自定义字段输入框,请填入一些测试数据。

第二步:在 arclist 中调用自定义字段

假设你已经添加了一个名为 myintro 的自定义字段(字段类型为“多行文本”),现在要在首页的列表中调用它。

直接调用(最常用、最推荐)

这是最简单直接的方法,通过 arclist 的两个属性即可实现。

标签结构:

{dede:arclist addfields='myintro' channelid='1' row='5'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>自定义内容:[field:myintro/]</p>
    </li>
{/dede:arclist}

关键属性解释:

dede arclist 自定义字段
(图片来源网络,侵删)
  • addfields='myintro'

    • 作用:告诉 arclist 标签,你需要额外从数据库中取出哪些自定义字段。
    • 格式:字段名之间用英文逗号 隔开。addfields='director,actor,price'
    • 注意:必须包含你想要显示的所有自定义字段名。
  • channelid='1'

    • 作用至关重要! 指定自定义字段所在的内容模型ID
    • 如何找到 ID
      • 进入「核心」-「内容模型管理」。
      • 将鼠标悬停在你使用的模型(如“文章模型”)上,浏览器状态栏或链接信息里会显示 id=1 或其他数字,这个数字就是 channelid
      • 对于文章模型,通常是 1;对于图集模型,通常是 2,以此类推。
    • channelid 错误或缺失addfields 将无法获取到数据,调用会显示为空。

完整示例:

假设我们有一个电影资讯栏目,模型ID为1,自定义了 director(导演)、release_date(上映日期)两个字段。

<h3>最新电影资讯</h3>
<ul>
    {dede:arclist 
        typeid='3' 
        row='8' 
        titlelen='30' 
        addfields='director,release_date' 
        channelid='1'
    }
    <li>
        <span class="title"><a href="[field:arcurl/]">[field:title/]</a></span>
        <span class="info">导演:[field:director/] | 上映:[field:release_date/]</span>
    </li>
    {/dede:arclist}
</ul>

通过 innertext 和 PHP 调用(更灵活)

当你的逻辑比较复杂,或者需要在循环内部进行判断时,可以使用这种方法。

标签结构:

{dede:arclist row='5'}
    [field:array runphp='yes']
        $id = @me['id']; // 获取当前文章的ID
        $query = "SELECT myintro FROM dede_addonarticle WHERE aid = $id"; // 查询自定义字段
        $row = $dsql->GetOne($query);
        @me = '<li><a href="'.@me['arcurl'].'">'.@me['title'].'</a>';
        if($row) {
            @me .= '<p>自定义内容:'.$row['myintro'].'</p>';
        }
        @me .= '</li>';
    [/field:array]
{/dede:arclist}

代码解释:

  1. {dede:arclist row='5'}:正常使用 arclist 循环。
  2. [field:array runphp='yes']:这是一个特殊用法,它会将当前文章的所有信息(包括ID、标题、URL等)以数组形式传递给 @me 变量,并允许执行PHP代码。
  3. $id = @me['id'];:从数组中获取当前文章的ID。
  4. $query = "SELECT myintro FROM dede_addonarticle WHERE aid = $id";
    • dede_addonarticle 是文章模型的自定义字段数据表,如果你的模型是图集,表名可能是 dede_addonimages,表名规则通常是 dede_addon + 模型表后缀
    • myintro 是你要查询的字段名。
    • aid 是文章ID。
  5. $row = $dsql->GetOne($query);:执行查询并获取结果。
  6. @me = '...':重新构建 @me 的值,即最终要输出的HTML内容,你可以在这里拼接任何HTML和PHP变量。
  7. if($row):判断查询结果是否存在,避免在没有数据时出错。
  8. @me .= '</li>';:拼接HTML的结束标签。

常见问题与注意事项 (FAQ)

  1. 为什么我调用自定义字段显示为空?

    • 最常见原因:忘记设置 channelid 属性,或者 channelid 设置错误。
    • 检查:确保 addfields 中填写的字段名与后台添加的字段名完全一致(区分大小写)。
    • 检查:是否已经执行了“更新数据库”操作。
    • 检查:在后台发布内容时,是否已经为该字段填写了数据。
  2. 如何调用图片类型的自定义字段?

    • 和文本字段一样,使用 addfieldschannelid
    • 调用时使用 [field:imgurl/] 标签,它会自动输出图片的完整路径。
    • 示例:假设自定义字段名为 movie_poster
      {dede:arclist addfields='movie_poster' channelid='1' row='3'}
          <div class="movie-item">
              <img src="[field:movie_poster/]" alt="[field:title/]">
              <a href="[field:arcurl/]">[field:title/]</a>
          </div>
      {/dede:arclist}
  3. 如何调用多行文本字段并截取字数?

    • arclistinfolen 属性通常只用于文章摘要(description),对于自定义字段,你需要使用 cn_substr 函数。
    • 示例:截取 myintro 字段的前50个字符。
      [field:myintro function='cn_substr(@me, 50)'/]
方法 优点 缺点 适用场景
直接调用 代码简洁、效率高、易于维护 灵活性相对较低 绝大多数常规的自定义字段调用需求
PHP调用 灵活性极高、可以进行复杂逻辑判断和循环 代码量多、可读性稍差、对PHP有一定要求 需要根据字段值进行条件判断、需要循环处理自定义字段内容等复杂场景

对于绝大多数用户来说,强烈推荐使用方法一(直接调用),它既简单又高效,只有在方法一无法满足你的特殊需求时,才考虑使用方法二。

-- 展开阅读全文 --
头像
织梦dedecms tag静态化怎么做?
« 上一篇 2025-12-13
苏小红C语言实验题答案哪里有?
下一篇 » 2025-12-13

相关文章

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

目录[+]