本文中的边界标签分别为"<{"和"}>"

start-12, 都是静态模板中的内容, 即使函数也只是模板中的标签或者变量调解器;

13-end, 都是smarty对象的方法和属性

表达式中不能乱使用空格

1.注释

  <{* 我是注释内容 *}> //相当于PHP的注释, 而不是HTML文件的注释, 所以不会出现在页面源码中

2.函数

  每一个smarty标签输出一个变量或者调用某种函数(像include, foreach, section等均可认为为函数)

  <{ funcname varname1="aaa" varname2="bbb" }>

  <{ assign var="name" value="$firstname $lastname" }>

3.函数参数

  大部分函数都有自己的属性(参数), 以便说明和修改函数进行操作

  静态数值、布尔值(true, false, yes, no)以及变量做为参数值不需要加引号, 字符串必须加引号

  <{ include file="abc.html" }>

  <{ include file=$filename }>

  <{ funcname display_days=yes }>

4.函数参数为字符串时引号内变量的嵌入

  正常情况下(不会引起冲突)可以直接嵌入

  <{ func var="Hello $name !" }>

  <{ func var="Hello $names[0] !" }>

  而<{ func var="Hello $names.first_name" }> //则只会解释$names而不会解释$names['first_name'], 因为"."可以认为是边界符(同空格等)

  冲突情况下用"`"(与~同键)

  <{ func var="Hello `$names.first_name`" }> //会解释$names['first_name']

  <{ func values="one, two, `$smarty.config.val`" }>

  <{ func  }>

5.数学运算

  <{ $num+1 }> //$num和加号"+"及1之间不能使用空格

  <{ $num1*$num2 }>

  <{ if $num%2 }>

6.索引数组, 关联数组, 对象的使用

  <{ $names.firstname }> //关联数组

  <{ $names[0] }> //索引数组

  <{ $person->name }> //对象

