Back

Exception

2016-02-28 更新

手册知识点:

什么是smarty,什么是模板。

就是一个模板引擎,当有模板的时候,一些重复的东西即可通过通用类抽离来解决。类似JavaWeb中的Jsp。

变量:

流程控制:

  1. IF( ( (a==b) or (c==d) )  and (e==f) ) / 与或非 ( && || ! )

    • 符号  简写     意思
    •  ==    eq          equals

    •  !=     ne,net    not equals

    •   >      gt           greater than

    •  <      lt            less than

    •  >=    gte,ge      greater than or equal

    •  <=    lte,le          less than or equal

    •  !       not

    •  %     mod

    •  is even         是偶数// if $a%2 is even

  2. FOR,FORELSE

         {for $var=0 to 10 step 2 max=3}//从0到10每步2,最多走3步 

              {$var}

              {forelse}//

                   条件不成功,没有循环

         {/for} 

  3. WHILE

         {while $var lt 10}

              {$var++}

         {/while}

  4. FOREACH,FOREACHELSE

         {foreach $arr as $key=>$value}

              {$value@iteration}=>{$value@iteration}=>{$k}=>{$value}<br>//从1开始

              数字索引(从0开始)=>第几个(从1开始)=>键=>值

              {if $value@first}//判断是否是第一个循环

              {if $value@first}//判断是否是循环中的最后一个

         {foreachelse}

              数组为空或数组不存在

         {/foreach}

         {$value@total}//获得foreach的数组的总数(count)

函数:

<{fun_name args1=“a” args2=“b"}>

     函数参数会作为key=>value对的数组,传递给函数。

     function fun($params,$smarty){}

     其中$params = array(args1=>a,args2=>b)

块函数:

<{fun_name args1=“” args2=“"}>

     abc

<{/fun_name}>

     function fun($params,$content,$smarty,&$repeat){}

     其中:content = abc

     repeat:当前是函数块头:true,还是尾:false。(注意,块函数会被调用两次)

     嵌套块函数,$smarty->_tag_stack可以看嵌套的层级。

     {block}、{include}、{config_load file=‘abc’ section=‘cba'}其实都是内置函数

插件拓展smarty:

     插件方法定义:registerPlugin(type,name,callback);

     type:定义plugin的类型:”function”函数,”block”函数块,”compiler”,”modifier”(变量修饰器)

     name:在模板中使用的名字

function a($params,$smarty)

<data_now format=“%y/%m/%d">

format会作为params的数组子项传递到函数

     自定义插件类:pluginDir

          自定路径:$smarty->setPluginsDir();

          文件命名规则:modify.函数名.php / function.函数名.php

          方法命名:function smarty_modifier_myfunc($value,$param) / function smarty_function_myfunc($params,$smarty)

          参数:第一个参数是修饰器所修饰的变量值,第二个以后才是使用的参数

模板继承:

     父模板中定义了结构,包含一些block,子模板能够继承。

     {extents  } / php中:display(“extends:parent.tpl|child.tpl")

     {block name append/prepend}

          子模板继承之后能够修改父模板中的block内容,子模板中不再block中的内容是不合法且不显示的。

          子模板能够通过关键字append/prepend将内容添加到父模板block的前面或者后面。

     {smarty.block.parent/child}

          子模板也能够获得父模板中的内容添加到指定位置。

          父模板也能指定子模板block内容在父模板的block中的展示位置。

静态化:

     ob_start、ob_flush、ob_clean、ob_get_contents

缓存:

     缓存原理是使用上面的ob静态化函数,

     获取融合后的模板php输出的HTML内容生成的HTML文件。

     当下次请求到达的时候,直接读取HTML文件返回即可,不再需要执行PHP文件了。

     当然对于动态内容来说,会存在缓存内容。

     caching、is_cached、cache_time

     局部不适用缓存<{no cache}><{/no_cached}>

     smarty->clear_cache/clearAllCache

使用:

init方法,设置一些基本的结构:

configDir、pluginDir目录下的文件会自动加载。 

写的一个smarty模板: