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. MPP 二、Greenplum数据加载

    Loading external data into greenplum database table using different ways... Greenplum 有常规的COPY加载方法,有 ...

  2. poj3207

    poj3207 题意 平面上,一个圆,圆的边上按顺时针放着n个点.现在要连m条边, 比如a,b,那么a到b可以从圆的内部连接,也可以从圆的外部连接. 给你的信息中,每个点最多只会连接的一条边.问能不能 ...

  3. 数据库MySQL安装和校验

    1.安装MySQL 双击已经下载的安装包: Typical:典型安装,第一次安装建议选择该类安装 Custom:自定义安装,在对数据库熟悉后,知道自己需要哪些组件时,可以选择该类安装(这里选择的是自定 ...

  4. Java常用类之String类、Stringbuffer和Random类练习

    定义一个StringBuffer类对象, 1)使用append方法向对象中添加26个字母,并倒序遍历输入 2)删除前五个字符 package 第十一章常用类; /** * 定义一个StringBuff ...

  5. Vue基础概念,学习环境等

    前提: 你已有 HTML.CSS 和 JavaScript 中级前端知识. 概念: Vue.js(读音 /vjuː/,类似于 view) 是一套构建用户界面的渐进式框架.与其他重量级框架不同的是,Vu ...

  6. html5shiv.min.js 和 respond.min.js 作用(bootstrap做IE低版本兼容时需要用到这两个插件)

    1. html5shiv.min.js解决ie9以下浏览器对html5新增标签的不识别,并导致CSS不起作用的问题. respond.min.js让不支持css3 Media Query的浏览器包括I ...

  7. 使用DBeaver连接hive

    介绍 在hive命令行beeline中写一些很长的查询语句不是很方便,查询结果也不是很友好,于是找了一个hive的客户端界面工具DBeaver,它也支持很多符合JDBC连接的数据库,例如MySQL.O ...

  8. Java通过jxl解析Excel文件入库,及日期格式处理方式 (附源代码)

    JAVA可以利用jxl简单快速的读取文件的内容,但是由于版本限制,只能读取97-03  xls格式的Excel. 本文是项目中用到的一个实例,先通过上传xls文件(包含日期),再通过jxl进行读取上传 ...

  9. Ubuntu下录音机程序的使用

    在Ubuntu中使用系统自带的录音机程序可以录制电脑的音频输出(比如,电脑正在播放视频的声音),或录制外部环境音频输入(比如,自己说话的声音) 1.录制电脑音频输出 在“硬件”选项中,将”选中设备的设 ...

  10. Redis可视化工具Redis Desktop Manager使用

    Redis可视化工具,RedisDesktopManager 没错,它开源的,托管在github上:https://github.com/uglide/RedisDesktopManager 还不错, ...