- 在后台添加字段:首先需要在后台为你的内容模型(如文章、图集等)添加一个
select类型的字段。 - 在前台模板中调用:使用 DedeCMS 的模板标签
{dede:field.字段名/}来获取并显示该字段的值。 - (可选)处理选项值:如果需要显示选项的文本而不仅仅是值,或者进行其他判断,则需要使用更复杂的标签,如
array或if。
下面我将通过一个详细的例子,一步步为你讲解。

(图片来源网络,侵删)
第一步:在后台添加 Select 字段
假设我们要在文章模型中添加一个“文章来源”字段,选项有“原创”、“转载”、“编译”。
- 登录 DedeCMS 后台。
- 进入 [核心] -> [内容模型管理]。
- 找到你正在使用的模型(通常是“文章”模型),点击后面的 [字段管理]。
- 点击 [添加新字段]。
- 在弹出的页面中填写字段信息:
- 字段名称:
source(这是数据库里的字段名,建议用英文小写) - 字段别名:
文章来源(这是后台显示的名称,可以用中文) - 字段类型:选择框(select)
- 字段值:这是最关键的一步,每一行写一个选项,格式为
选项值,选项显示文本。original,原创 reprint,转载 translate,编译 - 默认值:
original(可选,设置一个默认选中的项) - 其他信息:如是否必填、在列表页/内容页是否显示等,根据需要设置。
- 字段名称:
- 点击 [保存]。
你去发布或修改一篇文章时,就会在编辑页看到“文章来源”这个下拉选择框了。
第二步:在前台模板中调用字段
假设你要在文章内容页(article_article.htm)显示这个“文章来源”字段。
DedeCMS 提供了最简单直接的调用方式:

(图片来源网络,侵删)
<p>文章来源:{dede:field.source/}</p>
工作原理:
{dede:field.source/}会直接获取当前文章source字段的值。- 如果你在后台选择了“原创”,那么这里就会直接显示
original。 - 如果选择了“转载”,就会显示
reprint。
缺点:
这种方式显示的是你在“字段值”中设置的选项值(如 original),而不是用户友好的选项文本(如“原创”),通常我们不希望直接显示 original,而是显示“原创”。
第三步:进阶调用 - 显示选项文本或进行判断
为了显示“原创”、“转载”这样的文本,或者根据不同来源显示不同的样式(比如原创文章加一个“原创”标签),我们需要使用更强大的标签。
使用 {dede:field.function} 进行自定义处理
这是最灵活、最推荐的方法,我们可以写一个简单的 PHP 函数来处理这个字段。

(图片来源网络,侵删)
-
在模板文件中使用
function:<p>文章来源:{dede:field.source function='GetSourceText(@me)'/}</p>@me是 DedeCMS 模板引擎的内置变量,代表当前标签的原始值(在这里就是original,reprint等)。GetSourceText()是我们自定义的一个函数名。
-
创建自定义函数文件:
- 找到你的 DedeCMS 根目录下的
include/extend.func.php文件,如果这个文件不存在,请自行创建。 - 在这个文件里添加以下 PHP 函数:
/** * 根据文章来源的值,返回对应的文本 * @param string $value 来源的值,如 'original', 'reprint' * @return string 来源的文本,如 '原创', '转载' */ function GetSourceText($value) { $sourceMap = array( 'original' => '原创', 'reprint' => '转载', 'translate' => '编译' ); // 如果找到了对应的值,返回文本,否则返回'未知' return isset($sourceMap[$value]) ? $sourceMap[$value] : '未知'; } - 找到你的 DedeCMS 根目录下的
-
刷新页面: 现在再访问文章页,你就会看到显示的是“原创”、“转载”这样的友好了文本,而不是
original。
使用 {dede:array} 标签进行判断
如果你不想修改 PHP 文件,也可以在模板文件内部使用 {dede:array} 标签来实现。
<p>文章来源:
<dede:array name='source_map'>
<dede:if condition="@me['key'] == 'original'">原创</dede:if>
<dede:if condition="@me['key'] == 'reprint'">转载</dede:if>
<dede:if condition="@me['key'] == 'translate'">编译</dede:if>
</dede:array>
</p>
- 这种方法略显冗长,逻辑不如
function清晰,适用于不想修改 PHP 文件的情况。
结合 if 标签实现不同样式
这是一个非常实用的场景,比如给原创文章打上一个特殊的标签。
<p>
{dede:field.source runphp='yes'}
if(@me == 'original') {
@me = "<span class='label label-primary'>原创</span>";
} else if(@me == 'reprint') {
@me = "<span class='label label-default'>转载</span>";
} else {
@me = "<span class='label label-info'>编译</span>";
}
{/dede:field.source}
</p>
runphp='yes'表示启用 PHP 代码执行。@me同样代表原始值。- 我们可以直接在这里拼接 HTML 代码,为不同来源的文本添加不同的 CSS 样式(如 Bootstrap 的
label类)。
| 需求场景 | 推荐的模板代码 | 说明 |
|---|---|---|
| 简单调用,显示选项值 | {dede:field.字段名/} |
直接获取数据库中存储的值(如 original)。 |
| 显示选项文本(最推荐) | {dede:field.字段名 function='MyFunction(@me)'/} |
在 extend.func.php 中写一个映射函数,灵活且易于维护。 |
| 在模板内进行判断 | {dede:array} ... {/dede:array} |
不需要修改PHP文件,但模板代码稍显复杂。 |
| 根据值显示不同样式 | {dede:field.字段名 runphp='yes'} ... {/dede:field.字段名} |
在模板内直接写PHP逻辑,生成带样式的HTML代码。 |
对于绝大多数情况,方法一(使用 extend.func.php) 是最佳实践,因为它将数据和显示逻辑分离,代码更清晰、更易于管理。
