自定义字段概述
织梦CMS的自定义字段功能允许开发者在不修改核心代码的情况下,为栏目和内容模型添加额外的数据字段。这在需要扩展栏目功能时非常有用,例如为栏目添加图标、背景图、自定义CSS类名、SEO扩展信息等。
一、栏目自定义字段的类型
织梦CMS支持两类自定义字段:
- 内容模型自定义字段:作用于使用该模型的栏目的文章,通过
核心 > 频道模型管理 > 字段管理添加 - 栏目附加字段:作用于栏目本身,存储在
dede_arctype附加表中
二、添加内容模型自定义字段
- 进入
核心 > 频道模型管理 - 选择目标模型(如"普通文章"),点击"字段管理"
- 点击"添加新字段",配置以下参数:
字段名称: product_price 数据类型: 数字类型 表单类型: 文本输入框 显示名称: 产品价格 字段说明: 输入产品的市场价 是否必填: 否 默认值: 0 列表显示: 是(在后台文章列表中显示)
三、常用字段数据类型
| 类型 | 数据库类型 | 说明 |
|---|---|---|
| 单行文本 | varchar(250) | 适用于简短文本 |
| 多行文本 | text | 适用于描述、备注等长文本 |
| HTML文本 | mediumtext | 富文本编辑器输入 |
| 数字 | int(11) | 整数数值 |
| 小数 | decimal(10,2) | 精确小数 |
| 单选框 | enum | 多个选项选一个 |
| 复选框 | varchar(250) | 多选 |
| 下拉框 | varchar(250) | 下拉选择 |
| 图片 | varchar(200) | 带上传按钮 |
| 联动类型 | int/varchar | 级联菜单 |
四、在模板中调用自定义字段
添加自定义字段后,在模板中通过 [field:字段名/] 调用:
<!-- arclist标签中调用自定义字段 -->
{dede:arclist typeid='3' row='10' addfields='product_price,product_spec' channelid='1'}
<div class="product-item">
<h3><a href="[field:arcurl/]">[field:title/]</a></h3>
<p class="price">¥[field:product_price/]</p>
<p class="spec">规格:[field:product_spec/]</p>
</div>
{/dede:arclist}
<!-- 文章内容页调用自定义字段 -->
<div class="product-meta">
<span>价格:{dede:field.product_price/}元</span>
<span>型号:{dede:field.product_model/}</span>
</div>
重要:在arclist/list等列表标签中调用自定义字段时,必须使用
addfields='字段名1,字段名2' 参数声明要加载的额外字段,否则标签不会查询这些字段的数据。五、栏目级别的自定义字段
织梦CMS默认的栏目表结构有限,如需扩展栏目字段,可通过以下方式:
方式一:修改模型配置文件
找到 include/typeunit.class.php 文件,为栏目添加附加表字段。
方式二:数据库直接添加
<!-- 为dede_arctype表添加自定义列 -->
ALTER TABLE dede_arctype ADD COLUMN icon_url VARCHAR(200) DEFAULT '';
ALTER TABLE dede_arctype ADD COLUMN bg_color VARCHAR(20) DEFAULT '#ffffff';
ALTER TABLE dede_arctype ADD COLUMN target_blank TINYINT(1) DEFAULT 0;
<!-- 在模板中调用(通过SQL标签) -->
{dede:sql sql="SELECT icon_url,bg_color FROM dede_arctype WHERE id=3"}
<img src="[field:icon_url/]" alt="">
{/dede:sql}
六、实战示例:为栏目添加SEO自定义描述
- 在频道模型管理中为"普通文章"模型添加字段
custom_seo_desc(多行文本) - 在发布文章时填写SEO自定义描述
- 在模板中调用:
<meta name="description" content="{dede:field.custom_seo_desc/}">
<!-- 如果未填写则使用默认描述 -->
{dede:field name='custom_seo_desc' runphp='yes'}
if(empty(@me)) @me=$GLOBALS['cfg_description'];
{/dede:field}
最佳实践:自定义字段命名建议使用英文下划线命名(如
product_price),避免使用中文字段名导致编码问题。添加字段前建议先备份数据库。