Products
96SEO 2025-09-17 10:46 3
DEDECMS作为国内广泛使用的内容管理系统,因其灵活的模型自定义功能深受开发者喜爱。只是 在实际开发中,许多用户在调用自定义模型字段时遇到了诸多问题,比方说自定义字段无法正确显示、中文乱码或标签调用无效等。本文将基于DEDE 5.7版本,通过详尽步骤和代码示例,手把手教你解决自定义模型字段读取难题。
在深入解决方案之前,我们需要先了解以下几个关键点:
channelid
属性。{dede:arclist}用于列表页调取文章数据,但需指定对应内容模型ID。而{dede:list}则相对简单,可直接调取当前栏目下数据,自定义字段支持更好。
dede在处理type为"text"类型的自定义字段时会通过HtmlReplace
方法清理HTML标记。这虽然保证了平安性,但部分PHP版本下会导致中文乱码或字符丢失。
进入后台,选择你的目标内容模型,点击“管理附加表”或“管理附加字段”,确认需要调用的自定义字段已经创建并且启用“可用作列表附加字段”。比方说我们添加了两个新字段price、sales。如下截图示意:
*注:如果未勾选“使该字段可以在列表页模板中获得”, 前端模板无法直接调用该值*
打开数据库,确认新建表中的数据列是否存在以及插入的数据格式是否正确。以price为例, 可以施行:
SELECT id, title, price FROM dede_addonarticle WHERE price IS NOT NULL LIMIT 10;
*若查询后来啊为空或者出现乱码,请检查数据库字符集及导入方式*
dede默认情况下arclist只查询核心普通文章,若你使用的是独立模型,需要显式指定channelid='6'
。一边通过addfields='price,sales'
来
查询这些额外的自定义列。示比方说下:
{dede:arclist channelid='6' addfields='price,sales' row='10'}
价格:
销量:
{/dede:arclist}
*注意addfields中的名称必须与后台添加的附加表中列名一致*
dede核心文件 /include/channelunit.class.php
, 在方法MakeField中, 有针对不同类型数据进行HTML过滤处理,如type=text调用HtmlReplace。此处可能造成中文解析异常, 我们可以适当注释或修改处理逻辑:
// 找到 MakeField 函数中的相关代码
if {
// $fvalue = HtmlReplace; // 注释掉此行避免中文被过滤
}
**
/templets/album_add.htm 里追加以下代码,让后台新增输入框正常显示并提交:
以上5步操作完成后即可实现完美读取并展示独立内容模型中的所有自定义字段,无论是文本还是联动类型,都能稳定输出且支持中文显示。
现象描述 | {dede:arclist} 标签内无法调出某些或全部自定义字段值。 |
---|---|
排查重点 | - 确认 arclist 中 channelid 是否正确设置为对应内容模型ID - 确认 addfields 是否包含所有需要调用的列名 - 确认后台该型号是否开启了“使该栏位可以在列表底层模板获得”选项 - 查看数据库对应记录是否存在有效数据 - 查看模板语法书写是否准确无误, 包括闭合标记等 |
修正建议 | - 获取准确model ID - 补充完整 addfields 字段 - 检查数据库与后台一致性 - 尝试先用简单list标签验证 |
Demand feedback