discuz模板引擎
discuz是采用“编译型的模板”,就是指采用普通网页文件保存,在文件中插入需要动态显示数据的仿php的代码,最后进行编译成真正的php的文件保存为模板缓存文件,这个转换的过程就称为编译。在用户浏览页面的时候,会自动加载模板缓存文件,将php程序执行的结果代入这些文件中执行输出,当模板缓存文件丢失或者文件被修改,系统会自动监测这一点然后进行重新生成模板缓存文件。
页面缓存刷新原理:当开发者编辑过模板文件之后,Discuz! 模板解析器会匹配模板htm文件与缓存php文件的最后修改时间,如过模板html文件较新或无缓存文件,则更新或生成缓存,不新,则不采取任何动作。
Discuz! X模板的解析工作主要是经过./source/class/class_template.php文件解析处理的,如果你懂想研究下他是如何解析的可以研究下这个文件!
模板嵌套语法
将被嵌套模板内容解析为PHP语句并合并入本模板中的写法
<!--{subtemplate common/header}-->
common/header 对应某个模板套系中的common目录的header.htm模板文件程序运行时include嵌套模板内容
<!--{template common/header}-->注释:当模板中有一些loop时,尽量用subtemplate
逻辑判断if...else
- 如果写在HTML表单元素中,可以省去使代码更清晰易读,如{if $my_var}xxx{/if}
<!--{if $_G['uid']}--> 任意html语句 <!--{/if}-->
- 带有分支条件的if写法
<!--{if $_G['uid']}--> 任意html语句 <!--{elseif $_G[connectguest]}--> 任意html语句 <!--{/if}-->
- 带有多条件的if写法,可使用PHP常规判断中的按位运算符等
<!--{if empty($_G['forum']['picstyle']) && $_GET['orderby'] == 'lastpost' && empty($_GET['filter']) }-->
任意html语句
<!--{/if}-->
- css书写时也可以按条件进行判断设置设置例如:
<td class="fl_g"{if $forumcolwidth} width="$forumcolwidth"{/if}>
- 如果写在HTML表单元素中,可以省去使代码更清晰易读,如{if $my_var}xxx{/if}
直接执行php代码标签:
<!--{eval echo $my_var;}-->
<!--{eval $my_arr = array(1, 2, 3);}-->
<!--{eval print_r($my_arr);}-->
<!--{eval output();}-->
<!--{eval exit();}-->直接输出变量,等同于php的 <?php echo $my_var; ?>, 花括号可以省略但不建议去掉。(模块程序处理后才能在这里调用):
<div id="anc"><ul id="ancl">$announcements</ul></div>
<!--{echo cutstr($group[lastpost][subject], 30)}-->广告的嵌入点代码:
<!--{ad/headerbanner/wp a_h}-->插件的钩子标签:
<!--{hook/global_usernav_extra2}-->
hook为关键词,意为将index_top定义为钩子循环语法(可以多重循环)
带有数组键的循环写法
<!--{loop $my_arr $key $val}-->
循环输出的HTML语句
<!--{/loop}-->没有数组键的循环写法
<!--{loop $_G['setting']['navs'] $nav}-->
循环输出的HTML语句
<!--{/loop}-->diy区域和后台数据调用标签:
<!--[diy=diy1]--><div id="diy1" class="area"></div><!--[/diy]-->
{block XXX}(数据调用模块)discuz语言包加载后,模板文件中的使用:
{lang forum_category_modedby}
其中语言包在 ./source/language/目录下,以PHP数组形式存放
discuz模板引擎的更多相关文章
- discuz模板引擎语法
论坛的首页模板:forum/discuz.htm 版块的内容模板:forum/forumdisplay.htm 主题的查看模板:forum/viewthread.htm 帖子的内容模板:forum/p ...
- Discuz 模板标签说明
Discuz 模板标签说明 Discuz! 的模板采用近似 PHP 表达式的语法,基本都是可识别的HTML,但涉及到变量和动态内容时,基本形式下: <!-{ 代码内容 }-> 逻辑元素包围 ...
- Smarty模板引擎技术
Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...
- JavaScript学习笔记(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- Handlebars 模板引擎之前后端用法
前言 不知不觉间,居然已经这么久没有写博客了,坚持还真是世界上最难的事情啊. 不过我最近也没闲着,辞工换工.恋爱失恋.深圳北京都经历了一番,这有起有落的生活实在是太刺激了,就如拿着两把菜刀剁洋葱一样, ...
- 推荐13款javascript模板引擎
javaScript 在生成各种页面内容时如果能结合一些模板技术,可以让逻辑和数据之间更加清晰,本文介绍 X 款 JavaScript 的模板引擎.(排名不分先后顺序) 1. Mustache 基于j ...
- JavaScript学习总结(一)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
一.AJAX示例 AJAX全称为“Asynchronous JavaScript And XML”(异步JavaScript和XML) 是指一种创建交互式网页应用的开发技术.改善用户体验,实现无刷新效 ...
- DotLiquid模板引擎简介
DotLiquid是一个在.Net Framework上运行的模板引擎,采用Ruby的Liquid语法,这个语法广泛的用在Ruby on rails和Django等网页框架中. DotLiquid相比 ...
- doT js 模板引擎【初探】要优雅不要污
js中拼接html,总是感觉不够优雅,本着要优雅不要污,决定尝试js模板引擎. JavaScript 模板引擎 JavaScript 模板引擎作为数据与界面分离工作中最重要一环,越来越受开发者关注. ...
随机推荐
- elementUI Message 独立引入的用法
同理,Alert,MessageBox, Notification, 也是这样引入 单组件单独引用: import { Message } from 'element-ui'; export defa ...
- Unity3D Android动态反射加载程序集
这种办法在iOS下是不让用的,只能在Android下用.用起来也很方便了. 1.先创建一个c#工程,引用到的UnityEngine.dll在Unity的安装目录里找吧 2.将编译的dll放入Unity ...
- ALTERA FPGA Quartus 指定memory综合使用 M4K块
最近遇到个问题, 使用二位数组方式定义了一个RAM ,但是软件每次 都是使用逻辑单元综合 这块memory , 在ALTERA的网页上 找到了 方法,,在定义的 memory前面加一句画 (* ra ...
- Linux批量杀死进程
杀死进程在linux中使用kill命令了,我们可以下面来给各位介绍一篇关于Linux下批量杀死进程的例子,希望此例子可以对各位同学带来帮助的哦. 批量杀死包含关键字“php-fpm”的进程. kill ...
- 微信小程序:wx.navigateTo中url无法跳转问题(app.json中配置的tabBar与wx.navigateTo中url引用相同页面导致)
今天在做微信小程序时,设置wx.navigateTo页面跳转并传参数,点击始终没有效果,代码如下: //事件处理函数 newsDetail: function (event) { console.lo ...
- jfinal如何查看post还是get请求?
jfinal如何查看post还是get请求? controller里面getRequest().getMethod()就行了. 值为 'GET' 或者 'POST'
- vim配置函数跳转(c/c++)
暂时草记一下,有时间好好整理 ctags 如果只是查看函数与变量是在哪里定义的,用ctags就可以了. ctrl+]跳到定义的地方,ctrl+t跳回来. 想要像IDE那样在旁边显示函数与变量列表,用t ...
- Linux命令记录----chkconfig命令
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息.谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接. 使用语法:chkconfig [--ad ...
- react封装简单的浏览器顶部加载进度条全局组件
在项目中经常会有在请求前后加loading或者加加载进度条,一般这些组件都会抽离出来作为全局组件 进度条的插件貌似都不是很符合自己项目中的需求,于是.. 参考nprogress样式,自己在项目中封装组 ...
- PHP中有丰富的运算符集,它们中大部分直接来自于C语言
PHP中有丰富的运算符集,它们中大部分直接来自于C语言.按照不同功能区分,运算符可以分为:算术运算符.字符串运算符.赋值运算符.位运算符.条件运算符,以及逻辑运算符等.当各种运算符在同一个表达式中时, ...