php smarty数学函数,smarty详解二:从文件读取变量、保留变量、数学计算、内建函数...

(3).在smarty中,访问对象(了解)

我们也可以在smarty中访问php中分配的对象。

Index.php

0818b9ca8b590ca3270a3433284dd417.png

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

8.从文件中获取变量

Smarty除了可以访问php分配的变量外,还可以从文件中直接读取变量。我们先在我们的项目根目录中创建一个txt文件,命名为config。并在其中填写上如图内容:

0818b9ca8b590ca3270a3433284dd417.png

注意,要让smarty读取文件中的变量,需要注意格式。如上图所示,格式大致为:变量名 = 变量值的形式。

下面,我们在index.html文件中写入如图的代码,然后运行:

Index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

PS:若变量在编程过程中使用非常平凡或是为了方便以后的维护,建议从文件中读取变量。例如,可以将网页背景颜色写在一固定文件中保存,若以后需要修改,只需要更改文件配置即可。

9.smarty保留变量

Smarty还提供了丰富的保留变量,像是页面请求变量、$smarty.now等。这些变量在平时开发中不是非常常用,因此稍微了解即可。

(1). 页面请求变量

页面请求变量包括了get、post、session、env、server等。我们取get的例子进行讲解,其余可以参考手册。

Index.html

0818b9ca8b590ca3270a3433284dd417.png

我们在浏览器栏中添加上get请求数据,例如:http://localhost/Smarty/index.php?username=zy

输出结果为:

0818b9ca8b590ca3270a3433284dd417.png

(2). $smarty.now

$smarty.now输出一个1970年1月1日00:00到现在的时间戳,单位为秒,例如:

Index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果为:

0818b9ca8b590ca3270a3433284dd417.png

(3).$smarty.const:获取php的常量

(4).$smarty.capture:获取…..的内容

(5). $smarty.config:获取文件变量的值。

(6).$smarty.section,$smarty.foreach等

10.在smarty模板中进行简单的数学运算

我们可以在smarty模板中进行简单的数学运算,比如+、-、*、/等,例如:

Index.php:

0818b9ca8b590ca3270a3433284dd417.png

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

但需要注意的是,smarty模板中只能进行最简单的运算,若是含有括号等高级运算,则会出现报错:

Index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

11.内建函数

到现在,可能大家都有一个感觉,那就是:smarty虽然能够做到V-C的100%分离,但是在访问变量,特别是数组变量时,没有一个很好的机制以便于快速便利。当然,smarty的编写者考虑到了这个问题,于是,smarty丰富的内建函数便应运而生。

1. foreach与foreachelse

在smarty中,为了能够快速的便利数组,我们采用smarty强大的内建函数foreach。Foreach的基本使用是:

………

我们举例说明:

Index.php:

0818b9ca8b590ca3270a3433284dd417.png

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

Foreach一个比较好理解的办法是,可以记成:循环(foreach)从(from)数组($arr)取出元素(item)。特别需要注意的是,item后接的单位元素名是没有$符的。

现在,我们不仅需要从分配的数组中获得单位元素,还需要获得这个单位元素的key,有没有办法呢?答案是有的,我们可以在foreach中添加key属性即可。例如:

index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

可能现在我们会有疑惑,既然foreach是用来循环数组的,那么foreachelse是用来干嘛的?

Foreachelse是当foreach中from的数组没有值时才执行,例如:

Index.php

0818b9ca8b590ca3270a3433284dd417.png

Index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

另外,foreach可以进行多层嵌套以进行多维数组的读取。例如:

Index.php:

0818b9ca8b590ca3270a3433284dd417.png

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

(2).config_load:从文件中读取变量,请参考前面第8

(3):capture

capture函数的作用是捕获模板输出的数据并将其存储到一个变量里,而不是把它们输出到页面.例如任何在 {capture name="foo"}和{/capture}之间的数据将被存储到变量$foo中。比如:

index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

值得注意的是,与中的所有内容都将被赋值给名为name的变量。并且,对于capture赋值的变量需要使用保留变量$smarty.capture读取。

(4):if else if

Smarty中也有进行判断的if-else-if语句,其功能强大,与php基本一致。if 必须于 /if 成对出现. 可以使用 else 和 elseif 子句. 可以使用以下条件修饰词: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、==、!=、>、=. 使用这些修饰词时必须和变量或常量用空格格开.

例如:

Index.php:

0818b9ca8b590ca3270a3433284dd417.png

Index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

(5)、include:

Include的作用是在某一smarty模板中包含其他的smarty的模板。它常用的属性有两个,file指定需要包含的文件,assign给包含的文件变量赋值:

我们在templates下在创建一个html文件,并命名为include_demo.html并写入内容如图:

0818b9ca8b590ca3270a3433284dd417.png

index.html进行包含include_demo.html文件:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

当然,我们还可以利用assign属性给include_demo.html赋值

Index.html

0818b9ca8b590ca3270a3433284dd417.png

Include_demo.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

(6).include_php:include_php从名字就可以看出,其是用来包含php文件的。但是由于我们想做到V-C分离,所以此函数在实际开发中不是很常用,如果有需要请参考手册。

(7).strip

Strip主要用来清除html代码的空格或是回车。用例子更容易理解:

未使用strip时

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

现在我们查看这个html文件的源代码

0818b9ca8b590ca3270a3433284dd417.png

里面具有空格、回车并具有良好的排版

现在我们使用strip:

Index.html:

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

而当我们查看源代码的时候发现,源代码中的空格与回车都不见了,如图:

0818b9ca8b590ca3270a3433284dd417.png

(8). ldelim,rdelim:

ldelim,rdelim用于在模板中输出分隔符

index.html

0818b9ca8b590ca3270a3433284dd417.png

输出结果:

0818b9ca8b590ca3270a3433284dd417.png

(9).literal:

Literal的作用是与之间的文本不进行处理,而是直接显示其内容,该特性用于显示有可能包含大括号等字符信息的 javascript 脚本. 当这些信息处于 {literal}{/literal} 标签中时,模板引擎将不分析它们,而直接显示.

(10).php

我们可以在模板中直接使用….特性来使用php脚本。但不推荐使用,详情请参考手册。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值