dede标签 加入变量

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

核心方法:使用 array 定义标签属性

DedeCMS的标签系统非常灵活,绝大多数标签的属性都可以通过一个PHP数组来动态赋值,这个数组就是 array

基本语法

{dede:标签名 属性1='值1' 属性2='值2' ...}
    ...标签内容...
{/dede:标签名}

当你需要使用变量时,只需要将 '值' 替换为 变量名 即可。

{dede:标签名 属性1=$变量名 属性2=$another_var ...}
    ...标签内容...
{/dede:标签名}

关键点:

  • 变量来源:这些 $变量名 通常来自PHP代码块,最常见的是在 {dede:getdata}{dede:loop} 循环中,从 $fields 数组里获取字段值。
  • 引号:当属性值是固定的字符串时,需要用单引号 包裹,当使用变量时,直接写 $变量名,不需要再加引号。

在列表页调用当前栏目的信息(最常用)

这是最经典的需求,比如在列表页的标题前加上“栏目名称:”。

假设你的栏目名称字段是 typename

模板代码示例 (list_article.htm):

<h2>当前栏目:{dede:field.typename/}</h2>
{dede:list pagesize='10'}
    <li>
        <!-- 这里调用当前文章的标题,标题前加上当前栏目的名称 -->
        <a href="[field:arcurl/]">
            {dede:field name='title'/}
        </a>
        <!-- 这里调用当前文章的发布时间,并格式化为 Y-m-d -->
        <span>[field:pubdate function='MyDate("Y-m-d",@me)'/]</span>
    </li>
{/dede:list}

代码解析:

  1. {dede:field.typename/}:这是获取当前栏目名称的标签,它本身就是一个变量。
  2. {dede:list}:这是一个循环标签,它会循环出当前栏目下的所有文章。
  3. {dede:list} 的循环体内,[field:xxx/] 这样的标签会自动获取到当前正在循环的文章的字段值,这里的 field 就是循环体内部的变量。

在文章页调用当前文章的字段(单个变量)

在文章详情页,你需要展示文章的各个字段,这些字段都是变量。

模板代码示例 (article_article.htm):

<h1>{dede:field.title/}</h1>
<div class="info">
    作者:{dede:field.writer/} &nbsp; 
    时间:{dede:field.pubdate function='MyDate("Y-m-d H:i:s",@me)'/} &nbsp;
    来源:{dede:field.source/} &nbsp;
    点击:{dede:field.click/}
</div>
<div class="content">
    {dede:field.body/}
</div>

代码解析:

  • {dede:field.字段名/}:在文章页,field 这个对象就代表了当前文章的所有字段。field.title 就是文章标题,field.body 就是文章正文。
  • function='MyDate(...)':这是一个非常重要的功能,它允许你对字段值进行PHP函数处理,这里就是用 MyDate 函数将时间戳 @me(字段本身)格式化为易读的日期。

arclist 等标签传入动态属性(核心技巧)

这是“为标签加入变量”最强大的应用场景,你想让列表的条数由后台参数控制,而不是在模板里写死。

假设你有一个自定义的模型,在文章内容页可以设置一个“推荐文章数量”的字段,tjsl

页 (article_article.htm) 获取这个变量并传递给 arclist

<h2>相关推荐</h2>
{dede:php}
    // 获取当前文章的“推荐数量”字段值
    $tuijian_num = $this->Fields['tjsl'];
    // 如果没有设置,则给一个默认值,比如5
    if(empty($tuijian_num)) $tuijian_num = 5;
{/dede:php}
<!-- 
  将PHP变量 $tuijian_num 传递给 arclist 标签的 row 属性
  注意:这里我们使用 {$tuijian_num} 这种语法,这是在Dede模板中直接输出PHP变量值的标准方式
-->
{dede:arclist row='{$tuijian_num}' titlelen='30' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

代码解析:

  1. {dede:php}...{/dede:php}:这是一个执行任意PHP代码的标签块。
  2. $this->Fields:在文章页模板中,$this 指向了模板引擎对象,$this->Fields 是一个包含当前文章所有字段值的PHP数组。
  3. {$tuijian_num}:在Dede模板引擎中,使用 大括号包裹一个PHP变量名,会将其值输出并替换到模板中,这个值会直接作为 arclist 标签的 row 属性的值。

在列表页调用当前栏目的某个字段

假设你在后台为每个栏目添加了一个“列表显示条数”字段 list_num

模板代码示例 (list_article.htm):

{dede:php}
    // 获取当前栏目的“列表显示条数”字段值
    $list_rows = $this->Type->Fields['list_num'];
    // 如果没有设置,则给一个默认值,比如10
    if(empty($list_rows)) $list_rows = 10;
{/dede:php}
<!-- 
  将PHP变量 $list_rows 传递给 list 标签的 pagesize 属性
-->
{dede:list pagesize='{$list_rows}'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:list}

代码解析:

  • $this->Type:在列表页模板中,$this->Type 是一个包含当前栏目信息的PHP对象。
  • $this->Type->Fields:这个对象包含了当前栏目的所有自定义字段。

结合 if 判断实现更复杂的逻辑

你可以结合 {dede:if} 标签,根据变量的值来决定是否显示某些内容。

示例:只在文章有缩略图时才显示缩略图。

模板代码示例:

{dede:list pagesize='10'}
    <li>
        <!-- 使用 if 判断 litpic 字段是否为空 -->
        {dede:if $fields['litpic'] != ''}
            <img src="[field:litpic/]" alt="[field:title/]" />
        {/dede:if}
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:list}

代码解析:

  • {dede:if $fields['litpic'] != ''}:在 {dede:list} 循环体内,$fields 数组代表了当前文章的所有字段,这里我们判断 litpic(缩略图字段)是否不为空。
  • 注意:在 {dede:list} 内部,推荐使用 [field:xxx/] 语法,但在 if 判断中,直接使用 $fields['xxx'] 是更直接和高效的方式。

总结与最佳实践

  1. 明确变量来源

    • 文章页:当前文章字段在 $this->Fields 中,标签用 {dede:field.字段名/}
    • 列表页:当前栏目字段在 $this->Type->Fields 中;当前循环的文章字段在 $fields 中,标签用 [field:字段名/]
    • 全局:可以通过 {dede:php} 执行PHP代码来获取任意变量。
  2. 变量赋值方式

    • 直接赋值{dede:arclist row=$my_var}
    • 模板输出{dede:arclist row='{$my_var}'},当变量值来自 {dede:php} 块时,推荐使用这种方式。
  3. 处理函数:善用 function 属性,如 function='MyDate("Y-m-d",@me)',可以极大地扩展标签功能。

  4. 安全性:如果变量来自用户输入(如URL参数),一定要进行过滤和转义,防止XSS等安全漏洞,可以使用 htmlspecialchars 函数。

通过掌握这些方法,你就可以让DedeCMS的模板变得非常智能和强大,轻松应对各种复杂的网站需求。

-- 展开阅读全文 --
头像
织梦多条件筛选 模板
« 上一篇 03-21
dede文章摘要长度如何设置?
下一篇 » 03-21
取消
微信二维码
支付宝二维码

目录[+]