·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

DZ模板文件中内置自定义标签(一些非html默认标签)的解释(例如ad和eval)

223 1
发表于 2023-7-24 13:22:43 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
很多朋友对Discuz! X的模板都很感兴趣,特别是Discuz! X独有的模板机制,相信大家都非常希望能够看懂它。下面我讲解一下我经常用到的模板语法,希望大家看完之后对Discuz! X的模板有一个详细的了解。
       首先我们要向大家介绍的是Discuz! X的模板解析流程。
       Discuz! X模板的模块化很强,具有相同功能的模块基本上都已经统一管理了。所有的模板文件都是放置在./template目录下,并且基本上都是在./source/module下的模块处理文件中被引入的。

※正题

        一个模板文件在引入之前,通常会通过./source/module下的相应模块处理程序,模板所要显示的数据,之后才会引入他要显示的模板文件,在程序文件中是这样引入模板的:
  1. include template('forum/forumdisplay');
复制代码
        下面我就以discuz比较典型的社区首页作为讲解,为大家剖析一下这个模板的显示流程:

        社区首页是通过./source/module/forum_index.php 中的includetemplate('diy:forum/discuz:'.$gid);引入的。
        下面我们就来详细的看一看template是怎么神奇把dz的模板文件解析成我们前台看到的html文件的,我们找到函数的核心文件function_core.php,在那里我们能看到template函数,这段代码很长,我就不再这里黏贴了。
这个函数的主要作用就是对传入的模板文件进行条件判断,并检查是否更新缓存文件。至于具体的作用,你可以自己去看,我这里就不做详解了。
下面我们主要关注的是./source/ class /class_template.php这个类文件。我们的模板文件都是被他解析,然后写入缓存的。我们前台显示的也都是他解析过后的缓存文件。
这里我只介绍几中比较常用的模板语法,和大家共同学习一下。
  1. <!--{subtemplate common/header}-->
复制代码
  1. <!--{template common/header}-->
复制代码
       Discuz!X 模板使用 {template...} 与 {subtemplate...} 的区别       http://www.zgxsh.com/forum.php?mod=viewthread&tid=67784

在discuz的如果文件模板中,我们通常都会看到形如这样的加载头部文件的方式。
以前不太了解discuz模板机制的时候,也经常搞不清楚<!--{subtemplate }-->和<!--{templater}-->,后来看了看程序才明白。
        <!--{subtemplate }-->后面的模板文件通常都是被包含在其他模板文件中的子体。
        这样在解析模板的时候,程序就会判断<!--{subtemplate }-->所引入的模板会被再一次解析一遍然后再和入口模板拼合,组成一个完整的模板。
        也就是说,如果我们添加的模板是在别的模板中被调用的话我们需要以<!--{subtemplate 模板名称}-->的方式引入进来。
  1. <!--{ad/headerbanner/wpa_h}-->
复制代码


社区上也经常碰到有人问这个标签的含义,这里我就告诉一下大家,这个标签的意思是广告。我们后台添加的广告都是显示在这个标签被解析后的代码中。ad代表广告标签headerbanner为此广告的标识符。Wp a_h为插入html后此广告的样式。

  1. <!--{if $_G['uid']}--><!--{/if}-->
复制代码

DiscuzX的判断标签,如果条件成立,那么包括在这个标签中的html代码将会被显示。示例中如果用户的uid存在的话。这里面的代码就会被显示,如果为游客没有uid,那么对应的里面的html代码将不会再页面中显示出来,即使解析出来,也不会被显示。

而且if 后面的判断条件也可以用表达式的计算结果作为值,进行判断。比如:
  1. <!--{if !empty($_G['cache']['heats']['message'])}-->,<!--{ifempty($gid) && $announcements}-->
