博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Discuz! X模板中的一些基本语法
阅读量:4199 次
发布时间:2019-05-26

本文共 2281 字,大约阅读时间需要 7 分钟。

很多朋友对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.
  1. <!--{subtemplate common/header}-->
复制代码
discuz
的如果文件模板中,我们通常都会看到形如这样的加载头部文件的方式。以前不太了解discuz
模板机制的时候,也经常搞不清楚<!--{subtemplate }-->
<!--{templater}-->,
后来看了看程序才明白。<!--{subtemplate }-->
后面的模板文件通常都是被包含在其他模板文件中的子体。这样在解析模板的时候,程序就会判断<!--{subtemplate }-->
所引入的模板会被再一次解析一遍然后再和入口模板拼合,组成一个完整的模板。也就是说,如果我们添加的模板是在别的模板中被调用的话我们需要以<!--{subtemplate
模板名称}-->
的方式引入进来。
2
  1. <!--{ad/headerbanner/wpa_h}-->
复制代码
论坛上也经常碰到有人问这个标签的含义,这里我就告诉一下大家,这个标签的意思是广告。我们后台添加的广告都是显示在这个标签被解析后的代码中。ad
代表广告标签headerbanner
为此广告的标识符。Wp a_h
为插入html
后此广告的样式。
3.
  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}-->
4.
  1. <!--{loop $catlist $key$cat}-->
复制代码
循环标签,这是一个使用频率很高的标签,他会实现php
foreach
的函数效果,对一组数组数据进行循环输出。如果你在php
中组装好了一个要用到的数组,那么loop
将是您最佳的显示标签。
5.
  1. <!--{eval $forum=$forumlist[$forumid];}-->
复制代码
eval
开始的标签,将直接将后面的代码作为php
执行语句原样输出。

一般我们常用的标签就这几种。其他的话一般都不太常用。如果你有兴趣可以自己去研究一下./source/ class /class_template.php中的解析函数:function

parse_template();这里面包含了所有的标签,并且是如何被解析的。有兴趣的同学可以研究一下。

 

转载自:

 

你可能感兴趣的文章
软件项目管理的圣经--人月神话(下)
查看>>
敏捷软件开发模型--SCRUM
查看>>
使用MOCK对象进行单元测试
查看>>
什么是RIA
查看>>
Flex实现页面多态--state对象
查看>>
Flex自定义组件
查看>>
Flex使用BlazerDS实现客户端与服务端通信
查看>>
Flex精华摘要--如何开始
查看>>
Flex精华摘要--基本MXML功能
查看>>
Flex精华摘要--基本语法
查看>>
Flex精华摘要--使用AS脚本
查看>>
JMeter性能测试入门
查看>>
JMeter最常用的三种类型的压力测试
查看>>
Hibernate HQL 语法大全(上)
查看>>
Hibernate HQL 语法大全(下)
查看>>
深入Java事务的原理与应用
查看>>
JTA(XA)原理解析
查看>>
UltraEdit中使用正则表达式
查看>>
CSS单位和CSS默认值大全
查看>>
CSS核心--盒子模型
查看>>