• PHP-深入学习Smarty


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

    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:"/[ ]/":" " }>

      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 = " ", $limit = false): 长字段自动换行 <{ $title|wordwrap:20:"<br /> " }>

    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或者用户信息等)

      

  • 相关阅读:
    Android学习小Demo一个显示行线的自定义EditText
    Android中自定义checkbox样式
    android圆角View实现及不同版本这间的兼容
    android下大文件分割上传
    drwtsn32.exe 遇到问题须要关闭。我们对此引起的不便表示抱歉
    【分享】深入浅出WPF全系列教程及源码
    iOS国际化时遇到的错误:read failed: the data couldn&#39;t be read because it isn&#39;t in the correct format.
    void及void指针含义的深刻解析
    堆和栈的差别(转过无数次的文章)
    sizeof,终极无惑(上)
  • 原文地址:https://www.cnblogs.com/JohnABC/p/3396397.html
Copyright © 2020-2023  润新知