织梦模板PHP如何获取变量?

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 织梦建站 正文

织梦模板引擎的核心思想是 “模板分离”,即 PHP 逻辑代码(后端)与 HTML 模板代码(前端)分开,获取变量的方式主要分为两大类:

织梦 模板 php 获取 变量
(图片来源网络,侵删)
  1. 在模板文件中使用织梦标签:这是最推荐、最标准的方式,安全且高效。
  2. 在模板文件中直接嵌入 PHP 代码:这种方式灵活但有风险,需要谨慎使用。

使用织梦标签(推荐方式)

织梦标签是织梦系统预定义的一套函数和语法,用于在模板中调用数据,绝大多数情况下,你都应该使用这种方式。

获取系统全局变量

这些变量通常在系统初始化时被定义,可以在任何模板页直接使用。

变量 描述 示例
{dede:global name='cfg_webname'/} 网站名称 head.htmindex.htm 中直接调用
{dede:global name='cfg_weburl'/} 网站根目录URL <a href="{dede:global name='cfg_weburl'/}">首页</a>
{dede:global name='cfg_powerby'/} 网页版权信息 通常用在页脚 footer.htm
{dede:global name='cfg_softname'/} 系统名称 管理系统

示例:head.htm 文件中设置网站标题。

获取当前文档/栏目变量({dede:field}

这是最常用的标签,用于获取当前正在浏览的文档或栏目的具体信息。

织梦 模板 php 获取 变量
(图片来源网络,侵删)
属性 (name=) 描述
id 文档 ID
shorttitle
description 文档摘要
writer 作者
source 来源
pubdate 发布时间(时间戳格式)
senddate 更新时间(时间戳格式)
click 点击次数
arcurl 文档链接
typeurl 栏目链接
typename 栏目名称
keywords
litpic 文章缩略图

示例: 在文章详情页 article_article.htm 中显示文章信息。

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

重要提示:时间格式化 pubdatesenddate 默认返回的是 Unix 时间戳(如 1672531200),不方便直接显示,通常需要配合 function 属性进行格式化。

<!-- 格式化为 年-月-日 -->
{dede:field.pubdate function='MyDate("Y-m-d", @me)' /}
<!-- 格式化为 年-月-日 时:分:秒 -->
{dede:field.pubdate function='MyDate("Y-m-d H:i:s", @me)' /}

获取列表页变量({dede:list}{dede:arclist}

在列表循环中,使用 field 来获取当前条目的信息。

示例: 在列表页 list_article.htm 中循环显示文章。

织梦 模板 php 获取 变量
(图片来源网络,侵删)
<ul>
    {dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
    {/dede:list}
</ul>

在模板中直接嵌入 PHP 代码(高级/不推荐)

在某些特殊情况下,织梦标签无法满足需求,你可能需要直接在模板里写 PHP 代码,织梦提供了 {dede:name} 标签的 runphp 属性来实现这一点。

使用 {dede:name}runphp 属性

这是在模板中执行 PHP 代码最安全、最官方的方式。

语法: {dede:name runphp='yes'}php代码;@me;{/dede:name}

  • runphp='yes':开启 PHP 执行模式。
  • php代码:你写的 PHP 语句。
  • @me:这是一个特殊的变量,代表 {dede:name} 标签本身当前的值,如果你需要输出内容,必须对 @me 进行赋值。
  • 最后必须有一个分号 结束。

示例1:获取并处理一个系统变量

假设你想获取网站名称,并在其前后加上文字。

<p>欢迎来到:{dede:name runphp='yes'}
    $me = '欢迎来到:' . @me;
    $me .= '!';
    @me = $me; // 将处理后的结果重新赋值给 @me
{/dede:name}</p>

输出效果:<p>欢迎来到:我的织梦网站!</p>

示例2:获取当前栏目的 ID

这是一个非常常见的用法,比如根据不同栏目ID显示不同的内容。

{dede:field.typeid runphp='yes'}
    $typeid = @me; // 将当前栏目ID赋值给 $typeid 变量
    if($typeid == 1) {
        @me = "<div>这是栏目ID为1的内容</div>";
    } elseif($typeid == 2) {
        @me = "<div>这是栏目ID为2的内容</div>";
    } else {
        @me = "<div>这是其他栏目的内容</div>";
    }
{/dede:field.typeid}

使用全局变量 $GLOBALS

在模板中,你还可以直接访问 PHP 的全局变量 $GLOBALS,这通常用于获取从控制器或函数中传递过来的数据。

示例:

假设你在某个自定义的 PHP 文件中设置了 $GLOBALS['my_custom_var'] = 'Hello World';,然后在模板中可以这样调用:

<p>自定义变量值:<?php echo $GLOBALS['my_custom_var']; ?></p>

或者

<p>自定义变量值:{dede:name runphp='yes'}@me = $GLOBALS['my_custom_var'];{/dede:name}</p>

注意: 直接使用 <?php ... ?> 在模板中是可行的,但强烈不推荐,因为它破坏了模板的纯净性,且安全性较低。{dede:name runphp='yes'} 是更好的选择。


在 PHP 文件中定义变量,供模板使用

我们需要在 PHP 程序中动态计算或获取数据,然后将它们传递给模板,这通常在 index.php 或自定义的 PHP 文件中完成。

核心函数:Assign()

$dtp->Assign($varname, $value); 函数用于将一个 PHP 变量赋值给一个模板变量。

工作流程:

  1. PHP 文件(如 index.php:获取数据,并使用 Assign() 将其分配给一个模板变量。
  2. 模板文件(如 index.htm:使用 {dede:var name='...'/} 标签来接收并显示这个变量。

示例:

步骤 1:修改 index.php

index.php 文件中,找到包含模板的代码部分,添加如下逻辑:

// 引入织梦核心文件
require_once (dirname(__FILE__) . "/include/common.inc.php");
// 获取一个动态变量
$welcome_info = "欢迎访问我们的网站!今天是 " . date('Y-m-d');
// 将 $welcome_info 这个变量分配给模板中的 'welcome_info' 变量
$dtp->Assign('welcome_info', $welcome_info);
// ... 其他处理代码 ...
// 显示模板
include(DEDETEMPLATE . '/index.htm');

步骤 2:修改模板文件 index.htm

index.htm 的任何位置,使用标签来显示这个变量。

<div class="welcome">
    {dede:var name='welcome_info'/}
</div>

这样,当首页被加载时,index.php 中的动态内容就会显示在模板的指定位置。


总结与最佳实践

场景 推荐方法 优点 缺点
调用网站基本信息 {dede:global name='xxx'/} 简单、直接 -
获取当前文章/栏目信息 {dede:field name='xxx'/} 标准化、高效 -
在列表中循环显示数据 {dede:list}...{field:xxx/}...{/dede:list} 逻辑清晰,性能好 -
简单的条件判断或字符串处理 {dede:name runphp='yes'}...{/dede:name} 灵活,在模板内完成 代码复杂时影响模板可读性
复杂的PHP逻辑运算 在PHP文件中使用 $dtp->Assign() 逻辑与视图分离,代码清晰 需要修改PHP文件
绝对不要 直接在模板中使用 <?php ... ?> 破坏模板结构,安全性低,难以维护 -

核心原则:

  • 优先使用织梦标签:能满足 90% 以上的需求。
  • 简单逻辑用 runphp:对于一些简单的计算和判断,在模板里用 {dede:name runphp='yes'} 处理很方便。
  • 复杂逻辑用 Assign:如果涉及到数据库查询、复杂计算等,务必在 PHP 文件中处理好,然后通过 Assign 传递给模板,这是最专业、最安全的做法。

-- 展开阅读全文 --
头像
dede5.7整合ucenter模块时如何解决常见问题?
« 上一篇 昨天
织梦dedecms源码安装步骤详解?
下一篇 » 昨天

相关文章

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