zoukankan      html  css  js  c++  java
  • smarty基本语法

    smarty基本语法:

    1.注释:<{* this is a comment *}>,注意左右分隔符的写法,要和自己定义的一致。

    <{* I am a Smarty comment, I don't exist in the compiled output *}><!--里面的内容是注释的,不会显示在页面中-->

    2.变量:模板变量用美元符号$开始,可以包含数字、字母和下划线,这与php变量很像。可以引用数组的数字或非数字索引,当然也可以引用对象属性和方法。

    复制代码
    <{* $abc、$abc123、$abc_123、$abc[1]、$abc['a']、$abc->a、$abc->a()这些模板变量都是有效的。 *}>
    复制代码
    //数学和嵌入标签:
    <{$x+$y}>                             // 输出x+y的和.
    <{assign var=foo value=$x+$y}>        // 属性中的变量 
    <{$foo[$x+3]}>                        // 变量作为数组索引
    <{$foo={counter}+3}>                  // 标签里面嵌套标签
    <{$foo="this is message {counter}"}>  // 引号里面使用标签
    
    //定义数组:
    <{assign var=foo value=[1,2,3]}>
    <{assign var=foo value=['y'=>'yellow','b'=>'blue']}>
    <{assign var=foo value=[1,[9,8],3]}>   // 可以嵌套
    复制代码
    
    
    
    
    复制代码

    3.函数

    复制代码
    <{* 每一个smarty标签输出一个变量或者调用某种函数。在定界符内函数(一般定界符‘{}’包住)和其属性(同样在定界符内)将被处理和输出。
    例如: {funcname attr1="val" attr2="val"} *}>第一个参数是函数名,第二个参数是参数名,第三个参数是参数值。
    复制代码
    {config_load file="colors.conf"}//参数名为config_load,参数名为file,参数值为colors.conf。
    {include file="header.tpl"}
    {if $highlight_name}
        Welcome, <font color="{#fontColor#}">{$name}!</font>    
    {else}
        Welcome, {$name}!
    {/if}
    {include file="footer.tpl"}
    复制代码
    
    
    
    
    复制代码

    4.属性:smarty函数的属性很像HTML中的属性。静态数值不需要加引号,但是字符串建议使用引号。可以使用普通smarty变量,也可以使用带调节器的变量作为属性值,它们也不用加引号。甚至可以使用php函数返回值和复杂表达式作为属性值。一些属性用到了布尔值(true或false),它们表明为真或为假。如果没有为这些属性赋布尔值,那么默认使用true为其值。

    复制代码
    {include file="header.tpl"}
    {include file="header.tpl" nocache} // 等于nocache=true
    {include file="header.tpl" attrib_name="attrib value"}//这些都是属性,=前面是属性名,后面是属性值。
    {include file=$includeFile}
    {include file=#includeFile# title="My Title"}
    {assign var=foo value={counter}} // plugin result
    {assign var=foo value=substr($bar,2,5)} // PHP function result
    {assign var=foo value=$bar|strlen} // 使用调节器
    {assign var=foo value=$buh+$bar|strlen} // 更复杂的表达式
    {html_select_date display_days=true}
    {mailto address="smarty@example.com"}<select name="company_id">
    {html_options options=$companies selected=$company_id}</select>
    复制代码

    5.双引号里面嵌入变量

    Smarty可以识别嵌入在双引号中的变量,只要此变量只包含数字、字母、下划线和中括号[],对于其他的符号(句号、对象引用等等)此变量必须用两个反引号`(此符号和~'在同一个键上,一般在ESC键下面)包住。

    Smarty3增加了双引号对Smarty标签的支持。在需要包含调节器变量、插件、php函数返回值的情形中非常实用。

    复制代码
    {func var="test $foo test"}              // 显示 $foo,解析2个test之间的内容。
    {func var="test $foo_bar test"} // 显示 $foo_bar,可以解析出_。
    {func var="test `$foo[0]` test"} // 显示 $foo[0],支持''和[]的解析。
    {func var="test `$foo[bar]` test"} // 显示 $foo[bar],支持''和[]的解析。
    {func var="test $foo.bar test"} // 显示 $foo (而不是$foo.bar) Smarty只识别变量$foo,其它按原文输出
    {func var="test `$foo.bar` test"} // 显示 $foo.bar 加了反引号,Smarty能识别变量$foo.bar
    {func var="test `$foo.bar` test"|escape} // 调节器在引号外
    {func var="test {$foo|escape} test"} // 调节器在引号内
    {func var="test {time()} test"} // PHP 函数结果
    {func var="test {counter} test"      //插件结果
    {func var="variable foo is {if !$foo}not {/if} defined"} // Smarty 块功能
    复制代码

    6.数学运算:数学运算可以直接作用到变量值。

    {$foo+1}//直接相加
    {$foo*$bar}//直接相乘
    {$foo->bar-$bar[1]*$baz->foo->bar()-3*7}//取类里面的元素相乘

    7.忽略smarty解析:有时,忽略Smarty对某些语句段的解析很有必要。一种典型的情况是嵌入到模板中的javascript或Css代码。原因在于这些语言使用与Smarty默认定界符‘{’和‘}’一样的符号。

    {literal}//literal是smarty模板的标记,规定里面的内容不解析。
    function bazzy {alert('foobar!');}//不需要解析的内容
    {/literal}//结束标签

    smarty变量

    1.从php分配的变量

    Smarty有几种不同类型的变量,变量的类型取决于它的前缀符号是什么(或者被什么符号包围)。

    Smarty的变量可以直接被输出或者作为函数属性和调节器(modifiers)的参数,或者用于内部的条件表达式等等。如果要输出一个变量,只要用定界符将它括起来就可以。

    例如:下面就是讲变量$a注册到smarty里面,名字变成了ceshi。支持普通变量,索引数组、关联数组、对象等。

    复制代码
    <?php
    //引入配置文件
    include("../init.inc.php");//init.inc.php里面已经造smarty对象了。
    
    $a = "hello";
    $attr = array(1,2,3,4,5);
    $attr1 = array("one"=>"111","two"=>"222");

    class Ren
    {
      public name="张三";
    }
    $r = new Ren();
    $smarty->assign("ceshi",$a);//注入变量
    $smarty->assign("shuzu",$attr);
    $smarty->("guanlian",$attr1);
    $smarty->("duixiang",$r);
    $smarty->display("test.html");//调用模板文件来显示
    复制代码

    html页面解析方法

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <{$ceshi}><!--解析普通变量-->
    <{$shuzu[0]}><!--解析索引数组元素-->
    <{$guanlian.two}><!--解析关联数组元素,直接用.取元素-->
    <{$duixiang->name}><!--解析对象里面的内容-->
    </body> </html>
    复制代码

    2.(1)简单的配置文件

    从配置文件读取的变量

    加载配置文件后,配置文件中的变量需要用两个井号"#"包围或者是smarty的保留变量$smarty.config.来调用(下节将讲到),第二种语法在变量作为属性值嵌入至引号的时候非常有用,详细可参考双引号里值的嵌入。 

    示例:取配置文件configs里面的文件test.conf,里面的文件如下图所示。

    下面是取配置文件里面的内容的代码

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <{config_load file='test.conf'}><!--将配置文件加载到页面,相当于一个函数,file='test.conf'相当于传了一个属性-->
    <div style="100px; height:100px; {#color#}>"></div><!--<{#color#}>读取配置文件的内容,属性放在##之间-->
    </body>
    </html>
    复制代码

    显示结果为

    这说明可以用这种方法取出配置文件里面的属性,可以直接修改配置文件里面的内容来修改属性值。

    (2)复杂的配置文件

    在配置文件里面,如果文字的是在##里面,说明之间的是注释,是读取不出来的。

    如果出现[],代表把配置文件分了很多块,从[]开始到下一个[]之间的内容就是一个块。下面是读取块的内容:

    配置文件里面的内容:里面有2个块。

    读取的代码:

    复制代码
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>无标题文档</title>
    </head>
    <body>
    <{config_load file='test.conf' section='two'}><!--在config里面加上另外一个参数section,后面写上要读取的块的名字。-->
    <div style="100px; height:100px; {#color#}>"></div><!--section='one'显示的是绿色。section='two'显示的是红色-->
    </body>
    </html>
    复制代码

    3.{$smarty}保留变量

    (1)Request variables页面请求变量

    请求变量诸如$_GET, $_POST,$_COOKIE, $_SERVER, $_ENV and $_SESSION 这些都是可以直接拿来用的。下面是输出变量的方法。

    复制代码
    <{$smarty.get.page}><!--中间的是取变量的方法,.后面是变量名,下面的取值方法都一样-->
    <{$smarty.post.page}>
    <{$smarty.cookies.username}>
    <{$smarty.server.SERVER_NAME}>
    <{$smarty.env.PATH}>
    <{$smarty.session.id}>
    <{$smarty.request.username}>
    复制代码

    (2){$smarty.now}

    <{$smarty.now}><!--输出的是时间戳-->

    (3){$smarty.const}代表的是常量

    现在test.php页面定义一个常量

    define("AA","hello");//define代表的是常量

    读取常量:

    <{$smarty.const.AA}>

    输出结果为hello。

     (4){$smarty.capture}

    可以通过{$smarty.capture}变量捕获内置的{capture}...{/capture}模版输出。

     (5){$smarty.config}

    {$smarty.config}可以取得配置变量。

    <{$smarty.config.color}><!--也可以这样直接读取配置文件里面的内容-->

    (6){$smarty.section}

    {$smarty.section}用来指向{section}循环的属性,里面包含一些有用的值。

    (7){$smarty.template}

    返回经过处理的当前模板名(不包括目录)。


    (8){$smarty.current_dir} 

    返回经过处理的当前模板目录名。

    (9){$smarty.version}

    返回经过编译的Smarty模板版本号。

    4.变量调节器

    变量调节器作用于变量、自定义函数或字符串。变量调节器的用法是:‘|’符号右接调节器名称。变量调节器可接收附加参数影响其行为。参数位于调节器右边,并用‘:’符号分开。

    (1)capitalize

    将变量里的所有单词首字大写。它与php的ucwords()函数类似。写法如下:

    <{$articleTitle|capitalize}><!--第一个参数是变量的名字,中间用|隔开,后面写capitalize(相当于一个参数)-->

    (2)cat

    将cat里的值后接到给定的变量后面。即连接字符串。写法如下:

    <{$articleTitle|cat:"yesterday"}><!--第一个参数是变量名,中间用|隔开,后面是cat,再后面是要连接的字符串-->

    (3)count_characters

    计算变量里的字符数。写法如下:

    <{$articleTitle|count_characters}><!--第一个参数是变量名,|后面是方法count_characters-->

    (4)count_sentences

    计算变量里句子的数量。写法如下:

    <{$articleTitle|count_sentences}><!--第一个参数是变量名,|后面是方法count_sentences-->

    (5)date_format

    本调节器将格式化的日期和时间经php函数strftime()处理。Unix时间戳、mysql时间戳及由年月日组成的字符串格式的日期可以传递到smarty经php函数strtotime()解析。设计者可以使用date_format完全控制日期格式,如果传给date_format的日期为空值,但提供了第二个参数,那么将使用第二参数格式化时间。

    <{$smarty.now|date_format:""%Y-%m-%d %H:%M:%S}><!--将时间戳转化为时间-->

    (6)indent

    在每行缩进字符串,默认是4个字符。对于第一个可选参数,你可以指定缩进字符数,对于第二个可选参数,你可以指定使用什么字符缩进,例如' '作为tab。 

    (7)replace

    一种在变量中进行简单的搜索和替换字符串的处理。等同于php的str_replace()函数。 

    (8)strip

    用一个空格或一个给定字符替换所有重复空格、换行和制表符。

    (9)truncate

    从字符串开始处截取某长度的字符,默认是80个,你也可以指定第二个参数作为追加在截取字符串后面的文本串。该追加字串被计算在截取长度中。默认情况下,smarty会截取到一个词的末尾。如果你想要精确的截取多少个字符,把第三个参数改为"true" 。

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/benpaodegegen/p/6193990.html
Copyright © 2011-2022 走看看