Smarty基本语法


Smarty基本语法

 

站在前端开发人员的角度使用smarty。包括定界符、注释、变量和函数。

1.定界符

Smarty默认的定界符是 {}

使用细节:

1.任何在定界符之外的内容,都是静态的,是不会被解析的(包括php代码)。

2.{ 和 $ 中间不能有任何空格,否则将不会解析。

3.如果在页面中有css和js,会怎么样呢?

4.默认的定界符是可以修改的。

Smarty基本语法

Smarty基本语法

出现了css和js的冲突,该如何处理?

a. 所有以{ 开头的地方,都空一格

b. 将css和js以外部的方式引入

c. 使用内置函数 literal

d. 更改定界符

Smarty基本语法

更改定界符:

 Smarty基本语法

在模板中使用,如下:

Smarty基本语法

解决冲突最好的方式:外部引入css和js,对于内部出现的使用literal。

2.注释

格式:左定界符* 注释内容 *右定界符

Smarty基本语法

注释的内容,会被过滤掉。

注释不能嵌套。

3.变量

变量就是在模板中,可以使用的某个符号,它保存了一些数据。

变量的来源有如下三种:

1. 通过PHP程序中的assign函数分配过来

2.保留变量

3. 配置变量

 其中保留变量和配置变量无需在php中分配,直接在模板中使用的。

 (1).assign变量(重点)

使用最多的。

重点是我们分配的变量有一些类型的?

复习:php中的数据类型 --- 8种

422阵容

4:四种标量类型,整型、浮点型、字符串、布尔型

2:两种复合类型,数组、对象

2:两种特殊类型,资源和null

标量类型,简单来说,就是只能表示单个值,$a = 100,$b= ‘smarty’

复合类型,意味着一个变量可以表示多个值。$arr = array(100,’smarty’,true)

在smarty中,您认为哪些类型是适合分配的,哪些是不合适的?

 不合适的:资源,对象,null。

结论:标量类型和数组类型是经常需要分配的。

echo 变量

对于变量有要求,一定是字符串类型,如果不是,则需要隐式转换。

false -> ‘’

数组-> Array

Smarty基本语法

模板中代码如下:

Smarty基本语法

结果如下:

Smarty基本语法

说明一件事情:在php中,索引数组和关联数组本质上是一样的。只不过对于索引数组而言,它的下标都是数字,所以可以去掉那个引号

(2).保留变量

无需在php中分配,直接可以在模板页面中使用的变量。包括php中的超级全局变量,比如$_GET,$_SERVEER,还有smarty自带的一些变量。

使用格式:{$smarty.保留变量名}

案例

 Smarty基本语法

在模板中使用保留变量

Smarty基本语法

结果如下:

Smarty基本语法

(3).配置变量

无需在php程序中分配的,但和保留变量,它是通过配置文件配置的。

在哪里配置?

参考demo文件夹

Smarty基本语法

我们也创建一个configs文件夹,并创建一个site.conf文件,如下:

Smarty基本语法

配置文件该怎么写?

直接打开test.conf如下:

Smarty基本语法

和php.ini相似

自己创建配置如下:

Smarty基本语法

如何来使用配置变量

首先,需要在模板中使用config_load函数引入该配置

然后,在模板中使用如下格式引用具体变量:

{#配合项名#}

{$smarty.config.配合项名}

Smarty基本语法

在模板中输出如下:

Smarty基本语法

结果如下:

Smarty基本语法

注意细节

配置变量必须先载入配置文件才能使用,使用config_load函数载入

 

配置信息可以分段设置,此时需要在引入时使用section指定段名(对比php.ini)

 

可以在配置文件中添加注释

4.内置函数

函数,根据功能的不同,在smarty中将函数分成三大类:

内置函数

变量修饰器

函数插件(自定义函数)

为什么需要内置函数?

针对一些复杂的输出,是需要借助于内置函数才可以。

好有一些其他的功能,比如config_load,literal等。

常用的内置函数有哪一些?

Smarty基本语法

(1).if/else

 和php中的完全一样。也是用来实现选择结构的。

{if},{elseif},{else}

必须有配对的{/if}

 全部的PHP条件表达式和函数都可以在if内使用

 Smarty基本语法

编写一个案例

Smarty基本语法

模板中编写如下:

Smarty基本语法

结果如下:

Smarty基本语法

注意细节

每个{if} 都必须有一个配对的 {/if}

所有在php中使用的条件表达式和函数都可以在{if} 内使用

在smarty模板标签中,可以进行数学运算的

(2).foreach

重头戏。使用最多的一种。

Foreach是用于循环遍历的。

语法格式如下:

{foreach $arrayvar as $itemvar}

{foreach $arrayvar as $keyvar=>$itemvar

看案例

Smarty基本语法

在模板中使用foreach输出如下:

Smarty基本语法

结果如下:

Smarty基本语法

{foreach}还有一些属性,非常有用,有以下6个

ü @index , 当前数组索引,从0开始计算

ü @iteration,当前循环的次数,从1开始计算

ü @first,首次循环时,该值为true

ü @last,循环到最后一次时,该值为true

ü @total,总的循环次数,可在foreach内部使用,也可以在循环完成之后使用

ü @show,在foreach循环执行完之后,检测循环是否显示数据的判断

案例:实现表格隔行换色

在模板中输出如下:

Smarty基本语法

效果如下:

Smarty基本语法

注意细节

还带一个 {foreachelse}的分支,当$arr中没有内容时会执行

smarty 2写法 {foreach from = $arr key = "key" item="value"} 也是可以支持的

(3).section

用来循环的。

只能循环索引数组(下标是连续的),对于关联数组是不能使用的。

Smarty基本语法

其中name的值就是 对应 数组的 下标,具体来说,就是0,1,2,3....

loop的值,其实就是要循环的次数,通常是一个整型,也可以使用数组作为它的值如果是数组,则会使用count函数对数组进行统计,将结果作为循环的值

案例:

Smarty基本语法

在模板中编写如下:

Smarty基本语法

输出结果如下:

Smarty基本语法

注意细节

loop 后面接的通常是 分配过来的数组,也可以直接写一个数字,如果接的是一个数组,则会计算其长度,作为其循环总次数。

而item 相当于数组的索引值,即 0 ,1, 2,这样的索引值。

和foreach类似,可以使用 index、iteration、first、last、total等属性,访问方式 $smarty.section.name.index,其中name就是name属性的值。

记住,foreach和section的区别

foreach可以遍历任意数组,而section只能遍历连续的索引数组。

在一个循环中,遍历多个数组,使用section会方便一点。

Smarty基本语法

Smarty基本语法

效果:

Smarty基本语法

5.变量修饰器

通常情况下,在模板页面中,直接输出从php程序中分配过来的变量,也有一些特殊的情况,需要对分配过来的变量/保留变量 进行再次处理。

Smarty提供了变量修饰器。

 

[需求]:输出当前时间。

Smarty基本语法

Smarty提供的变量修饰器,如下:

Smarty基本语法

实际上,除了这些之外,所有的php函数都可以作为变量修饰器来使用。

格式如下:{处理的内容|变量修饰器:参数1:参数2:参数3}

可以同时使用多个变量修饰器。

还有一个不常见的用法。

[需求]:输出指定次数(php程序中来分配的一个变量)的字符串hello。

Smarty基本语法

在模板中输出如下:

Smarty基本语法

结果如下:

Smarty基本语法

注意细节

除了smarty自带的一些调节器之外,php中的函数也是可以直接使用的

可以在一个变量上使用多个变量调节器,多个之间使用 | 隔开即可

可以自定义变量修饰器函数

6.函数插件

在手册中叫自定义函数。

作为前端开发人员,经常需要根据分配过来的变量,输出各种表现形式的html,如表单(比如radio、checkbox、select)、表格等。

Smarty基本语法

(1).单选框

html_radios

Smarty基本语法

案例

Smarty基本语法

在模板中输出如下:

Smarty基本语法

结果如下:

Smarty基本语法

(2).复选框

html_checkboxes

用来生成复选框组。

Smarty基本语法

案例

Smarty基本语法

在模板中编写如下:

Smarty基本语法

显示效果如下:

Smarty基本语法

(3).下拉列表

html_options,用于生成下拉列表

Smarty基本语法

案例

Smarty基本语法

在模板中输出

Smarty基本语法

显示效果:

Smarty基本语法

(4).cycle

用于交替循环某些值。

Smarty基本语法

[需求]:实现表格的隔行换色。

Smarty基本语法

在模板中编写如下:

Smarty基本语法

效果如下:

Smarty基本语法

当然,我们也可以循环交替更多的值,如下:

Smarty基本语法

生成的结构如下:

Smarty基本语法