zoukankan      html  css  js  c++  java
  • discuz模板引擎

        discuz是采用“编译型的模板”,就是指采用普通网页文件保存,在文件中插入需要动态显示数据的仿php的代码,最后进行编译成真正的php的文件保存为模板缓存文件,这个转换的过程就称为编译。在用户浏览页面的时候,会自动加载模板缓存文件,将php程序执行的结果代入这些文件中执行输出,当模板缓存文件丢失或者文件被修改,系统会自动监测这一点然后进行重新生成模板缓存文件。

        页面缓存刷新原理:当开发者编辑过模板文件之后,Discuz! 模板解析器会匹配模板htm文件与缓存php文件的最后修改时间,如过模板html文件较新或无缓存文件,则更新或生成缓存,不新,则不采取任何动作。

    Discuz! X模板的解析工作主要是经过./source/class/class_template.php文件解析处理的,如果你懂想研究下他是如何解析的可以研究下这个文件!

      1. 模板嵌套语法

        将被嵌套模板内容解析为PHP语句并合并入本模板中的写法
        <!--{subtemplate common/header}-->
        common/header 对应某个模板套系中的common目录的header.htm模板文件

        程序运行时include嵌套模板内容
        <!--{template common/header}-->
        注释:当模板中有一些loop时,尽量用subtemplate
      1. 逻辑判断if...else

          1. 如果写在HTML表单元素中,可以省去使代码更清晰易读,如{if $my_var}xxx{/if}
            <!--{if $_G['uid']}--> 任意html语句 <!--{/if}-->

          1. 带有分支条件的if写法
            <!--{if $_G['uid']}--> 任意html语句 <!--{elseif $_G[connectguest]}--> 任意html语句 <!--{/if}-->

          1. 带有多条件的if写法,可使用PHP常规判断中的按位运算符等
            <!--{if empty($_G['forum']['picstyle']) && $_GET['orderby'] == 'lastpost' && empty($_GET['filter']) }-->
                任意html语句
            <!--{/if}-->

        1. css书写时也可以按条件进行判断设置设置例如:
          <td class="fl_g"{if $forumcolwidth} width="$forumcolwidth"{/if}>
      2. 直接执行php代码标签:

        <!--{eval echo $my_var;}-->
        <!--{eval $my_arr = array(1, 2, 3);}-->
        <!--{eval print_r($my_arr);}-->
        <!--{eval output();}-->
        <!--{eval exit();}-->
      3. 直接输出变量,等同于php的 <?php echo $my_var; ?>, 花括号可以省略但不建议去掉。(模块程序处理后才能在这里调用):

        <div id="anc"><ul id="ancl">$announcements</ul></div>
        <!--{echo cutstr($group[lastpost][subject], 30)}-->
      4. 广告的嵌入点代码:

        <!--{ad/headerbanner/wp a_h}-->
      5. 插件的钩子标签:

        <!--{hook/global_usernav_extra2}-->
        hook为关键词,意为将index_top定义为钩子
      6. 循环语法(可以多重循环)

        带有数组键的循环写法
        <!--{loop $my_arr $key $val}-->
            循环输出的HTML语句
        <!--{/loop}-->

        没有数组键的循环写法
        <!--{loop $_G['setting']['navs'] $nav}-->
            循环输出的HTML语句
        <!--{/loop}-->
      7. diy区域和后台数据调用标签:

        <!--[diy=diy1]--><div id="diy1" class="area"></div><!--[/diy]-->
        {block XXX}(数据调用模块)
      8. discuz语言包加载后,模板文件中的使用:

        {lang forum_category_modedby}
        其中语言包在 ./source/language/目录下,以PHP数组形式存放
  • 相关阅读:
    《PHP和MySQL Web开发》读书笔记(下篇)
    《PHP和MySQL Web开发》读书笔记(上篇)
    python核心编程笔记——Chapter5
    python核心编程笔记——Chapter2
    JS JSON序列化 Ajax form表单
    Django Redis验证码 密码 session 实例
    JQuery 简单表格验证
    Django 添加自定义包路径
    Django Redis存储session会话
    Django Redis配合Mysql验证用户登录
  • 原文地址:https://www.cnblogs.com/agang-php/p/4216493.html
Copyright © 2011-2022 走看看