分离自Discuz模板类和语法

简介:

模板原理:当模板没被编译成php文件的时候 第一次读取模板的时候系统会自动进行编译然后再次打开的时候系统就直接读取php文件了

主要功能说明

  1. 去掉了 Discuz 语言包的功能
  2. 移植 Discuz 模板中所有的功能
  3. 添加了自动更新缓存及生命周期功能

在模板中的使用方法跟Discuz的一样,所以就不做多余的说明了,使用前只需要做些简单的设置就可以了

如果需要使用discuz的语言包功能,只要去掉template.class.php第172行注释,并在template.func.php中加上discuz原来的languagevar函数就可以了

Java代码   收藏代码
  1. //设置语言变量  
  2. function languagevar($var) {  
  3.     return $GLOBALS['language'][$var] ? $GLOBALS['language'][$var] : “!$var!”;  
  4. }  

Discuz! 的模板采用近似 PHP 表达式的语法 .

直接输出变量: {$abc}或 {echo $abc}
输出数组中某个变量:{$arr[0]}

在本模板中引用其他的模板: 如我们要包含头部模板文件(header.htm)可以这样写:{subtemplate header}

支持的元素如下:  * <!–{ … }–>

逻辑元素包围符,该符号用于包含条件和循环元素
条件判断
            <!--{if expr1}-->
              statement1
             <!--{elseif expr2}-->
              statement2
             <!--{else}-->
              statement3
             <!--{/if}-->
这是一个典型的条件模板,当条件 expr1 为真时,显示模板 statement1 内容,否则当 expr2 为真时,显示模板 statement2 内容,否则显示模板 statement3 的内容。如同其他语言中的条件控制一样,其中 <!–{elseif expr}–> 和 <!–{else} –> 是非必须的。

 

不带下标变量的数组循环
            <!--{loop $array $value}-->
              statement
             <!--{/loop}-->
            相当于 PHP 的数组循环语句:
            foreach($array as $value) {
              statement
             }


带下标变量的数组循环
            <!--{loop $array $key $value}-->
              statement
             <!--{/loop}-->
相当于 PHP 的数组循环语句:
            foreach($array as $key => $value) {
              statement
             }
逻辑元素包围符在 { } 外面包含了 html 的注释符号 <!– –>,除了为了和信息元素相区别外,也方便了使用 Dreamweaver 和 Frontpage 之类工具编辑模板的用户。因逻辑元素会被识别为 html 的注释而不被显示,对于绝大多数用户,逻辑元素中的内容是完全不需要修改的,甚至修改错一个字符就可能引起错误信息和整个系统无法运行。因此通常您在修改模板的时候,不要修改模板的逻辑信息,更不要将逻辑信息内部元素(如 <!–{else}–> 等)的前后位置作以修改,否则可能会导致错误。如果您的模板被不慎修改损坏,请立即用原标准默认模板覆盖,即可恢复。

对于高手而言,实际上外部的 <!– –> 是可以省略不写的,可以用于某些元素在模板中的定位,但强烈建议普通用户不要轻易尝试。
    * { … }
信息元素包围符
o {CONSTANT}
可以引用界面替换变量,其中必须为大写字母,该符号实际的作用是引用 PHP 常量 CONSTANT,因此也可以通过它来引用其他的常量内容。
o {lang variable}
可以在模板中引用语言变量 variable 的内容,语言变量经由 templates.php.lang 中数组 $language 定义。如 {lang post_edit} 的内容在编译模板的时候被替换为 $language['post_edit'] 的内容,简体中文版的意思是“编辑帖子”。
o {template name}
模板嵌入符,为了避免模板的冗长,可以使用本符号来将 name 模板的内容嵌入本模板中(实际上为引用)。

{subtemplate header}    //这种是静态引入, 即把header的代码直接加载在当前的缓存文件上。
{template header}       //这种是动态引入, 会通过include来引入。
o {eval statement}
eval 标签主要是用来在模板中执行php 语法,在eval 后必须紧跟合法的PHP 语法。推荐只在特别必须的时候才使用该结构,因为它会破坏模板的结构和可读性。如 {eval echo ‘template!’;} 实现的功能为 echo ‘template’;

o {LF}

换行符,因为 Discuz! 模板引擎会忽略掉多余的换行(\n),这个符号用来成生需要的 \n。

我们所推荐的模板修改方法:通过普通编辑器手工书写 html 或通过 Dreamweaver 或 Frontpage 修改。但是修改需切记,同一逻辑元素内或嵌套中元素的位置和内容切勿修改,即通常情况下,您不能把 <!–{}–> 包围的内容单独的移动,更不能删除。但是整个最外部逻辑结构是可以移动或删除的。

