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

2次阅读

必须通过sql查询dede_arctype表或使用getone方法显式获取,且后台需启用字段、清空缓存;模板中用{dede:field.字段名/}前须确认字段已注册并勾选,php中调用getlist需传addfields参数。

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

PHP中读取DEDECMS栏目自定义字段的正确方式

直接调用 GetOneTypeGetTypeID 无法获取自定义字段,必须通过 SQL 查询 dede_arctype 表或使用内置的 GetOne 方法配合字段名。DedeCMS 的栏目扩展字段(如 contentseotitlelitpic 等)默认不加载到模板变量中,需显式指定。

在模板中用 {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_querypdo 手动连接——破坏框架DB封装,易出事务/编码问题
  • 若字段含HTML或特殊字符,输出前应过 htmlspecialchars(),尤其 content 字段

调用 getTopChannel() 或 GetParentList() 时自定义字段不会自动带出

这些函数返回的是基础栏目信息数组(idtypenametypedir 等),不包含扩展字段。想批量获取带自定义字段的栏目列表,必须重写SQL或用 GetList 配合 addfields 参数。

立即学习PHP免费学习笔记(深入)”;

  • 在模板中用 {dede:channelartlist addfields='my_phone,seotitle' row='10'} 才能加载指定字段
  • 在PHP中调用 GetList 时,第5个参数传入字段字符串GetList(10, '', 'my_phone,seotitle', '', '', '', '', '', '', '')
  • 字段名之间用英文逗号分隔,不能有空格,否则解析失败

最常被忽略的一点:后台添加字段后,必须清空模板缓存(后台 → 系统 → 系统缓存 → 更新系统缓存),否则模板中仍读不到新字段。数据库字段存在 ≠ 模板可访问,中间隔着模型绑定和缓存两道关卡。

text=ZqhQzanResources