前提:
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:"\t"}
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: 判断某模板是否存在

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

smarty模板开发基础总结的更多相关文章

  1. smarty模板的基础搭建

    1.下载smarty模板,官方即有 2.解压即可.你会得这样的目录 除了libs文件夹其余都可以删掉(不知道有啥用). 3.在当前目录下分别创建templates.templates_c.cache. ...

  2. smarty模板引擎基础(二)

    smarty模板引擎所需文件夹共可分为存放页面缓存的(cache).存放配置文件的(configs).存放模板扩充插件的(plugins).存放模板文件的(templates).存放编译后的模板文件的 ...

  3. Smarty模板的基础

    对前后端进行分离 如果要用的话,要从网上把smarty文件下载下来,才能用 smarty的核心是一个类 建一个php文件,写一个类文件 <?php class smarty { public $ ...

  4. smarty模板引擎(一)基础知识

    一.基本概念 1.什么是mvc?     mvc是一种开发模式,核心思想是:数据的输入.数据的处理.数据显示的强制分离. 2.什么是smarty?     smarty是一个php的模板引擎.更明白的 ...

  5. MVC开发模式以及Smarty模板引擎的使用

    Linux 全局安装 composer 将目录切换到/usr/local/bin/目录 cd /usr/local/bin/ 在 bin 目录中下载 composer curl -sS https:/ ...

  6. smarty模板基础1

    smarty模板的作用可以让前端和后端分离(也就是前端的显示页面和后端的php代码). smarty模板的核心是一个类,下载好的模板中有这么几个重要的文件夹 (1)libs核心文件夹(2)int.in ...

  7. smarty模板基础2

    Smarty自带了一些内置函数,这些内置函数是Smarty模板引擎的组成部分.他们被编译成相应的内嵌PHP代码,以获得最大性能. 您创建的自定义函数不能与内置函数同名,也不必修改这些内置函数. 其中一 ...

  8. smarty模板基础3 *缓存数据*

    缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 < ...

  9. smarty模板基础----缓存数据

    缓存数据,这个并不是暂存的缓存,而是写入了内存的缓存 通过一个例子来书写:缓存数据 一.书写php和html页面的基本功能 既然是用smarty模板,那么前端和后端要分开写了 (1)php页面 1 2 ...

随机推荐

  1. 设置Sysctl.conf用以提高Linux的性能(最完整的sysctl.conf优化方案)

    Sysctl是一个允许您改变正在运行中的Linux系统的接口.它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能.用sysctl可以读取设置超过五百 ...

  2. [Windows Azure] Enabling Diagnostics in Windows Azure

    Enabling Diagnostics in Windows Azure Windows Azure Diagnostics enables you to collect diagnostic da ...

  3. running boot2docker -> error in run: Failed to get machine “boot2docker-vm”: machine does not exist

    登陆和使用.详细请看.....https://github.com/boot2docker/boot2docker boot2docker start error in run: Failed to ...

  4. ubuntu下安装vmTools, 和共享文件

    如果没有需要下载一个vmTools,我是下载的 然后加载到光驱,然后在ubuntu下面可以找到光驱 解压里面的文件, 我解压到 Documents下面 然后ctrl + alt + t进入控制台 cd ...

  5. BleedTree动画混合树[Unity]

    Unity在中土大陆的大肆推广能从广泛的中文翻译资料中看出.所以,手册才是王道. 游戏动画中的一个常见任务是在两个或更多相似运动之间混合.最佳的已知示例可能是根据角色速度混合行走和奔跑动画.另一个示例 ...

  6. ES6里新添加了两个很好用的东西,set和Array.from。

    set是一种新的数据结构,它可以接收一个数组或者是类数组对象,自动去重其中的重复项目. 在这我们可以看见,重复的项目已经被去掉了,包括NaN.正常情况下,NaN === NaN 返回的是false,但 ...

  7. js判断浏览器内核和版本(包括手机端设备)

    var X, xue;xue = xue || function(expr, fn) {    return xue.dom ? xue.dom(expr, fn) : {};};X = xue;wi ...

  8. MFC让进程利用所有处理器核心

    参考资料: http://blog.csdn.net/baodi_z/article/details/1857820 http://blog.csdn.net/cbnotes/article/deta ...

  9. kali kvm Requested operation is not valid: network 'default' is not active

    安装时候参考的:http://www.ilanni.com/?p=6101 今天安装完kvm,满是幸福的装了个xp,重启后出现了一个错误 Requested operation is not vali ...

  10. CentOS7下查询硬件信息

    原文:https://blog.csdn.net/pwb1994001/article/details/80896267 因为个人需要,整理的 参考:https://blog.csdn.net/dre ...