dede列表页如何调用文章自定义字段?

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

要实现调用自定义字段,你需要修改模板文件,并根据你的DedeCMS版本(5.7还是更早的)选择合适的方法。强烈建议在修改前备份你的模板文件!

dede列表页调用文章自定义字段
(图片来源网络,侵删)

下面我将为你详细介绍两种最主流的方法:


使用 {dede:list} 标签的底层字段功能(推荐,适用于DedeCMS 5.7及以后版本)

这是最常用也是最推荐的方法,因为它安全、高效,且符合DedeCMS的设计规范。

核心思路:

{dede:list} 标签本身支持一个 function 属性,可以对字段进行二次处理,我们可以利用这个属性来调用自定义字段。

详细步骤:

第1步:确保后台已添加并填写自定义字段

dede列表页调用文章自定义字段
(图片来源网络,侵删)
  1. 登录DedeCMS后台。
  2. 进入【核心】 -> 【内容模型管理】,选择你文章所在的模型(普通文章”)。
  3. 点击【字段管理】,添加你的自定义字段,我们添加一个名为 zuozhe(作者)的文本字段。
  4. 发布或编辑文章时,确保在自定义字段 zuozhe 中填写了内容。

第2步:修改列表页模板文件

  1. 找到你的列表页模板文件,通常位于 /templets/default/ 目录下,文件名可能是 list_article.htm 或你自定义的模板文件。

  2. 用代码编辑器(如VS Code, Sublime Text, Dreamweaver)打开这个文件。

  3. 找到 {dede:list} 循环标签。

    dede列表页调用文章自定义字段
    (图片来源网络,侵删)
  4. 在循环内部,使用以下语法来调用你的自定义字段:

    {dede:list}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
            <!-- 以下是调用自定义字段的方法 -->
            <p>作者:[field:zuozhe/]</p>
        </li>
    {/dede:list}

第3步:使用 function 属性进行格式化(非常重要)

如果你的自定义字段是特殊格式,比如多行文本(textarea)或者需要截取,就必须使用 function 属性。

示例1:调用文本/数字类型字段(如 zuozhe

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 直接调用 -->
        <p>作者:[field:zuozhe/]</p>
    </li>
{/dede:list}

示例2:调用多行文本(textarea)字段(如 jianjie - 简介)

多行文本默认输出会带换行符,我们需要在模板里用 str_replace 函数处理掉。

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用多行文本字段,并替换掉换行符 -->
        <p>简介:[field:jianjie function='str_replace("\r\n", "", @me)'/]</p>
    </li>
{/dede:list}

示例3:调用并截取字段内容(如 neirong - 内容)

如果字段是文章内容,你只想在列表页显示前100个字符,可以使用 cn_substr 函数。

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用内容字段并截取前100个字符 -->
        <p>[field:neirong function='cn_substr(@me, 100)'/]...</p>
    </li>
{/dede:list}

示例4:调用并格式化时间字段(如 shijian - 时间)

如果你的自定义字段是一个时间戳格式的数字,你可以像系统自带的 pubdate 一样格式化它。

{dede:list}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用自定义时间字段并格式化为 Y-m-d -->
        <p>活动时间:[field:shijian function="MyDate('Y-m-d', @me)"/]</p>
    </li>
{/dede:list}

使用 {dedarclist} 标签(适用于所有版本,包括DedeCMS 5.6及更早版本)

如果你的 {dede:list} 标签无法正常工作(例如某些修改过的版本),或者你使用的是旧版DedeCMS,可以使用 {dedarclist}

核心思路:

{dedarclist} 是一个更底层的列表标签,它通过 innertext 参数来定义列表项的模板,灵活性更高。

详细步骤:

第1步:备份模板文件

同上,确保你已经备份了列表页模板。

第2步:在模板中替换或添加 {dedarclist}

将原来的 {dede:list} ... {/dede:list} 部分替换为以下代码:

{dede:arclist typeid='' row='10' titlelen='50' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
        <!-- 以下是调用自定义字段的方法 -->
        <p>作者:[field:zuozhe/]</p>
    </li>
{/dede:arclist}

参数说明:

  • typeid='':指定栏目ID,留空表示所有栏目。
  • row='10':获取10条记录,len='50'`:标题长度。
  • orderby='pubdate':按发布时间排序。

第3步:调用自定义字段

{dede:arclist} 调用自定义字段的方法和 {dede:list} 的底层方法完全一样,直接使用 [field:自定义字段名/] 即可,同样支持 function 属性进行格式化。

{dede:arclist typeid='' row='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <!-- 调用多行文本并处理换行 -->
        <p>简介:[field:jianjie function='str_replace("\r\n", "", @me)'/]</p>
        <!-- 调用内容并截取 -->
        <p>[field:neirong function='cn_substr(@me, 100)'/]...</p>
    </li>
{/dede:arclist}

常见问题与解决方案 (FAQ)

Q1: 为什么我调用自定义字段后,前台显示为空? A1: 请按以下顺序排查:

  1. 后台检查:确认字段模型中已添加该自定义字段,并且在文章编辑页填写了内容。
  2. 数据库检查:进入数据库,检查 dede_archives 表和 dede_addonarticle(或其他对应附加表)表中,该字段的值是否已成功保存。
  3. 模板检查:确认字段名拼写完全正确,区分大小写。
  4. 缓存问题:在后台点击【生成】 -> 【更新主页HTML】和【更新栏目HTML】,清除缓存。

Q2: 为什么我的自定义字段内容里包含HTML标签,但前台显示的是源码而不是解析后的效果? A2: 因为DedeCMS出于安全考虑,默认不对列表页调用的字段内容进行HTML解析,如果你需要解析,可以在 function 中使用 htmlspecialchars_decode 函数。

<!-- 假设字段名是 `content`,里面包含 <p> 标签 -->
<p>[field:content function='htmlspecialchars_decode(@me)'/]</p>

Q3: {dede:list}{dede:arclist} 有什么区别? A3:

  • {dede:list}:主要用于列表页,功能相对固定,底层字段调用更方便,性能较好。
  • {dede:arclist}:功能更强大、更灵活,可以在任何地方(包括首页、封面页)调用任意栏目的文章列表,但语法稍显复杂。
方法 适用场景 优点 缺点
{dede:list} 底层字段 DedeCMS 5.7+ 列表页 推荐,语法简洁,性能好 旧版不支持
{dede:arclist} 所有版本,任意页面 灵活强大,功能全面 语法稍复杂,参数多

对于绝大多数情况,方法一 是你的首选,如果遇到问题,再尝试 方法二,希望这个详细的教程能帮到你!

-- 展开阅读全文 --
头像
dede调用多张图片为何不显示?
« 上一篇 2025-12-21
Shell与C/C语言的核心差异与应用场景是什么?
下一篇 » 2025-12-21
取消
微信二维码
支付宝二维码