zoukankan      html  css  js  c++  java
  • Smrty模版总结(转)

    转自:http://www.cppblog.com/amazon/archive/2011/11/21/160638.html

    前提:
    1. 部署smarty模板目录;
    2. 编写Smarty类的子类,定制好template_dir、compile_dir、config_dir、cache_dir、left_delimiter、right_delimiter、compile_check、caching等配置信息。
    3. 在BaseAction类中定义该类对象,然后便可使用。
    4. 暂定delimiter使用{和}

    一.  变量

    1. php变量
       A. 普通变量:{$var}
       B. 关联数组:{$array.var1.var2}
       C. 数字数组:{$array[0][1]}
       D. 对象:{$object->var}
       E. 在引号内的使用方法,以关联数组为例,其他类似:{function var="{$array.var1.var2}"}
    2. conf变量
       A. {#var#}
       B. 在引号内的使用方法:{function var="{#var#}"}
    3. smarty保留变量:略。

    二. 变量调节器

    1. capitalize / lower / upper
       用途:首字母大写 / 转为小写 / 转为大写
       用法:{$var|capitalize} / {$var|lower} / {$var|upper}
    2. count_characters / count_paragraphs / count_sentences / count_words
       用途:计算字节数,默认不计算空格符 / 计算段落数量 / 计算句子数量 / 计算词数
       用法:{$var|count_characters}  {$var|count_characters:true} / {$article|count_paragraphs} / {$article|count_sentences} / {$sentence|count_words}
    3. cat
       用途:字符串连接
       用法:{$var|cat:" is a boy."}
    4. nl2br
       用途:换行符替换为<br/>
       用法:{$var|nl2br}
    5. regex_replace / replace
       用途:正则替换 / 普通替换
       用法:{$var|regex_replace:"/[old]/":"[new]"} / {$var|replace:"old":"new"}
    6. spacify
       用途:在每个字符间插入指定字符
       用法:{$var|spacify:"^_^"}
    7. date_format
       用途:格式化日期,类似"-1 days ago"、"201111010000"、时间戳等都可以,与strftime()功能类似
       用法:{$time|date_format:"%H:%M:%S"}
    8. default
       用途:当变量为空时,设置默认值
       用法:{$var|default:"no value"}
    9. escape
       用途:转码,包括:html,htmlall,url,quotes,hex,hexentity,javascript
       用法:{$articleTitle|escape:"html"}
    10.indent
       用途:文字缩进,可以制定缩进字符数和使用什么字符代替
       用法:{$var|indent}  {$var|indent:4}  {$var|indent:4:" "}
    11.string_format
       用途:类似用sprintf
       用法:{$var|string_format:"%.2f"}
    12.strip / strip_tags
       用途:去除多余空白符,可以指定去除的字符 / 去除<>以及包含在里面的所有字符
       用法:{$var|strip}  {$var|strip:"&nbsp;"} / {$var|strip_tags}
    13.truncate
       用途:字符串截取,默认截取80字符,可以指定追加的字符串
       用法:{$var|truncate:40}  {$var|truncate:40:"...":true}
    14.组合修改器
       用途:顾名思义,可以将多个变量调节器组合使用,中间用|来代替
       例子:{$articleTitle|lower|spacify|truncate:30:"..."}

    三. 内建函数

    1. capture
       用途:捕获模板内容到某变量var,并不进行输出
       用法:
       在{capture}{/capture}中间的数据被捕获,可以使用$smarty.capture.var来使用,不指定name的话,默认为default
       {capture name=banner}
       This is a test.
       {/capture}
    2. foreach
       用途:循环处理
       用法:
       from: 数组,需要用$
       item: 单元元素名称,不需要用$
       key: key名称,不需要用$
       name: 该循环的名称,可以用于访问该循环,例如:{$smarty.foreach.foreachname.varname}
       {foreach item=contact from=$contacts}
       {foreach key=key item=item from=$contact}
       {$key}: {$item}<br>
       {/foreach}
       {/foreach}
       注意:在foreach中有一些特殊的变量,需要使用{$smarty.foreach.foreachname.***}来访问:
       iteration: 表示当前循环的执行次数,初始为1
       first: 循环第一次执行时被置为true
       last: 同上
       total: 用于显示循环执行的次数,在循环中或者循环后皆可使用
       show: 是foreach的一个标签,用于决定是否显示该foreach的内容
    3. include / insert
       用途:包含其他模板 / 与include不同, insert 所包含的内容不会被缓存,每次调用该模板都会重新执行该函数.
       用法:{include file="footer.tpl" title="Main menu" logo="http://my.domain.com/logo.gif"}
    4. if elseif else
       用途:分之判断
       用法:
       {if $name eq "Fred"}
       Welcome Sir.
       {elseif $name eq "Wilma"}
       Welcome Ma'am.
       {else}
       Welcome, whatever you are.
       {/if}
    5. ldelim / rdelim
       用途:分别表示左括号、右括号,因为这两个符号被用作smarty模板的标识符
       用法:
       {ldelim}  {rdelim}
    6. literal
       用途:在内部的数据当做文本处理,不使用smarty模板解析,主要用于javascript脚本等
       用法:
       {literal}
       ......
       {/literal}
    7. section
       用途:循环处理
       用法:
       name: 该循环的名称
       loop:决定循环次数的数组,注意这里的使用方法比较特别,可以使用section来对多个数组进行处理,但必须先用可以决定循环次数的数组给loop赋值
       {section name=customer loop=$custid}
       id: {$custid[customer]}<br>
       name: {$name[customer]}<br>
       address: {$address[customer]}<br>
       {section name=contact loop=$contact_type[customer]}
       {$contact_type[customer][contact]}: {$contact_info[customer][contact]}<br>
       {/section}
       <p>
       {/section}
       如果要遍历多维关联数组,需要这样来使用:
       {section name=customer loop=$contacts}
       name: {$contacts[customer].name}<br>
       home: {$contacts[customer].home}<br>
       cell: {$contacts[customer].cell}<br>
       e-mail: {$contacts[customer].email}<p>
       {/section}
       注意:与foreach类似,在section中同样有一些特殊变量可供使用,使用方法是:{$smarty.section.sectionname.***}
       index: 显示当前循环的索引,默认从0或者start开始
       index_prev: 显示上一个循环索引值,默认从-1开始
       index_next: 同上,直至最后都比上一次大1
       ineration: 同foreach,与index不同,后者是索引
       first: 同foreach
       last: 同foreach
       show: 同foreach
       total: 同foreach
    8. strip
       用途:将位于{strip}{/strip}内部html标签外的所有空格和回车清除干净,并以html标签开头和结尾
       用法:
       {strip}
       <table border=0>
         <tr>
        <td>
          <A HREF="{$url}">
       <font color="red">This is a test</font>
       </A>
        </td>
      </tr>
       </table>
       {/strip}
       上述输出为:
       <table border=0><tr><td><A HREF="http://my.domain.com"><font color="red">This is a test</font></A></td></tr></table>

    四. 程序员需要注意的地方

    1. 常量
       SMARTY_DIR:SMARTY_DIR常量用于定位smarty类文件的完整系统路径,必须以斜杠结束,也可以不定义,smarty模板会自动创建合适的值。
    2. 类属性
       $template_dir: 模板目录,也就是各html文件放置目录,默认为"./templates"
       $compile_dir: 编译后的模板目录,经过smarty解析后的html文件放置目录,默认为"./templates_c"
       $config_dir: 模板配置文件目录,默认为"./configs"
       $plugins_dir: 插件目录,默认为SMARTY_DIR 。 "plugins"
       $cache_dir: 存放模板缓存的目录,默认为"./cache"
       $debugging: 可以启动调试控制台,默认为false,很有用啊!!!
       $debug_tpl: 定义用于调试控制台的模板文件名字,默认为SMARTY_DIR . "libs/debug.tpl"
       $global_assign: 用于定义全局变量,例如:
           php里:$this->tpl->global_assign = array('my_global_1' => .....);
        在template里:{$smarty.my_global_1.***}
       $compile_check: 自动编译模板,默认设置为true,投入产品后为性能起见,可以设置为false。
       $force_compile: 强迫每次调用时重新编译模板,默认为false,不受$compile_check的限制,一旦设置为true后会强迫重新编译。
       $caching: 是否缓存模板输出,默认为false,有利于增强性能。
       $caching_lifetime: 缓存生存时间,只在$caching为true时有效,-1表示永远有效,0表示永远需要重新生成。单位是秒。
       注意:$compile_check、$force_compile、$caching三者的关系如下:
       A. 如果设置了$compile_check,如果任何模板文件或配置文件更新,都会重新编译,缓存也会重新生成;
       B. 如果设置了$force_compile,则$compile_check不起作用,而缓存也总会重新生成;
       C. 如果没有设置$caching,则没有缓存,性能受一定影响。

    五. smarty的method

    1. assign: 对模板使用到的php变量进行赋值
    2. assign_by_ref: 也是赋值,不过是引用赋值
    3. clear_all_assign: 清除所有赋值
    4. clear_all_cache: 清除所有缓存,参数可以指定阈值时间
    5. clear_assign: 清除某个赋值,可以指定单个变量名或者数组
    6. clear_cache: 清除某个template的缓存,需要指定template的名称
    7. clear_config: 清除所有配置变量,如果指定则清除特定配置变量
    8. config_load: 加载某配置文件并将数据输出到模板
    9. display: 显示某个模板
    10.fetch: 捕获某个模板的输出,与display不同的是,模板输出内容并不会直接显示出来(有什么用呢???)
    11.get_config_vars: 获取所有配置变量的值,也可以指定某个具体的变量名
    12.get_template_vars: 获取所有模板变量的值,也可以指定某个具体的变量名
    13.is_cached: 判断某模板的缓存是否存在,只有在$caching设置为true时才有效
    14.template_exists: 判断某模板是否存在

  • 相关阅读:
    axios基本用法
    Iframe父子窗口之间的跨域事件调用和传值
    js 比较两个日期的大小
    小程序webview实践
    小程序入口构造工具&二维码测试工具
    小程序无限层级路由方案
    TypeScript基础类型,类实例和函数类型声明
    小程序多业务线融合【完整分包业务接入】
    浅谈React16框架
    CSS Modules 与 scoped 的不一样
  • 原文地址:https://www.cnblogs.com/yongjiapei/p/5694672.html
Copyright © 2011-2022 走看看