7.导入配置文件的变量

  配置文件my.conf

    color = "#EEEEEE";

  导入<{ config_load file="my.conf" }>

  使用<{ #color# }>或者<{ $smarty.config.color }>

8.保留变量

  $smarty.[get|post|request|cookies|session|server|env].id 请求时的变量

  $smarty.now 当前时间戳 <{ $smarty.now | date_format: "%Y-%m-%d"}>

  $smarty.const 自定义常量

  $smarty.config 在使用config_load后导入的配置文件内容可以用此变量使用

  $smarty.section、$smarty.foreach 在使用smarty循环时用到的变量

  $smarty.template 当前使用的模板名称

9.变量调解器

  类似于Linux中的管道符, 后接命令(或函数)处理, 但与Linux不同的是变量调解器参数的使用方法为用冒号间隔参数

  注意: 如果你给数组变量应用单值变量的调节,结果是数组的每个值都被调节。如果你只想要调节器用一个值调节整个数组,你必须在调节器名字前加上@符号。例如: {$articleTitle|@count}(这将会在 $articleTitle 数组里输出元素的数目)

  capitalize: 首字母大写 <{ $title|capitalize }>

  count_characters: 计算字符数 参数true|false用来确定是否计算空格数 <{ $title|count_characters:true }>

  count_paragraphs: 计算段数 <{ $content|count_paragraphs }>

  count_sentences: 计算句数 <{ $content|count_sentences }>

  count_words: 计算单词数 <{ $content|count_words }>

  cat: 连接字符串 <{ $title|cat " Dota" }>

  date_format: 把时间戳格式化为日期形式 <{ $smarty.now|date_format:"%Y-%m-%d"}> 此参数与PHP或Python的strftime函数相同, 与date不同

  default: 为变量设置一个默认值, 当变量为空或者未设置的时候将赋值为默认值 <{ $title|default: "No title" }>

  escape: html转码, url转码; 参数为要转码类型, 包括html, htmlall, url, quotes, hex, hexentity等, 默认为html <{ $url|escape:"url" }>

  indent: 缩进 两个非必需参数, 第一个为缩进多少个字符, 第二个字符表示用什么字符进行缩进 <{ $content|indent:1:"&nbsp;" }>

  lower: 小写 <{ $title|lower }>

  upper: 大写 <{ $title|upper }>

  nl2br: 同PHP的nl2br函数, 把换行符转为<br /> <{ $content|nl2br }>

  regex_replace: 正则替换 两个必需参数, 一个为正则, 一个为要替换为的字符串 <{ $title|regex_replace:"/[\r\t\n]/":" " }>

  replace: 相当于PHP的str_replace <{ $title|replace:"John":"Nali" }>

  spacify: 插空, 是一种在字符的每个字符之间插入空格或者其他的字符(串), 默认参数为空格 <{ $title|spacify:"-"}>

  string_format: 相当于sprintf <{ $title|string_format:"%.2f" }>

  strip: 用一个空格或给定字符替换所有重复空格, 换行符以及制表符等, 默认为用空格替换 <{ $title|strip:"&nbsp;" }>

  strip_tags: 去除html标签, 无参 <{ $title|strip_tags }>

  truncate($length = 80, $suffix = "...", $limit = false): 截取字符串 <{ $title|truncate:30:"--":true }>

  wordwrap($width = 80, $used_wraper = "\n", $limit = false): 长字段自动换行 <{ $title|wordwrap:20:"<br />\n" }>

10.组合修改器

  把修改器组合起来使用 <{ $title|upper|truncate:20 }>

11.内建函数

  是smarty自带的内建函数, 是模板语言的一部分, 自定义函数与内建函数不可重名, 也不可以修改内建函数

  captrue: 捕获模板输出的数据, 并将其存储到一个变量里面, 而不是输出到页面, 任何在 <{ captrue name="mycap" }>和<{ /capture }>之间的数据将被存储到$mycap中, 变量名由name指定, 如果没有指定name则使用$default, 不能嵌套!在模板中使用$smarty.capture.mycap访问该变量

  config_load: 用于从配置文件中加载变量 <{ config_load file="config.php" }>

  foreach: 参数from-待循环数组 key-当前处理元素索引或者键名 item-当前处理元素 name-该循环的名称(用来访问该循环);其中from和item为必须 <{ foreach from=$names key=k item=name }>name:<{$name}><br /><{/foreach}>

  include: 参数file-路径相对于template_dir要包含的文件名, assign-模板的输出内容 这样就不会直接显示了 var-自定义传入变量以供要包含模板内部使用, 若与内部变量冲突则此变量有效 <{ include file="public.html" js="index.js" }>

  include_php: 同include使用方法, 但拥有参数once, 而无自定义参数列表 <{ include_php file="/htdocs/php/index.php" }>

  insert: 同include, 但是不论是否已经开启缓存, insert的内容都不会被缓存 参数:name-指定函数名称 之后会与"insert_"结合为insert_函数名,  也可传入自定义参数, assign-同include; script-插入函数前需要先包含的php脚本名称 <{ insert name="getAd" aid="1234" script="a.php" }>

  if elseif else: 修饰词 eq, ne, neq, gt, lt, lte, le, gte, ge, is even, is odd, is not even, is not odd, not, mod, div by, even by, odd by, ==, !=, <, >, <=, >=, &&, ||, !; 这些修饰词必须和变量或者常量用空格隔开 <{ if $name == "John" }>

  ldelim|rdelim: 代表定界符常量 {ldelim}在此文代表"<{", {rdelim}在此文代表"}>"

  literal: 不会解析其内文本 <{ literal }><script>function abc{alert("bcd");}</script><{ /literal }>

  php: 不赞成使用

  section, sectionelse: 参数name-键名, loop-要循环的数组, start-循环其实索引位置, step-循环步长(如果步长为负数, 则从后向前遍历), max-循环最大执行次数, show-是否显示该循环 必须指定name和loop <{ section name=k loop=$names }>{$names[k]}<br /><{ /section }> sectionelse表示数组为空时执行的操作

  strip: 去除字符串内任何首尾空格和回车, 会把html标签外无空格连起来<{ strip }><table border=0> <tr> <td> </td>  </tr> </table> <{ /strip }>

12.自定义函数

  assign: 赋值 <{ assign var="name" value="John" }>

  counter: 开始一个计数器 name-计数器名称 start-开始的数值 skip-步长 direction-方向(增减) print-本次调用本函数是否输出 assign-将值赋值给变量 <{ counter start=0 skip=1 print=true assign="c" }>

  cycle: 轮转(交替)使用一组值 name-名称 values-轮转的值, 默认以","分开 print-是否输出 delimiter-轮转的值的分隔符 assign-把值赋值给指定变量 <tr color="<{ cycle value="#000 , #FFF" }>"></tr>

  fetch: file-包含的文件名 assign-赋值给指定变量 <{ fetch file="a.html" assign="abc" }>

  其他的用来输出HTML的标签函数不如直接使用静态HTML

13.变量

  $template_dir-模板文件存放目录 $compile_dir-编译文件存放目录 $config_dir-配置文件存放目录 $cache_dir-缓存文件存放目录 #这些目录若为相对目录则是针对当前执行的php文件的相对目录

  $pugins_dir-插件文件存放目录(是一个数组) 默认是在smarty目录下的plugins目录, 如果指定了一个相对路径, smarty会首先在smarty目录下寻找, 然后到当前工作目录下寻找, 继而到php的include_path中寻找

  $caching-是否开启缓存  $cache_lifetime-缓存文件生存时间(-1永不过期, 0总是重新生成)

  $force_compile-强迫重新进行编译, 重新生成缓存

  $default_tempate_handler_func-当找不到模板文件时自动调用的方法

14.smarty对象的方法

  append($name, $value): 对象的$_tpl_vars数组中如果有$name键则向$_tpl_vars[$name]数组中添加一个值$value, 若$value为数组则合并

  append_by_ref($name, $value): 与append不同的是添加的变量的引用, 避免了内存的拷贝

  assign($name, $value): 使$_tpl_vars[$name]=$value

  assign_by_ref($name, $value): 同append_by_ref原理

  clear_all_assign(): 清除所有赋值, 即把$_tpl_vars设为空数组

  clear_assign([$string|$arr]): 清除指定赋值

  clear_all_cache(): 清除所有缓存文件

  clear_cache($tpl[, $cache_id][, $compile_id][, $expire_time]): 删除指定缓存文件

  clear_compile_tpl([$tpl]): 删除指定或者所有模板的编译文件

  clear_config([$con]): 删除指定或者所有配置变量

  config_load($file[, $paragraph]): 导入一个配置文件或者一个配置文件的其中一段

  display($file[, $cache_id][, $compile_id]): 包含并解析$template_dir目录下的$file模板 其内部执行其实调用的是fetch方法 也可以使用绝对路径"file:C:/www/a.html"作为$file的值

  fetch($file[, $cache_id][, $compile_id][, $display = false]): 包含进并解析一个模板内容并赋值给变量, 默认不输出

  get_config_vars([$var]): 获取指定或者所有配置变量值, 此方法用在config_load()之后

  get_template_vars([$var]): 获取指定或者所有已赋值的模板变量的值, 实际是返回$_tpl_vars数组

  is_cached($file[, $cache_id]): 判断指定缓存是否存在

  register_block(自定义块标签, 对应函数): 自定义标签是成对出现的, 对应函数有三个参数$params-对应标签中的参数, $content-对应加载快标签开始和结束之间的内容, &$smarty-不用管 然后在函数中return处理后的数据; 也可以在plungins下自定义block.快标签名称.php, 里面方法名为smarty_block_快标签名称($params, $content, &$smarty)

  register_function(自定义函数名, 对应函数): 自定义函数名是单出现的, 对应函数有两个参数$params, &$smarty, 可以用extract($params)进行拆分, 也可以通过关联键名来使用, 最后return处理后的数据

  register_modifier(自定义调解器名, 对应函数): 自定义调解器名是放在管道符之后的, 对应函数有无限个$str-要处理的数据, $var1...参数等, 最后做return处理

  register_object(自定义对象名, 对应对象): 可以用assign一个对象实现, 但本函数可以实现<{myobj->func var1="name" var2="sex"}>此类用户自定义函数, 而用assign也可以<{$myobj->func($var1, $var2)}>实现

  register_[pre|post|out]filter(自定义过滤器函数): 自定义过滤器函数有两个参数 $str-需要过滤的字符串(模板内容), &$smarty; 此函数对模板进行预处理过滤, 提交过滤, 输出过滤

  register_resource(): 注册资源, 暂缺

15.缓存

  设置生存时间$cache_lifetime 值-1表示永久缓存 0表示不缓存 2表示缓存两秒

  为指定模板指定生存时间 设置$caching=2; 而后设置$cache_lifetime为想要的时间;

  $force_compile 强制重新编译生成缓存

  is_cached()用来测试一个模板是否有有效的缓存

  内建函数insert的不能被缓存

  加入$cache_id生成多个模板缓存(可以用来缓存指定id的news或者用户信息等)

  

PHP-深入学习Smarty的更多相关文章

  1. 自己学习smarty的一些代码 和记录

    http://www.yiibai.com/smarty/smarty_install.html  手册可以看这里 index.tpl <!DOCTYPE html> <html&g ...

  2. smarty 学习 ——smarty 开发环境配置

    smarty 对于开发的便利性不用多说了,直接进行开发环境的配置. 1.下载smarty 开发包 直接在官网进行下载即可 2.引用开发核心库 将libs文件中的东西拷贝到工程. smarty.clas ...

  3. MVC架构学习之Smarty学习——病来而蔫

    前两天是五一小长假,而每次假期都想着如何如何刻苦一番,往往是自作多情.. 当然这次是有小病在身,多个借口吧. 一有病就蔫的不行...要锻炼了啊,脚估计也差不多了,游泳试试吧这周. 这次学习Smarty ...

  4. smarty 学习记录

    smarty模版是比较大众化的一个模版,在php开发过程当中被很多开发者视为最友好的模版之一,学习smarty课程对于很多培训机构来说也是列入了培训课程之一,那么很多方面就需要我们学习了一. 安装首先 ...

  5. Smarty格式化数字为INT数

    <? require("setup.php"); define('PAGETITLE','pagtitle'); function insert_top($lid,$sid) ...

  6. php smarty

     摘自:http://linux.chinaitlab.com/PHP/38324.html 刚开始接触模版引擎的 PHP 设计师,听到 Smarty 时,都会觉得很难.其实笔者也不例外,碰都不敢碰一 ...

  7. 模板引擎(smarty)知识点总结II

    今天咱们继续来学习smarty!!! 知识点1:对于三种变量 常量的引用 有哪三种变量?a.assign赋值 b.系统保留变量(包括:$smarty.get,$smarty.post,$smarty. ...

  8. PHP + Smarty + html5 构建Wap应用

    一 简介     Smarty是一个PHP编写的模板引擎(template engine),主要用于构建web应用程序的表示层.Smarty的主页是http://www.smarty.net/down ...

  9. php教程之Smarty模板用法实例

    分享下php之Smarty模板的使用方法. 剖析了smarty模板的使用方法,对于学习smarty的朋友有一定的参考价值. 详情如下: 一.模板中的注释每一个Smarty模板文件,都是通过Web前台语 ...

随机推荐

  1. 采用Operator-sdk轻松将helm chart转为Operator

    去年就接触Operator,从Oracle发布的WebLogic Operator到mySQL Operator,构建的源码一大堆,但感觉一直缺少合适的开发框架能够避免复杂性快速生成, 随着技术的日益 ...

  2. How To Open An URL In Android’s Web Browser

    How To Open An URL In Android’s Web Browser 以下核心代码片断,将展现使用“android.content.Intent” 打开一个指定的 URL. butt ...

  3. 性能二 fortnite unreal opt

    https://replay.unrealsummit.co.kr/data2018/usm2018_42.pdf?ckattempt=1 https://www.unrealengine.com/e ...

  4. 依赖注入 DI 控制反转 IOC MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. Android NFC近场通信03----读写MifareClassic卡

                                           Android NFC近场通信02----读写MifareClassic卡 一.MifareClassic卡 相关 一般来 ...

  6. .NET/Mysql-petatoco连接mysql数据库

    安装mysql数据库 用nugget添加.net连接mysql数据库的组件

  7. CentOS 7上安装WordPress详细步骤

    一.搭建Wordpress服务器环境需求: php 5.2.4 或者更高版本.MySQL 5.0 或者更高版本. 二.搭建Wordpress平台:以下以Wordpress3.92版本为例进行说明,如果 ...

  8. linux的子进程调用exec( )系列函数

    exec( )函数族 : 以下我们来看看一个进程怎样来启动还有一个程序的运行.在Linux中要使用exec函数族.系统调用execve()对当前进程进行替换,替换者为一个指定的程序,其參数包含文件名称 ...

  9. PCL系列——怎样逐渐地配准一对点云

    欢迎訪问 博客新址 PCL系列 PCL系列--读入PCD格式文件操作 PCL系列--将点云数据写入PCD格式文件 PCL系列--拼接两个点云 PCL系列--从深度图像(RangeImage)中提取NA ...

  10. MVC应用积累

    1.Controller中的跳转 (1)直接Redirect后加(Controller/Action):Response.Redirect("/Home/Index"); (2)直 ...