dede field系统标签内部如何正确输入内容?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 DEDE建站 正文

解决方案

中实现系统标签的效果,主要有以下三种方法,从推荐到备选排列:

dede field 内部输入系统标签
(图片来源网络,侵删)

使用“自定义字段” + “页面内容”(最推荐、最灵活)

这是最标准、最灵活、最符合DedeCMS设计思路的方法,它利用了DedeCMS内置的“页面内容”字段,这个字段天生就是为了存放复杂HTML和模板标签而设计的。

操作步骤:

  1. 添加自定义字段:

    • 登录DedeCMS后台,进入“核心” -> “内容模型管理”。
    • 点击你想要修改的内容模型(文章模型”)的“管理字段”。
    • 点击“添加新字段”。
    • 字段名:输入一个英文名,my_content
    • 字段别名:输入一个中文别名,我的自定义内容”。
    • 字段类型:选择“编辑器”(这是关键!)。
    • 其他选项(如是否为必填项)根据需要设置。
    • 保存。
  2. 在后台编辑内容:

    dede field 内部输入系统标签
    (图片来源网络,侵删)
    • 发布或编辑一篇该模型的文章。

    • 你会发现新添加的“我的自定义内容”字段是一个富文本编辑器。

    • 在这个编辑器里,你可以直接输入或粘贴DedeCMS的系统标签

      这里是一些固定文本。
      {dede:arclist row='5' titlelen='24'}
      - [field:title/]
      {/dede:arclist}
      这是更多内容。
  3. 在模板中调用:

    dede field 内部输入系统标签
    (图片来源网络,侵删)
    • 在你的文章模板文件(如 article_article.htm)中,像调用普通字段一样调用它。
    • 注意: 由于这个字段里包含了需要解析的标签,你必须使用 {dede:field} 标签来调用,并指定 function='Html2Text(@me)' 或类似的函数来确保内容被正确解析。

    模板调用代码示例:

    <article>
        <h1>{dede:field.title/}</h1>
        <!-- 调用并解析自定义内容字段 -->
        <div class="my-custom-content">
            {dede:field name='my_content' function='Html2Text(@me)'/}
        </div>
        <!-- 文章的正文内容(原始的body字段) -->
        <div class="article-body">
            {dede:field.body/}
        </div>
    </article>

优点:

  • 功能强大: 可以使用所有DedeCMS支持的标签。
  • 后台可视化: 在后台编辑时就能看到效果(如果预览功能支持)。
  • 维护方便: 内容和结构分离,编辑者可以在后台直接修改。

使用“function”对字段值进行二次开发(适用于高级用户)

如果你不能或不想添加新字段,需要对一个已经存在的文本型字段(如 keywords 或一个普通文本字段)中的内容进行解析,可以使用PHP函数。

原理: 在模板中调用字段时,通过 function 属性调用一个自定义的PHP函数,这个函数会获取字段的原始值,在其中查找并替换掉DedeCMS标签,然后将处理后的HTML代码返回。

操作步骤:

  1. 编写PHP函数:include/extend.func.php 文件中(如果没有就创建一个)添加如下函数:

    /**
     * 解析字段内容中的DedeCMS标签
     * @param string $content 包含待解析标签的字符串
     * @return string 解析后的HTML字符串
     */
    function parse_field_tags($content) {
        // 如果内容为空,则直接返回
        if (empty($content)) {
            return $content;
        }
        // 创建一个临时的、唯一的模板文件名
        $tmpfile = dirname(__FILE__) . '/tmp_' . md5($content) . '.htm';
        // 将内容写入临时文件
        file_put_contents($tmpfile, $content);
        // 使用DedeCMS的库来解析这个临时文件
        // 这里需要引入DedeCMS的核心解析类
        require_once(DEDEINC . '/arc.partview.class.php');
        $pv = new PartView();
        $html = $pv->GetTemplet($tmpfile);
        // 删除临时文件
        @unlink($tmpfile);
        return $html;
    }
  2. 在模板中调用: 假设你有一个名为 my_field 的字段,里面写入了 {dede:arclist row='3'}...{/dede:arclist}

    在模板文件中,这样调用:

    <div class="dynamic-content">
        {dede:field name='my_field' function='parse_field_tags(@me)'/}
    </div>

优点:

  • 不需要修改数据库结构。
  • 非常灵活,可以处理任何字段。

缺点:

  • 性能开销大: 每次调用都需要创建临时文件、加载解析类,对服务器性能有一定影响,不适合在列表页等高频调用的地方使用。
  • 实现复杂: 需要一定的PHP编程能力。

使用“灵动标签” {dede:php}(不推荐,有风险)

这是一种“绕过”机制的方法,直接在模板中执行PHP代码,虽然可以实现,但极度不推荐,因为它破坏了模板与逻辑分离的原则,带来安全风险。

操作步骤:

  1. 确保你的模板开启了PHP支持: 在后台“系统” -> “系统基本参数” -> “核心设置”中,找到“模板引擎类型”,选择“php”。

  2. 在模板中使用 {dede:php}

    <div class="risky-content">
        {dede:php}
            // 获取当前文章的 my_field 字段值
            $fieldValue = $this->Fields['my_field'];
            // 创建临时文件并解析(和方法二类似)
            $tmpfile = dirname(__FILE__) . '/tmp_risky_' . md5($fieldValue) . '.htm';
            file_put_contents($tmpfile, $fieldValue);
            require_once(DEDEINC . '/arc.partview.class.php');
            $pv = new PartView();
            $html = $pv->GetTemplet($tmpfile);
            @unlink($tmpfile);
            // 输出结果
            echo $html;
        {/dede:php}
    </div>

缺点:

  • 安全风险高: 任何能编辑模板的人都能执行任意PHP代码,极易被黑客利用进行getshell攻击。
  • 维护困难: PHP代码混在HTML中,可读性差,不易维护。
  • 性能差: 同样存在性能问题。

总结与对比

方法 优点 缺点 推荐场景
自定义字段(编辑器) 功能强大、灵活、安全、符合规范、后台可视化 需要添加新字段,占用数据库空间 绝大多数情况下的首选,特别是需要管理员在后台编辑复杂内容时。
function二次开发 无需修改数据库,非常灵活 实现复杂,性能开销大 适用于对现有字段进行特殊处理,且调用频率不高的场景。
灵动标签{dede:php} 灵活性“极高” 安全风险极高、破坏模板结构、难维护、性能差 强烈不推荐,仅在紧急修复或个人测试项目等极端情况下使用。

最终建议: 除非有特殊且无法克服的困难,否则请优先选择方法一,这是DedeCMS官方设计的、最稳定、最安全、最强大的解决方案。

-- 展开阅读全文 --
头像
dede 没有fckeditor文件夹
« 上一篇 12-05
dede模板index.htm改名后如何生效?
下一篇 » 12-05

相关文章

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