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="width: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="width: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个字符。对于第一个可选参数,你可以指定缩进字符数,对于第二个可选参数,你可以指定使用什么字符缩进,例如'\t'作为tab。

(7)replace

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

(8)strip

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

(9)truncate

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

smarty模板基本语法的更多相关文章

  1. 12月15日smarty模板基本语法

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

  2. PHP15 Smarty模板

    学习目标 Smarty基本概念 Smarty安装和配置 Smarty模板设计 Smarty流程控制 Smarty基本概念 一种模板引擎,在系统中进行预处理和过滤数据.是主流的PHP模板引擎,此外PHP ...

  3. 命名空间namespace、smarty使用(视图分离,MVC)、smarty模板语法、smarty缓存、MVC模式

    一.命名空间:namespace 命名空间 可以理解为逻辑上的使用,为了防止重名 namespace :关键字 加载:require_once();//加载一次 include_once() 申明命名 ...

  4. smarty模板引擎

    1.    使用smarty 1.1 项目引入 // 3, 连接数据库,提取相关数据 $title = "Smarty模板引擎"; $content = "Smarty模 ...

  5. Smarty模板学习

    1.基本语法 所有的smarty模板标签都被加上了定界符.默认情况下是 { 和},但它们是可被改变的. 在smarty里,所有定界符以外的内容都是静态输出的,或者称之为不可改变.当smarty遇到了模 ...

  6. 深入浅出之Smarty模板引擎工作机制(一)

    深入浅出Smarty模板引擎工作机制,我们将对比使用smarty模板引擎和没使用smarty模板引擎的两种开发方式的区别,并动手开发一个自己的模板引擎,以便加深对smarty模板引擎工作机制的理解. ...

  7. Smarty模板引擎技术二

    Smarty模板引擎技术 内建函数 include_php内建函数 作用:载入一个php文件,将载入的文件的内容赋值给一个变量   注意:该内建函数只能在2.0中使用,如果使用的话,必须得实例化Sma ...

  8. Smarty模板引擎技术

    Smarty模板引擎技术 什么是模板引擎? 什么是Smarty模板引擎? 为何选择Smarty模板引擎? 如何使用Smarty模板引擎? 一.历史背景 场景一:回顾之前编写PHP项目的方式 //链接数 ...

  9. 转载-smarty教程(基本语法)

    转自:http://hi.baidu.com/qxxgvpdtzhbckpr/item/681049160d7be60db98a1aec 1.smarty的配置      首先,使用smarty第一件 ...

随机推荐

  1. C语言之循环结构

    程序结构: 顺序结构 条件结构(分支结构) if结构,if-else结构 ,多重if分支结构,switch结构 循环结构:做重复的事情 while循环,do..while循环和for循环. 写循环结构 ...

  2. 使用nodeJS实现前端项目自动化之项目构建和文件合并

    前面的话 一般地,我们使用构建工具来完成项目的自动化操作.本文主要介绍如何使用nodeJS来实现简单的项目结构构建和文件合并 项目构建 假设,最终实现的项目名称为'test',结构如下图所示 那么,首 ...

  3. 每天一个Linux命令—— WC

    一.首先看一下帮助 Usage: wc [OPTION]... [FILE]...  or:  wc [OPTION]... --files0-from=F Print newline, word, ...

  4. C语言到C++(1) - 基本变化

    说到C++和C语言的区别,大部分人都会想到面向对象和面向过程.然而这种说法并不准确.面向对象和面向过程指的是两种不同的程序设计思想,而C++与C是两种编程语言,难道C++就不能用于面向过程去解决问题吗 ...

  5. \classes\META-INF\MANIFEST.MF (系统找不到指定的路径。)

    开发项目重启eclipse 发现了如下错误! 解决方法 选择出现错误的项目 点击clean 即可~

  6. kali高速更新源以及主题修改方法

    文章不小心删了~这是我以前写的文章了了.实用性较强,所以现在补回来! 安装完kali之后,需要对软件进行一次整体更新:apt-get update & apt-get upgrade 但是,先 ...

  7. 高性能迷你React框架anu在低版本IE的实践

    理想是丰满的,现实是骨感的,react早期的版本虽然号称支持IE8,但是页面总会不自觉切换到奇异模式下,导致报错.因此必须让react连IE6,7都支持,这才是最安全.但React本身并不支持IE6, ...

  8. 《Python编程从入门到实践》_第六章_字典

    一个简单的字典 #用户信息 user = {','city':'shanghai'} print(user['name']) print(user['age']) print(user['city'] ...

  9. <iOS 组件与框架> -- UIKit Dynamics

    UIKit Dynamics 结合 『iOS 组件与框架 』一书.总结的知识点与demo demo 地址: GitHub地址 一.概述 1.UIKit Dynamics 是 iOS 7 新增的内容.其 ...

  10. csvn install guide

    一. make sure java install $ java -version $ echo $JAVA_HOME 二. untar tgz file $ tar xf CollabNetSubv ...