dede标签内如何用变量?

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

使用 PHP 全局变量(最常用)

这是最直接的方式,适用于在模板中直接使用 PHP 预定义的全局变量,如 $_GET, $_POST, $_SERVER, $GLOBALS 等。

dede 标签内如何用变量
(图片来源网络,侵删)

语法: 在 Dede 标签中使用 {dede:global name='变量名'/} 来获取。

示例:

  1. 获取当前页面的 URL 假设你想在页脚显示当前页面的完整地址。

    <footer>
        <p>当前页面地址: {dede:global name='server.REQUEST_URI'/}</p>
    </footer>

    这里的 server.REQUEST_URI 对应的是 PHP 的 $_SERVER['REQUEST_URI']

    dede 标签内如何用变量
    (图片来源网络,侵删)
  2. 获取通过 GET 方式传递的参数 假设你的 URL 是 http://www.yoursite.com/list.php?cid=10&page=2,你想在页面上显示分类 ID cid 的值。

    <p>您正在查看分类ID为: {dede:global name='cid'/} 的内容。</p>

    这里的 cid 对应的是 PHP 的 $_GET['cid']

  3. 获取网站根目录 这是一个非常实用的例子,用于引用 CSS、JS、图片等静态资源。

    <link rel="stylesheet" href="{dede:global name='cfg_cmspath'/}/static/css/style.css">

    cfg_cmspath 是 DedeCMS 内置的全局变量,代表网站的安装根目录。

    dede 标签内如何用变量
    (图片来源网络,侵删)

使用自定义 PHP 变量(灵活且强大)

当你需要根据业务逻辑计算出一个变量,然后在模板中多处使用时,这种方法非常灵活,这需要在 PHP 文件中定义变量,然后在模板中获取。

步骤:

  1. 在 PHP 文件中定义变量 通常是在 includerequire 的 PHP 文件中,或者在 index.php 等入口文件中,最常见的是在 head.htm 文件中定义,因为 head.htm 会被大多数页面模板包含。

    templets/default/head.htm 文件顶部添加 PHP 代码:

    <?php
    // 定义一个变量,比如当前年份
    $current_year = date('Y');
    // 将变量注册到 DedeCMS 的全局变量中
    $GLOBALS['current_year'] = $current_year;
    ?>
  2. 在模板标签中调用 使用 {dede:global name='变量名'/} 来获取。

    示例:

    继续上面的例子,在 footer.htm 中使用这个变量来显示版权年份。

    <footer>
        <p>&copy; 2010 - {dede:global name='current_year'/} Your Company Name. All Rights Reserved.</p>
    </footer>

在循环标签中使用变量(如 {dede:list}, {dede:arclist})

这是最复杂但也最常见的需求,你想把一个 PHP 变量的值传递给 Dede 标签的某个属性,比如获取指定 ID 的文章列表。

核心方法:使用 runphp='yes'

runphp='yes' 属性允许你在标签内部执行 PHP 代码,并将代码的执行结果作为标签的属性值。

语法: {dede:标签名 属性名='{runphp}php 代码;@me{/runphp}'} ... {/dede:标签名}

关键点:

  • @me 是一个特殊的变量,代表当前标签在循环中的原始值。
  • runphp 代码块中,你需要手动用 echo 来输出最终要使用的值。
  • 如果要将 PHP 变量的值赋给 @me,语法是 @me = 你的变量值;

示例 1:获取指定 ID 的文章列表

假设你有一个变量 $article_ids = '5,10,15',你想显示这些 ID 的文章列表。

  1. 在 PHP 文件中定义变量 (例如在 index.phphead.htm):

    $article_ids = '5,10,15';
    $GLOBALS['special_ids'] = $article_ids;
  2. 在模板中使用 runphp:

    {dede:list titlelen='30' row='5' idlist='{dede:global name='special_ids' runphp='yes'}@me = $GLOBALS['special_ids'];{/dede:global}'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:list}

    解释:

    • idlistlist 标签的一个属性,用于指定文章 ID 列表。
    • 我们使用 {dede:global name='special_ids' runphp='yes'} 来获取我们定义的变量。
    • runphp 代码块中,@me 初始值是 global 标签获取到的原始值(即字符串 '5,10,15')。
    • @me = $GLOBALS['special_ids']; 这行代码确保了我们从全局变量中正确获取并赋值给 @me
    • 这个 @me 的值(即 '5,10,15')就被赋给了 idlist 属性。

示例 2:更复杂的逻辑判断

假设你想根据一个变量 $is_homepage 的值来决定是否显示某个模块。

  1. 在 PHP 文件中定义变量:

    $is_homepage = true; // 或 false
    $GLOBALS['is_homepage'] = $is_homepage;
  2. 在模板中使用 runphp 进行判断:

    {dede:global name='is_homepage' runphp='yes'}
        if(@me == true){
            @me = '<div>这是首页才有的内容!</div>';
        }else{
            @me = ''; // 非首页则不显示任何内容
        }
    {/dede:global}
    {dede:global.name}

    解释:

    • @me 初始值是 true (布尔值)。
    • if 判断成立,@me 被重新赋值为一段 HTML 字符串。
    • {dede:global.name} 会输出 @me 的最终值。

总结与最佳实践

场景 方法 语法示例 适用情况
简单全局变量 dede:global {dede:global name='cfg_cmspath'/} 获取系统配置、GET/POST 参数。
自定义变量 PHP 定义 + dede:global PHP: $GLOBALS['my_var'] = 'value';
模板: {dede:global name='my_var'/}
需要在多个模板中复用的业务逻辑变量。
标签属性传值 runphp='yes' idlist='{dede:global name='ids' runphp='yes'}@me=$GLOBALS['ids'];{/dede:global}' 将变量值作为 Dede 标签(如 list, arclist, channel)的属性。
标签内逻辑 field + functionrunphp [field:typelink function='str_replace("首页","",@me)'/] 对单个字段内容进行二次处理。

重要提示:

  • 开启 PHP 支持:要使用 runphp 功能,必须确保你的 DedeCMS 系统配置允许,检查后台 系统 -> 系统基本参数 -> 核心设置 中的 模板引擎禁用标签 选项,确保 php 没有被禁用。
  • 安全第一:在使用 runphp 时,要警惕 PHP 代码注入的风险,不要让用户输入直接进入 runphp 代码块中执行,始终对来自外部的数据进行过滤和验证。

通过以上方法,你就可以在 DedeCMS 模板中非常灵活地使用各种变量了。

-- 展开阅读全文 --
头像
织梦plus view是什么?功能与优势解析
« 上一篇 02-13
织梦如何整合phpwind?
下一篇 » 02-13
取消
微信二维码
支付宝二维码

目录[+]