必须通过SQL查询dede_arctype表或使用GetOne方法显式获取,且后台需启用字段、清空缓存;模板中用{dede:field.字段名/}前须确认字段已注册并勾选,PHP中调用GetList需传addfields参数。
PHP中读取DedeCMS栏目自定义字段的正确方式
直接调用
或
无法获取自定义字段,必须通过 SQL 查询
表或使用内置的
方法配合字段名。DedeCMS 的栏目扩展字段(如
、
、
等)默认不加载到模板变量中,需显式指定。
在模板中用 {dede:field.字段名/} 调用前必须确认字段已注册
DedeCMS 不会自动把所有字段注入模板变量。即使你在后台「栏目管理 → 添加新字段」里加了字段(比如
),也得手动在栏目模型中启用它,否则前台
输出为空。
进入后台 → 核心设置 → 栏目模型管理 → 编辑对应模型 → 勾选新增字段并保存
字段类型建议选「单行文本」或「多行文本」,避免用「附件」或「图片」类字段直接输出路径(需额外处理)
模板中字段名必须与数据库列名完全一致(区分大小写),例如数据库存为
,就不能写成
在PHP文件中用 $dsql->GetOne() 查询栏目扩展字段
在自定义PHP逻辑(如
或独立接口)中,不能依赖模板标签解析器,得直连数据库查
表。注意:表前缀可能不是
,要以实际配置为准。
是DedeCMS内置的表前缀占位符,比硬编码
更安全
不要用
或
手动连接——破坏框架DB封装,易出事务/编码问题
若字段含HTML或特殊字符,输出前应过
,尤其
字段
调用 getTopChannel() 或 GetParentList() 时自定义字段不会自动带出
这些函数返回的是基础栏目信息数组(
、
、
等),不包含扩展字段。想批量获取带自定义字段的栏目列表,必须重写SQL或用
配合
参数。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
在模板中用
才能加载指定字段
在PHP中调用
时,第5个参数传入字段字符串:
字段名之间用英文逗号分隔,不能有空格,否则解析失败
最常被忽略的一点:后台添加字段后,必须清空模板缓存(后台 → 系统 → 系统缓存 → 更新系统缓存),否则模板中仍读不到新字段。数据库字段存在 ≠ 模板可访问,中间隔着模型绑定和缓存两道关卡。
GetOneTypeGetTypeIDdede_arctypeGetOnecontentseotitlelitpicmy_phone{dede:field.my_phone/}my_contactmycontactlist.phpdede_arctypedede_$typeid = 5;
$sql = "SELECT my_phone, seotitle, content FROM `#@__arctype` WHERE id='$typeid'";
$row = $dsql->GetOne($sql);
if ($row) {
echo $row['my_phone']; // 直接取值
}#@__dede_mysql_queryPDOhtmlspecialchars()contentidtypenametypedirGetListaddfields{dede:channelartlist addfields='my_phone,seotitle' row='10'}GetListGetList(10, '', 'my_phone,seotitle', '', '', '', '', '', '', '')