Discuz!模板解析语法
<!--{eval echo autostart(""); }-->
PHP中使用template()函数显示已存在模板
在Discuz!程序执行中可以通过 include template('模板文件夹/模板名称无后缀');的方式进行解析,前提是您使用的Discuz!程序已经包含了 ./source/function/function_core.php 的函数库
PHP格式的模板
[X2.5新增内容] 从 Discuz! X2.5 开始,模板文件支持 PHP 扩展名的格式,你可以创建例如 ./template/mytext/common/forum/discuz.php 文件,PHP 的模板文件中你只需在原有 HTM 的模板文件开头添加一行代码即可,如: <?php exit;?>
<?php echo '你不能看此模板的内容';exit;?>
PHP 的模板文件的模板数据内容将从文件的第二行开始解析。PHP 和 HTM 模板文件同时存在时,会优先解析 PHP 模板文件 模板语法
变量输出
输出一个变量的值,等同于php的 <?php echo $my_var;?>,花括号可以省略但不建议去掉。
{$my_var}
条件判断
通过if判断流程分支
如果写在HTML表单元素中,可以省去使代码更清晰易读,如{if $my_var}xxx{/if}
<!--{if $my_var}-->
任意html语句
<!--{/if}-->
带有多条件的if写法,可使用PHP常规判断中的按位运算符等
<!--{if $my_var && ($my_var2 & 1 || $my_var3 == 3)}-->
任意html语句
<!--{/if}-->
带有分支条件的if写法
<!--{if $my_var == 1}-->
变量为1
<!--{elseif $my_var == 2}-->
变量为2
<!--{else}-->
其他情况
<!--{/if}-->
循环输出
带有数组键的循环写法
<!--{loop $my_arr $key $val}-->
循环输出的HTML语句
<!--{/loop}-->
没有数组键的循环写法
<!--{loop $my_arr $val}-->
模板嵌套
将被嵌套模板内容解析为PHP语句并合并入本模板中的写法
common/header 对应某个模板套系中的common目录的header.htm模板文件
<!--{subtemplate common/header}-->
程序运行时include嵌套模板内容
<!--{template common/header}-->
插件钩子
在模板中设立插件钩子
hook为关键词,意为将index_top定义为钩子
<!--{hook/index_top}-->
变量数组嵌套使用
条件判断或变量输出时用到
<!--{if $my_arr[$my_var]}-->
<!--{if $my_arr[0]}-->
<!--{if $my_arr[$my_arr2[$my_var]]}-->
PHP解析
在模板中使用PHP语句可以通过{eval}进行
<!--{eval $my_var = 1;}-->
<!--{eval echo $my_var;}-->
<!--{eval $my_arr = array(1, 2, 3);}-->
<!--{eval print_r($my_arr);}-->
<!--{eval output();}-->
<!--{eval exit();}-->
多行PHP解析(Discuz! X3 新增)
<!--{eval}-->
...PHP语句...
<!--{/eval}-->
语言包使用
在模板中可以通过下面的代码来使用语言包中的某个值
{lang index_yesterday}
其中语言包在 ./source/language/目录下,以PHP数组形式存放
插件模板和语言包的设计
综合示例
综合示例题目1:php程序中创建一个数组并在模板中循环,并且根据模板显示奇数行输出不同的CSS样式
PHP端代码:
此PHP代码省略了包含 class_core.php 以及初始化$_G变量,详细请查看:
<?php
/*此处省略include class_core.php*/
$my_arr = array('one', 'two', 'three', 'four');
include template('forum/mytest'); //使用自定义模板套系中的forum目录的mytest.htm
?>
模板代码:
<!--{loop $my_arr $key $val}-->
<div {if $key % 2 == 1}style="background: #ccc;"{/if}>
这里是value值:{$val}
</div>
<!--{/loop}-->
综合示例题目2:结合风格常量与javascript,动态改变模板页面的字体大小,并引用默认模板的header和footer
默认风格中,小号字体大小 {SMFONTSIZE}为0.83em,主题列表字体大小 {THREADTITLEFONTSIZE}为14px,在Disucz!X2中使用时,需要使用G[′style′][′SMFONTSIZE′]和_G['style']['THREADTITLEFONTSIZE']。
$('test1')此写法是因为header中已经加载了common.js全局javascript脚本文件,可以通过简写来达到document.getElementById('test1')的效果
./template/mytest/forum/mytest.htm模板代码如下
<!--{subtemplate common/header}-->
<div id="test1" style="font-size:{$_G['style']['FONTSIZE']};">
这是一个改变字体的实例
</div>
<span onclick="changefontsize('{$_G['style']['SMFONTSIZE']}');">改变小号字</span><span onclick="changefontsize('{$_G['style']['THREADTITLEFONTSIZE']}');">改变为大号字</span>
<script type="text/javascript">
function changefontsize(size) {
$('test1').style.fontSize = size;
}
</script>
<!--{subtemplate common/footer}-->
Discuz!模板解析语法的更多相关文章
- [转载]ECMall模板解析语法与机制
ECMall模板解析语法与机制 2011-05-22 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词 ...
- discuz模板引擎语法
论坛的首页模板:forum/discuz.htm 版块的内容模板:forum/forumdisplay.htm 主题的查看模板:forum/viewthread.htm 帖子的内容模板:forum/p ...
- 我是如何给discuz模板做语法高亮的
本人一直做ASP.NET开发,近期接到任务要用Discuz开发一个社区,第一次接触PHP,PHP灵活的语法,天生的模块化,各种语法糖深深的震惊了我,我从内心深处感受到了PHP是最牛逼的语言!!! 好了 ...
- 我是如何给discuz模板做语法高亮的/vs code/textmate
本人一直做ASP.NET开发,近期接到任务要用Discuz开发一个社区,第一次接触PHP,PHP灵活的语法,天生的模块化,各种语法糖深深的震惊了我,我从内心深处感受到了PHP是最牛逼的语言!!! 好了 ...
- discuz模板引擎
discuz是采用“编译型的模板”,就是指采用普通网页文件保存,在文件中插入需要动态显示数据的仿php的代码,最后进行编译成真正的php的文件保存为模板缓存文件,这个转换的过程就称为编译.在用户浏览页 ...
- arTemplate解析语法
模板解析语法 defaults.parser = function (code, options) { // var match = code.match(/([\w\$]*)(\b.*)/); // ...
- ECMALL模板解析机制.MVC架构分析及文件目录说明.二次开发指南手册(转)
ECMALL模板解析语法与机制 http://www.nowamagic.net/architecture/archt_TemplateSyntaxAndAnalysis.php ECMALL模块开发 ...
- discuz模板语法
Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 P ...
- PHP discuz模板语法
Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 P ...
随机推荐
- IIC总线
一. 概述 1. IIC总线是PHILIPS公司推出的一种串口总线,是具备多主机系统所需的包括总线裁决和高低速器件同步功能的高性能串口总线. 2. IIC总线只有两根双向信号线.一根是数据线SDA,一 ...
- 随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值
随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值 1:有如下html: .................. <select id="aaa ...
- LeetCode Binary Tree Vertical Order Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-vertical-order-traversal/ 题目: Given a binary tree, ...
- Python之路-jQuery
参考网址:http://jquery.cuishifeng.cn/ 1.安装环境 2.查找元素 3.操作元素 一.安装环境: 1.我们需要去官网下载jQuery,地址:http://jquery.co ...
- MWeb 1.4 新功能介绍一:引入文件夹到 MWeb 中管理,支持 Octpress、Jekyll 等静态博客拖拽插入图片和实时预览
之前在 MWeb 中打开非文档库中的 Markdown 文档,如果文档中有引用到本机图片,是没办法在 MWeb 中显示出来和预览的.这是因为 Apple 规定在 Mac App Store(MAS) ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- 罗永浩专访全文记录(转自好奇心日报-http://www.qdaily.com/)
这篇文章是转的,存档做记录,定期看一看,激励自己遇到到困难时,想想人家比自己难多了,自己那点事算个屁啊.学习别人,不要带有傻逼主观倾向性,这样什么也得不到,我看完后,发现有一句话,说的非常好,自己有自 ...
- java.sql.SQLSyntaxErrorException: ORA-00936: 缺失表达式。
今天遇到一个很奇怪的问题,sql报表达式错误,于是我把报错的那句sql(红色)放到数据库中执行,没有报错啊!百思不得其解! 呼!我已经提醒自己去注意看黑色的console信息了,得到了传参的参数值,但 ...
- JS中generater和箭头函数
generater跟函数很像: function* fn(x){ yield x; yield x++; return x;} 如上所示,generater用function*定义,可以用yield返 ...
- 找出数组中从未出现的最小正整数java实现
/** * 找出未出现的最小正整数 * @param A * @param n * @date 2016-10-7 * @author shaobn */ public static int find ...