dede 调用select字段

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文
  1. 在后台添加字段:首先需要在后台为你的内容模型(如文章、图集等)添加一个 select 类型的字段。
  2. 在前台模板中调用:使用 DedeCMS 的模板标签 {dede:field.字段名/} 来获取并显示该字段的值。
  3. (可选)处理选项值:如果需要显示选项的文本而不仅仅是值,或者进行其他判断,则需要使用更复杂的标签,如 arrayif

下面我将通过一个详细的例子,一步步为你讲解。

dede 调用select字段
(图片来源网络,侵删)

第一步:在后台添加 Select 字段

假设我们要在文章模型中添加一个“文章来源”字段,选项有“原创”、“转载”、“编译”。

  1. 登录 DedeCMS 后台
  2. 进入 [核心] -> [内容模型管理]
  3. 找到你正在使用的模型(通常是“文章”模型),点击后面的 [字段管理]
  4. 点击 [添加新字段]
  5. 在弹出的页面中填写字段信息:
    • 字段名称source (这是数据库里的字段名,建议用英文小写)
    • 字段别名文章来源 (这是后台显示的名称,可以用中文)
    • 字段类型选择框(select)
    • 字段值:这是最关键的一步,每一行写一个选项,格式为 选项值,选项显示文本
      original,原创
      reprint,转载
      translate,编译
    • 默认值original (可选,设置一个默认选中的项)
    • 其他信息:如是否必填、在列表页/内容页是否显示等,根据需要设置。
  6. 点击 [保存]

你去发布或修改一篇文章时,就会在编辑页看到“文章来源”这个下拉选择框了。


第二步:在前台模板中调用字段

假设你要在文章内容页(article_article.htm)显示这个“文章来源”字段。

DedeCMS 提供了最简单直接的调用方式:

dede 调用select字段
(图片来源网络,侵删)
<p>文章来源:{dede:field.source/}</p>

工作原理

  • {dede:field.source/} 会直接获取当前文章 source 字段的值。
  • 如果你在后台选择了“原创”,那么这里就会直接显示 original
  • 如果选择了“转载”,就会显示 reprint

缺点: 这种方式显示的是你在“字段值”中设置的选项值(如 original),而不是用户友好的选项文本(如“原创”),通常我们不希望直接显示 original,而是显示“原创”。


第三步:进阶调用 - 显示选项文本或进行判断

为了显示“原创”、“转载”这样的文本,或者根据不同来源显示不同的样式(比如原创文章加一个“原创”标签),我们需要使用更强大的标签。

使用 {dede:field.function} 进行自定义处理

这是最灵活、最推荐的方法,我们可以写一个简单的 PHP 函数来处理这个字段。

dede 调用select字段
(图片来源网络,侵删)
  1. 在模板文件中使用 function

    <p>文章来源:{dede:field.source function='GetSourceText(@me)'/}</p>
    • @me 是 DedeCMS 模板引擎的内置变量,代表当前标签的原始值(在这里就是 original, reprint 等)。
    • GetSourceText() 是我们自定义的一个函数名。
  2. 创建自定义函数文件

    • 找到你的 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] : '未知';
    }
  3. 刷新页面: 现在再访问文章页,你就会看到显示的是“原创”、“转载”这样的友好了文本,而不是 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 是最佳实践,因为它将数据和显示逻辑分离,代码更清晰、更易于管理。

-- 展开阅读全文 --
头像
dede qrcode.php如何实现二维码生成?
« 上一篇 01-05
2025计算机二级C语言真题难度如何?
下一篇 » 01-05

相关文章

取消
微信二维码
支付宝二维码

目录[+]