跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

PHP怎样获取栏目自定义字段_PHP取栏目扩展字段法【拓展】

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

相关文章