Discuz!模板解析语法
出自Discuz! 技术文库
对
Discuz!模板解析语法
的源代码
跳转到:
导航
,
搜索
根据以下的原因,您无权限进行编辑这个页面操作:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
返回 [[模板创建、解析原理详解]] * 在设计模板之初,您需要详细了解一下模板解析语法,以进行模板制作实战 * 语法示例中,变量可根据实际情况使用,本处仅使用:'''变量$my_var''' '''数组$my_arr'''进行演示, ==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 的模板文件开头添加一行代码即可,如: <pre> <?php exit;?> </pre> <pre> <?php echo '你不能看此模板的内容';exit;?> </pre> PHP 的模板文件的模板数据内容将从文件的第二行开始解析。PHP 和 HTM 模板文件同时存在时,会优先解析 PHP 模板文件 ==模板语法== ===变量输出=== * 输出一个变量的值,等同于php的 <?php echo $my_var;?>,花括号可以省略但不建议去掉。 <pre> {$my_var} </pre> ===条件判断=== * 通过if判断流程分支 ** 如果写在HTML表单元素中,可以省去<!---->使代码更清晰易读,如{if $my_var}xxx{/if} <pre> <!--{if $my_var}--> 任意html语句 <!--{/if}--> </pre> * 带有多条件的if写法,可使用PHP常规判断中的按位运算符等 <pre> <!--{if $my_var && ($my_var2 & 1 || $my_var3 == 3)}--> 任意html语句 <!--{/if}--> </pre> * 带有分支条件的if写法 <pre> <!--{if $my_var == 1}--> 变量为1 <!--{elseif $my_var == 2}--> 变量为2 <!--{else}--> 其他情况 <!--{/if}--> </pre> ===循环输出=== * 带有数组键的循环写法 <pre> <!--{loop $my_arr $key $val}--> 循环输出的HTML语句 <!--{/loop}--> </pre> * 没有数组键的循环写法 <pre> <!--{loop $my_arr $val}--> </pre> ===模板嵌套=== * 将被嵌套模板内容解析为PHP语句并合并入本模板中的写法 ** common/header 对应某个模板套系中的common目录的header.htm模板文件 <pre> <!--{subtemplate common/header}--> </pre> * 程序运行时include嵌套模板内容 <pre> <!--{template common/header}--> </pre> ===插件钩子=== * 在模板中设立插件钩子 [[插件模板和语言包的设计]] ** hook为关键词,意为将index_top定义为钩子 <pre> <!--{hook/index_top}--> </pre> ===变量数组嵌套使用=== * 条件判断或变量输出时用到 <pre> <!--{if $my_arr[$my_var]}--> <!--{if $my_arr[0]}--> <!--{if $my_arr[$my_arr2[$my_var]]}--> </pre> ===PHP解析=== * 在模板中使用PHP语句可以通过{eval }进行 <pre> <!--{eval $my_var = 1;}--> <!--{eval echo $my_var;}--> <!--{eval $my_arr = array(1, 2, 3);}--> <!--{eval print_r($my_arr);}--> <!--{eval output();}--> <!--{eval exit();}--> </pre> ===语言包使用=== * 在模板中可以通过下面的代码来使用语言包中的某个值 <pre>{lang index_yesterday}</pre> * 其中语言包在 ./source/language/目录下,以PHP数组形式存放 ==插件模板和语言包的设计== '''请参见:[[插件模板和语言包的设计]]''' ==综合示例== * 综合示例题目1:php程序中创建一个数组并在模板中循环,并且根据模板显示奇数行输出不同的CSS样式 # PHP端代码: * 此PHP代码省略了包含 class_core.php 以及初始化$_G变量,详细请查看: <pre> <?php /*此处省略include class_core.php*/ $my_arr = array('one', 'two', 'three', 'four'); include template('forum/mytest'); //使用自定义模板套系中的forum目录的mytest.htm ?> </pre> # 模板代码: <pre> <!--{loop $my_arr $key $val}--> <div {if $key % 2 == 1}style="background: #ccc;"{/if}> 这里是value值:{$val} </div> <!--{/loop}--> </pre> * 综合示例题目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模板代码如下 <pre> <!--{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}--> </pre>
返回到
Discuz!模板解析语法
。
查看
页面
讨论
查看源代码
历史
个人工具
登录
导航
首页
社区入口
当前事件
最近更改
随机页面
帮助
搜索
工具箱
链入页面
链出更改
特殊页面