在dedecms(织梦)系统中,标签内使用变量是实现动态内容调用的重要方式,尤其在自定义模板开发中非常常见,dede标签支持通过PHP变量、系统变量、自定义变量等多种形式嵌入,灵活运用可大幅提升模板的动态性和扩展性,以下从基础语法、变量类型、应用场景及注意事项等方面详细说明。

dede标签内使用变量的基础语法
dede标签内使用变量主要通过{dede:var name='变量名'}或直接在标签属性中嵌入变量值实现,核心在于理解变量作用域和解析顺序:dede模板在解析时,会先执行PHP代码获取变量值,再将变量传递给标签引擎进行二次处理,在列表页调用自定义变量时,需确保变量在标签解析前已定义。
直接在标签属性中使用变量
若变量为简单字符串或数字,可直接在标签属性中通过{$变量名}调用。
{dede:arclist titlelen={$titlelen} typeid={$typeid}}
其中$titlelen和$typeid需在PHP代码中提前定义,如:
<?php $titlelen = 30; $typeid = 5; ?>
使用{dede:var}标签定义变量
对于复杂变量或需要动态计算的值,可通过{dede:var}标签在模板中定义。

{dede:var name='myvar' value='这是一个自定义变量'}
{dede:arclist titlelen={dede:var name='myvar'/}}
但需注意,{dede:var}定义的变量仅在当前标签块内有效,跨标签使用需结合全局变量。
常见变量类型及应用场景
系统全局变量
dedecms预置了大量全局变量,可直接在标签中使用。
{$cfg_cmspath}:站点根目录{$typename}:当前栏目名称{$aid}:文章ID(仅在内容页有效)
示例:在列表页调用当前栏目ID
{dede:channel type='self' typeid={$typeid}}
<a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}
自定义PHP变量
在模板头部通过PHP代码定义变量,供后续标签调用。

<?php
$keyword = request('keyword', ''); // 获取搜索关键词
$limit = 10; // 每页显示条数
?>
{dede:search titlelen={dede:var name='limit'/} keyword={$keyword}}
循环中的临时变量
在{dede:list}或{dede:arclist}等循环标签内,可通过[field:变量名/]调用当前记录的变量。
{dede:arclist}
<li>标题:[field:title/] | ID:[field:id/]</li>
{/dede:arclist}
变量使用的注意事项
- 变量定义顺序:变量必须在标签解析前定义,否则会报错。
{dede:arclist typeid={$typeid}}需确保$typeid已在PHP代码中声明。 - 变量类型转换:dede标签对变量类型敏感,数字型变量需避免引号包裹,如
typeid={$typeid}而非typeid='{$typeid}'(当$typeid为数字时)。 - 安全过滤:用户输入的变量(如搜索关键词)需通过
htmlspecialchars等函数过滤,防止XSS攻击。$keyword = htmlspecialchars(request('keyword', ''));
变量应用场景示例
以下通过表格对比不同场景下的变量使用方法:
| 场景 | 需求 | 代码示例 |
|---|---|---|
| 动态调用栏目ID | 根据URL参数显示指定栏目内容 | php<br><?php $typeid = isset($_GET['tid']) ? intval($_GET['tid']) : 1; ?><br>{dede:channel typeid={$typeid}} |
| 自定义列表长度 | 根据用户选择调整每页显示数 | html<br><select id="limit"><br><option value="5">5条</option><br><option value="10">10条</option><br></select><br><script>document.getElementById('limit').value={$limit};</script> |
| 条件判断输出 | 根据变量值显示不同内容 | html<br>{dede:if $flag == '1'}<br><span class="hot">热门</span><br>{/dede:if} |
相关问答FAQs
Q1:dede标签内使用变量时,如何避免变量未定义导致的报错?
A:可通过PHP的isset()函数检查变量是否存在,或设置默认值。typeid={dede:var name='typeid' value='1'/},若$typeid未定义,则默认使用1。
Q2:在dede标签中如何调用PHP函数的返回值?
A:可通过{dede:php}标签嵌入PHP代码,将函数结果赋值给变量后再调用。
{dede:php}
$str = substr('Hello dedecms', 0, 5);
{/dede:php}
{dede:var name='str' value=$str/}
但需注意,{dede:php}标签需开启模板引擎的PHP解析功能(默认开启)。