如果修改后模板所在页面在输出类似如下的错误信息 Parse error: parse error, unexpected ‘}’ in /home/username/forums/forumdata/templates/1_login.tpl.php on line 6,说明模板中出现了无法匹配,或格式错误的逻辑元素,请仔细检查是否有元素不对应,没有结束或嵌套损坏,格式错误的现象,必要时可以恢复原始模板来解决问题。

Discuz! 提供了方便的界面打包程序,前面已对其格式做了介绍,将导出信息的内容粘贴到 系统设置 中 风格方案 中的 导入界面方案中,执行即可。程序会自动解析数据内容,恢复相关的界面设置,自定义替换变量和所需的模板设置。如果被导出界面使用了非默认模板,必须将 ./templates 目录属性设置为 777,以便导入程序自动建立模板记录和文件夹。

定义变量说明

<?exit?>
<!–{eval $i=2}–>
<!–{if $i==1}–>
123
<!–{/if}–>

<!–{block name=”spaceblog” parameter=”notype/1/order/i.dateline,i.lastpost/limit/0,14/cachetime/900 /cachename/newti/tpl/data”}–><!–最新日志以上是调用数据库中的数据 –>
<!–{eval $i=0;}–>
<!–{loop $_SBLOCK['newti'] $value}–>
<!–{if $i % 2 == 0}–>//如果i除以2的余数等于0
<div class=”listbg”><!–{else}–>
<div class=”listbg2″><!–{/if}–>
· [<span class="listA">$value[typename]</span>]<a
class=”listA” href=”$value[url]” title=”$value[subjectall]” target=”_blank”>$value[subject]</a></div>
<!–{eval $i++;}–>
<!–{/loop}–>

<!–{eval for ($i=1; $i<=5; $i++){ }–>

<!–{eval echo “Hello World!<br />”;}–>
<!–{eval}}–>

相关文章
|
Linux 数据安全/隐私保护 Shell
centos7在忘记密码的情况下修改密码
centos7在忘记密码的情况下修改密码: 1、在重启系统过程中,快速在键盘上的上下键, 之后按下e键,进入编辑模式 2、在编辑模式,移动光标到LANG=en_US.
3809 0
|
12月前
|
人工智能 搜索推荐 决策智能
不靠更复杂的策略,仅凭和大模型训练对齐,零样本零经验单LLM调用,成为网络任务智能体新SOTA
近期研究通过调整网络智能体的观察和动作空间,使其与大型语言模型(LLM)的能力对齐,显著提升了基于LLM的网络智能体性能。AgentOccam智能体在WebArena基准上超越了先前方法,成功率提升26.6个点(+161%)。该研究强调了与LLM训练目标一致的重要性,为网络任务自动化提供了新思路,但也指出其性能受限于LLM能力及任务复杂度。论文链接:https://arxiv.org/abs/2410.13825。
220 12
|
机器学习/深度学习 并行计算 TensorFlow
GPU加速TensorFlow模型训练:从环境配置到代码实践的全方位指南,助你大幅提升深度学习应用性能,让模型训练不再等待
【8月更文挑战第31天】本文以随笔形式探讨了如何在TensorFlow中利用GPU加速模型训练,并提供了详细的实践指南。从安装支持GPU的TensorFlow版本到配置NVIDIA CUDA及cuDNN库,再到构建CNN模型并使用MNIST数据集训练,全面展示了GPU加速的重要性与实现方法。通过对比CPU与GPU上的训练效果,突显了GPU在提升训练速度方面的显著优势。最后,还介绍了如何借助TensorBoard监控训练过程,以便进一步优化模型。
2233 0
|
前端开发 Java 测试技术
【IDEA+通义灵码插件】实现属于你的大模型编程助手
【IDEA+通义灵码插件】实现属于你的大模型编程助手
2045 0
|
机器学习/深度学习 存储 人工智能
未来的移动通信网络,6G与人工智能的融合
在最近的几十年中,移动通信网络从1G发展到6G,通信关键技术层出不穷、迅速发展,广泛应用在人类社会的各行各业,成为社会信息化变革的重要支撑。
1391 0
未来的移动通信网络,6G与人工智能的融合
|
NoSQL API MongoDB
深入解读 MongoDB CDC 的设计与实现
阿里云实时计算 Flink 基于 Flink 1.17 的企业版 Flink 已正式发布,在该版本中 MongoDB CDC 连接器已开始公测,支持任意时间戳消费、完整事件流等功能。欢迎使用!
1222 0
深入解读 MongoDB CDC 的设计与实现
如何进行需求评审后续跟踪和更新?附模板
如何进行需求评审后续跟踪和更新?附模板
432 0
|
域名解析 安全 CDN
隐藏服务器真实IP的几种方法
隐藏服务器真实IP的几种方法
|
存储 消息中间件 SQL
数据开发流程及规范
P0\P1级别问题在规定时间内无法解决的,需要该问题的研发同学在问题comments内说明无法在规定时间内解决的合理的解释,并告知该问题具体的解决时间点同时邮件说明。
数据开发流程及规范