织梦自定义字段模板调用代码

addfields channelid 内容模型

自定义字段是什么

织梦默认文章模型只有标题、作者、正文等字段。但产品页需要「价格」「规格」「库存」,下载页需要「文件大小」「下载链接」等扩展字段,这些都要通过「内容模型管理」添加自定义字段来实现。

第一步:添加自定义字段

  1. 后台 → 核心 → 频道模型 → 内容模型管理。
  2. 选要扩展的模型(如「普通文章」),点「字段管理」。
  3. 点「添加新字段」,填写:
字段名称:price       (只能英文+下划线)
字段提示:商品价格
字段类型:单行文本
默认值:0
最大长度:50
数据类型:单行文本 (varchar)
  • 保存后,发布文章时表单中就会出现「商品价格」输入框。
  • 第二步:内容页调用自定义字段

    article_*.htm 模板中,自定义字段通过 {dede:field.字段名/} 调用:

    <article>
      <h1>{dede:field.title/}</h1>
      <p class="price">价格:¥{dede:field.price/}</p>
      <p>规格:{dede:field.spec/}</p>
      <div>{dede:field.body/}</div>
    </article>

    第三步:列表页/首页 arclist 调用自定义字段

    这是关键步骤。{dede:arclist} 默认不输出自定义字段,必须用 addfieldschannelid 两个参数:

    {dede:arclist typeid='1' row='10'
        addfields='price,spec,stock'
        channelid='1'}
      <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="price">¥[field:price/]</span>
        <span>库存:[field:stock/]</span>
      </li>
    {/dede:arclist}

    参数说明:

    注意:channelid 写错会导致 addfields 完全失效,这是 80% 自定义字段调不出来的原因。可在「内容模型管理」列表查看模型 ID。

    获取内容模型ID的方法

    后台 → 核心 → 频道模型 → 内容模型管理,列表中「ID」列即为 channelid。常见对照:

    ID=1  普通文章
    ID=2  图片集
    ID=3  软件
    ID=-1  自定义模型
    ID=6  商品(需安装扩展)

    使用 function 处理字段值

    字段值需要格式化时,用 function 参数:

    [field:price function="sprintf('¥%.2f', @me)"/]
    [field:pubdate function="MyDate('Y-m-d', @me)"/]
    [field:description function="cn_substr(@me, 100)"/]

    多选字段与图片字段调用

    多选字段(如 checkbox)返回的是逗号分隔字符串,需 explode 处理:

    [field:colors runphp='yes']
    $arr=explode(',', @me);
    @me=implode(' / ', $arr);
    [/field:colors]

    图片字段返回的是 {dede:img text='' width='800' height='600'}地址{/dede:img} 格式,需要解析:

    [field:banner function="GetImgUrl(@me)"/]
    
    // extend.func.php 中添加
    function GetImgUrl($imgstr){
        preg_match("/\}(.*?)\{/",$imgstr,$m);
        return $m[1] ?? '';
    }

    常见问题

    addfields 调不出来

    1) channelid 错误;2) 字段名拼写错误;3) 字段没有发布到对应模型;4) 缓存未清。

    列表页输出原文 [field:price/]

    说明 arclist 没识别该字段,多半是 channelid 缺失。

    内容页 {dede:field.price/} 不显示

    检查文章是否真的填写了该字段值;查看数据库 dede_addonarticle 表对应记录。

    行动建议

    建站初期就把所有自定义字段规划好,命名规范统一(如 pro_ 前缀代表产品),避免后期重复修改。把字段清单整理成一份文档,列明字段名、类型、所在模型、用途,便于团队协作和后续扩展。自定义字段用得好,可以让织梦从「博客系统」变身「轻量 CMS」,覆盖大部分企业站、产品站需求。