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样式
  1. 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
?>
  1. 模板代码:
    <!--{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′][′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 οnclick="changefontsize('{$_G['style']['SMFONTSIZE']}');">改变小号字</span><span οnclick="changefontsize('{$_G['style']['THREADTITLEFONTSIZE']}');">改变为大号字</span>
<script type="text/javascript">
function changefontsize(size) {$('test1').style.fontSize = size;
}
</script>
<!--{subtemplate common/footer}-->

Discuz!模板解析语法相关推荐

  1. discuz模板引擎语法

    论坛的首页模板:forum/discuz.htm 版块的内容模板:forum/forumdisplay.htm 主题的查看模板:forum/viewthread.htm 帖子的内容模板:forum/p ...

  2. discuz模板解析注释

    <?php function parse_template($tplfile, $objfile) { global $options; //循环嵌套次数 $nest = 3; //打开模板文件 ...

  3. php模板机制,ECMall模板解析语法与机制

    马上注册,学习更多技术,享用更多经验,获取更多辅助工具. 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 在ECMall模板中,用"{"开头,以"}"结 ...

  4. ECMALL模板解析机制

    ECMall模板解析语法与机制 在ECMall模板中,用"{"开头,以"}"结尾就构成一个标签单元,"{"紧接着的单词就是标签名.在标签单元 ...

  5. 【discuz】discuz模板语法

    Discuz! X 模板的解析主要是 ./source/class/class_template.php 文件解析处理的,如果需要深入了解请可以看看这个文件! 模板嵌套语法 将被嵌套模板内容解析为 P ...

  6. tal php x 1,PHP中TAL模板引擎语法的解析(代码)

    这篇文章给大家介绍的内容是关于php TAL模板引擎语法,内容很详细,有需要的朋友可以参考一下,希望可以帮助到大家. PHP 数据 本文档的使用到的数据($talData)//定义talData变量 ...

  7. Discuz模板引擎标签

    界面风格与模板定制的详细说明 Discuz! 的模板采用文件保存,默认模板保存在 ./templates/default/ 目录中,该目录下 *.htm 文件是模板文件,*.lang.php 是语言包 ...

  8. velocity模板的语法简要汇总

    velocity模板的语法简要汇总 What's velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template ...

  9. ECMall2.x模板制作入门系列之2(模板标签/语法)

    ECMall2.x模板制作入门系列之2(模板标签/语法)今天给大家带来一个模板语法的教程.希望能为ECMall模板制作者提供一份参考资料.如有问题.建议和意见,欢迎提出.在ECMall模板中,用&qu ...

  10. Themleaf模板基础语法使用介绍

    Themleaf模板基础语法使用介绍 项目首页地址:https://blog.csdn.net/weixin_45019350/article/details/108869025 一. Thymele ...

最新文章

  1. verify https android,信任https
  2. vue 保存全局变量_Vue+Typescript起手式
  3. ASIHTTPRequest 简单应用
  4. 微信公众号监听返回按钮问题解决
  5. Android日志系统分析之开篇
  6. Java数据库——事务处理
  7. mysql redis qps_Redis QPS测试
  8. 5g上行速率怎么提升_揭秘联发科5G独家技术,攻克上行覆盖和终端功耗两大技术难题...
  9. 阿里云OSS对象存储STS鉴权配置
  10. (转)使用Spring配置文件实现AOP
  11. 苹果iOS 13概念曝光 音量UI大改鼠标即时配对
  12. java多线程线程池_Java多线程——线程池(ThreadPool)
  13. 如何安装mysql 8.0.12_基于Windows安装MySQL 8.0.12图文教程
  14. mac 安装adb工具
  15. Open EtherCAT Society——SOEM、SOES
  16. 2020互联网公司中秋礼盒大比拼(22家互联网厂商)
  17. 如何在 mac os 上双开微信?
  18. Django读取图片
  19. 这里除了安全,什么都不会发生!Docker镜像P2P加速之路
  20. 用水浒传来学习OKR

热门文章

  1. ERP Qt实现之路 前言
  2. win10系统映像恢复
  3. WORD文档不能打开的一些原因
  4. 【项目管理】干系人管理
  5. 【产品】蓝绿发布、滚动发布和灰度发布对比
  6. postgresql数据库字符串转日期
  7. 去掉android点击事件产生的半透明蓝色背景
  8. Java开发微信小程序(三)用小程序给用户推送服务消息
  9. 电脑使用小常识(2):新手装软件指南,防止流氓软件
  10. 北卡罗来纳州立大学计算机科学,NCSU的CS「北卡罗来纳州立大学罗利分校计算机科学系」...