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数组形式存放
  • 相关阅读:
    CS229 6.4 Neurons Networks Autoencoders and Sparsity
    CS229 6.3 Neurons Networks Gradient Checking
    【Leetcode】【Easy】Min Stack
    【Leetcode】【Easy】Merge Sorted Array
    【Leetcode】【Easy】ZigZag Conversion
    【Leetcode】【Easy】Valid Palindrome
    【Leetcode】【Easy】Reverse Integer
    【Leetcode】【Easy】Palindrome Number
    【Leetcode】【Easy】Length of Last Word
    【Leetcode】【Easy】Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/agang-php/p/4216493.html
Copyright © 2011-2022 走看看