复制代码
这个标签的算是模板中最常用的标签了,他同样支持形如我们php中常用的if(){}else{},或者if(){}elseif(判断条件){}else{}.他们对应的标签discuz标签分别为:<!--{if 判断条件代码}--> 显示的html<!--{else}-->若果条件不成立显示的代码<!--{/if}-->和<!--{if 判断条件代码}--> 显示的html<!--{elseif 判断条件代码}-->若果条件不成立显示的代码<!--{else}-->显示的代码<!--{/if}-->
  1. <!--{loop $catlist $key$cat}-->
复制代码
循环标签,这是一个使用频率很高的标签,他会实现php中foreach的函数效果,对一组数组数据进行循环输出。如果你在php中组装好了一个要用到的数组,那么loop将是您最佳的显示标签。
  1. <!--{eval $forum=$forumlist[$forumid];}-->
复制代码

以eval开始的标签,将直接将后面的代码作为php执行语句原样输出。
一般我们常用的标签就这几种。其他的话一般都不太常用。如果你有兴趣可以自己去研究一下./source/ class /class_template.php中的解析函数:function parse_template();这里面包含了所有的标签,并且是如何被解析的。有兴趣的同学可以研究一下。
我要说一句 收起回复

评论1

Discuz智能体Lv.8 发表于 2025-3-21 18:40:22 | 查看全部
在Discuz! X的模板系统中,确实存在一些自定义的标签,这些标签用于在模板文件中实现特定的功能。以下是一些常见的自定义标签及其解释:

1. **{template...} 与 {subtemplate...}**:
   - `{template...}` 用于引入一个完整的模板文件。这个标签会将指定的模板文件内容插入到当前模板中,并在解析时作为一个独立的模板处理。
   - `{subtemplate...}` 用于引入一个子模板文件。子模板通常是被包含在其他模板文件中的部分内容,解析时会与主模板合并。

2. **{ad...}**:
   - `{ad...}` 标签用于在模板中插入广告。广告内容通常通过后台管理界面配置,并在模板解析时替换为相应的广告代码。例如,`{ad/headerbanner}` 会在页面中插入标识为 `headerbanner` 的广告。

3. **{if...}**:
   - `{if...}` 标签用于条件判断。如果条件成立,包含在 `{if...}` 标签内的HTML代码将会被显示。例如:
   
  1. {if $uid}
  2.          <p>欢迎用户 {$username}!</p>
  3.      {/if}
复制代码

     如果用户的 `uid` 存在,那么欢迎信息将会显示。

4. **{loop...}**:
   - `{loop...}` 标签用于循环输出数组数据。它类似于PHP中的 `foreach` 循环。例如:
   
  1. {loop $users $user}
  2.          <p>{$user['username']}</p>
  3.      {/loop}
复制代码

     这段代码会遍历 `$users` 数组,并输出每个用户的用户名。

5. **{eval...}**:
   - `{eval...}` 标签用于直接执行PHP代码。这个标签会将标签内的代码作为PHP语句执行。例如:
   
  1. {eval echo date('Y-m-d H:i:s');}
复制代码

     这段代码会输出当前的日期和时间。

6. **{block...}**:
   - `{block...}` 标签用于定义一个模板块,可以在其他模板中通过 `{blockname...}` 引用。这个标签通常用于模板的模块化设计。

7. **{lang...}**:
   - `{lang...}` 标签用于输出语言包中的字符串。例如:
   
  1. {lang welcome_message}
复制代码

     这段代码会输出语言包中定义的 `welcome_message` 字符串。

8. **{hook...}**:
   - `{hook...}` 标签用于插入钩子(Hook),允许插件在特定位置插入自定义代码。例如:
   
  1. {hook index_header}
复制代码

     这段代码会在页面头部插入一个钩子,插件可以通过这个钩子添加自定义内容。

这些标签在Discuz! X的模板系统中非常常用,掌握它们可以帮助你更好地理解和定制Discuz! X的模板。如果你有更多关于这些标签的具体问题,欢迎继续提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:3.141.24.158,GMT+8, 2025-4-19 05:52 , Processed in 0.372181 second(s), 78 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表