smarty怎么用_item怎么用

smarty怎么用_item怎么用1、简介含义:Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即我们常说的MVC,这个引擎的作用就是将C分离出来。环境需求:PHP5.2或者更高版本我使用的环境是:PHP5.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1、简介

含义:Smarty是PHP的一个引擎模板,可以更好的进行逻辑与显示的分离,即我们常说的MVC,这个引擎的作用就是将C分离出来。

环境需求:PHP5.2或者更高版本

我使用的环境是:PHP5.3,windows 环境

2、安装

     在网上下载Smarty包直接将其解压,我们需要的仅仅是里面的libs文件夹。Libs文件里面都是库文件,我们不应该修改里面的任何内容。解压完毕后就直接将libs文件夹放入到我们需要使用的网站根目录。

smarty怎么用_item怎么用

 

3、基本情况简介

     首先打开Smarty.class.php文件看看里面的一些代码:

Smarty的构造器:

  smarty怎么用_item怎么用

templates:默认存放模板文件夹

templates_c:默认存放混编文件的文件夹

cache:存放缓存

configs:存放配置文件

默认左右边界符:

  smarty怎么用_item怎么用

 

4、使用

     从上文了解到Smarty需要一些文件夹用来分别存放不同类别的文件。有templates、templates_c、cache、configs等文件夹。这是默认文件夹名称,你可以根据你的喜好对它们进行更改。

1、下是我建立的文件夹:

smarty怎么用_item怎么用

2、简单实例

先在templates文件夹下准备自己需要的模板文件。test1.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>smarty test1</title>
 6 </head>
 7 <body>
 8 它的名字叫{$name}
 9 </body>
10 </html>

接着在根目录下建立访问的逻辑文件。test1.php

1 <?php
2 require './libs/Smarty.class.php';
3 $smarty=new Smarty();
4 $name='刘二狗';
5 $smarty->assign( 'name' , $name );
6 $smarty->display('./test1.html');

访问test1.php结果为:

  smarty怎么用_item怎么用

当访问完后将会在templates_c中生成一个相应的混编文件

  smarty怎么用_item怎么用

这就是Smarty在PHP中的简单使用。

5、Smarty常用的语法

5.1、普通变量的声明与使用

  一共有两种声明变量的方法。

  第一种:上面的例子已经使用过,即$smarty->assign(‘name’,’值’);

  第二种:在模板文件中声明(html中),即{assign var=’name’  value=’值’} 

  使用:{$name}

  注意:也可以定义与使用数组。假若上面定义的name为一个一维数组,使用时即:{$name[2]}、{$name[‘aa’]}={$name.aa}等等使用方式。

5.2、注释

     {* 这里面是注释内容 *}

     Smarty的注释是不会在最终页面输出显示的,即:若在html里则效果像<!–注释–>一样,不过也有一定的区别,Smarty的注释在浏览器里查看源代码也是不显示的,而html的注释是显示的。例如:

  smarty怎么用_item怎么用        smarty怎么用_item怎么用       smarty怎么用_item怎么用

 

5.3、数组

  Smarty对数组的使用:数组[下标]、数组.下标

5.4、对象

  对象的声明和变量一样,通过assign来声明

  使用采用 ->  来调用对象的属性

  smarty怎么用_item怎么用

  smarty怎么用_item怎么用

   smarty怎么用_item怎么用

5.5、保留变量

      Smarty中有一个特殊的变量(就是smarty)可以通过这个变量很容易就可以访问到一些环境变量。就像PHP中的超全局变量一样神奇。

      注意:在使用这个保留变量的时候:smarty是对于大小写敏感的,我们需要的是小写的smarty

例子:

一、使用smarty访问PHP中的超全局数组变量:

  1、获取$_GET     {$smarty.get.name}    获取get中的name值

  2、获取$_POST    {$smarty.post.name}   获取post中的name值

  3、获取$_COOKIE  {$smarty.cooke.name}  获取cookie中的name值

  同理,还可以获取$_SERVER, $_ENV$_SESSION等等

注意:虽然Smarty提供了较方便直接访问PHP超全局变量的方法,但必须谨慎使用。 直接访问超全局变量会弄乱应用程序底层代码和模板语法。 最佳的实践是从PHP将需要的变量对模板进行赋值再使用。

二、获取当前时间戳

  {$smarty.now}其原理就是调用了timr()函数

三、直接访问PHP常量

  {$smarty.const.常量名}即{$smarty.const.AGE}

PHP定义常量

  smarty怎么用_item怎么用

smarty直接调用常量

  smarty怎么用_item怎么用

结果

  smarty怎么用_item怎么用

四、其他

  获取配置变量:{$smarty.config}

  返回当前模板名称:{$smarty.template}

  返回当前模板对象:{$smarty.template_object}

  返回当前目录名称:{$smarty.current_dir}

  等等

5.6、配置文件

  之前根据需求建立的Configs文件夹可以派上用处啦!我们在这个文件夹下建立Smarty.conf配置文件(命名任意,木有明确规定),配置文件可以让设计者将全局的模板变量以文件的方式管理起来。

  首先我们先来定义一些配置变量来对它进行简单的了解:

定义如下所示:

  smarty怎么用_item怎么用

引入配置文件:{config_load  file=’Smarty.conf’}

引用配置变量:{#配置变量#}、{$smarty.config.配置变量}

  smarty怎么用_item怎么用

显示结果:

  smarty怎么用_item怎么用

了解段落变量定义与引用:

  在Smarty配置文件中大体分为两种变量,一种为全局变量,另一种为段落变量。全局全局变量故名思议就是就是每次载入这个配置文件的时候这些变量都会被加载。而段落变量则有选择的进行加载。

段落变量的定义语法:

  [段落名字]

  段落名字:这里可以是任意字符但不包括’[‘和’]‘,具体定义看下面Smarty.conf

调用段落变量:在引入配置文件后面加上这段代码 section=’段落名字’。

注意:section只能使用一次,若有多个section引入多个段落变量则最后一个会覆盖前面的所有section引入的段落变量,即只有最后一个引入的段落变量有用其他作废。

Smarty.conf文件

 1 #这里是注释,#为注释符号
 2 #这里是全局变量,也就是说title和bodyColor变量每次都会被加载
 3 title='标题'
 4 bodyColor='#eee'
 5 
 6 #段落变量
 7 [firstStyle]
 8 color='#00f'
 9 width='200px'
10 height='300px'
11 
12 [.secondStyle]
13 color='#00f'
14 width='200px'
15 height='300px'
16 
17 [other]
18 other='这是其他'

test1.html文件

 1 {config_load file='Smarty.conf' section='firstStyle'}
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5     <meta charset="utf-8">
 6     <title>smarty test1</title>
 7 </head>
 8 <body>
 9 <!-- 这里是html注释 -->
10 {*这是Smarty注释*}
11 名字:{$jane->name }<br/>
12 性别:{$jane->sex}<br/>
13 年龄:{$jane->age}
14 <hr/>
15 常量年龄:{$smarty.const.AGE}
16 <hr/>
17 使用配置变量1:{#title#}<br/>
18 使用配置变量2:{$smarty.config.bodyColor}
19 <hr/>
20 段落变量加载:<br/>
21 {#color#}
22 <br/>
23 {#other#}
24 </body>
25 </html>

访问结果:

  smarty怎么用_item怎么用

注意:

  1、若全局变量与被加载的段落变量有相同的变量名,则段落名的值将覆盖全局变量的值。

  2、若某个段落变量里含有相同的变量名,则最后一个的变量的值将会覆盖前面的值。

  3、在整个smarty.conf文件中,点(.)拥有相对较高的权限的。点的作用是将一个变量或者整个段落隐藏,不能被使用。(我的理解就是相当于被注释掉不能被使用)

段落变量的一个简单应用:

  假若我们要使一个网站可以在多种风格的界面转换,这时我们使用段落变量就可以很容易就实现了。

test1.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>smarty test1</title>
 6 <style type="text/css">
 7 #aa{width: 200px;height: 200px;background: red;}
 8 </style>
 9 </head>
10 <body>
11 <div id='aa'>
12 这是一个div
13 </div>
14 </body>
15 </html>

访问结果:smarty怎么用_item怎么用

  访问结果出现一个错误。由于使用了smarty模板,所以在html的所有{}将会被smarty解析。

  解决方法:

  1、更换定界符

  2、在({)前面加一个空格,smarty怎么用_item怎么用

  3、使用{literal}{/literal}   literal:原样的,原义的

  smarty怎么用_item怎么用

简单应用,让一个div实现两种背景颜色:

test1.php

1 <?php
2 require './libs/Smarty.class.php';
3 $smarty=new Smarty();
4 $smarty->display('./test1.html');

Smarty.conf

 1 #段落变量
 2 #第一种颜色风格
 3 [firstStyle]
 4 color='#00f'
 5 width='300px'
 6 height='300px'
 7 content='第一种风格'
 8 
 9 #第二种颜色风格
10 [secondStyle]
11 color='#0f0'
12 width='500px'
13 height='500px'
14 content='第二种风格'

测试1:

test1.html

 1 {config_load file='Smarty.conf' section='firstStyle'}
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5     <meta charset="utf-8">
 6     <title>smarty test1</title>
 7 <style type="text/css">
 8 #aa{ width: {#width#};height: {#height#};background: {#color#};}
 9 </style>
10 </head>
11 <body>
12 <div id='aa'>
13 
14 这是一个div<br/><br/>
15 {#content#}
16 </div>
17 </body>

结果:

smarty怎么用_item怎么用

测试2:

test2.html

 1 {config_load file='Smarty.conf' section='secondStyle'}
 2 <!DOCTYPE html>
 3 <html>
 4 <head>
 5     <meta charset="utf-8">
 6     <title>smarty test1</title>
 7 <style type="text/css">
 8 #aa{ width: {#width#};height: {#height#};background: {#color#};}
 9 </style>
10 </head>
11 <body>
12 <div id='aa'>
13 
14 这是一个div<br/><br/>
15 {#content#}
16 </div>
17 </body>
18 </html>

结果:

smarty怎么用_item怎么用

 

5.7、判断{if}{elseif}{else}

  Smarty的{if}条件判断和PHP的if非常相似,只是增加了一些特性。 每个{if}必须有一个配对的{/if}. 也可以使用{else}{elseif}. 全部的PHP条件表达式和函数都可以在if内使用,如||, or, &&, and, is_array(), 等等. 

注意:如果开启了安全机制,那么只有在$php_functions设置允许的php函数才能够使用。

运算符表:

  smarty怎么用_item怎么用

5.8、for

{for}{forelse}用于创建简单的循环

{forelse}在循环不能遍历的时候使用

例子:

  smarty怎么用_item怎么用

  smarty怎么用_item怎么用

5.9、while

  Smarty的while循环和PHP中的while循环是几乎一样的,smarty中需要在后面增加</while>来结束

  smarty怎么用_item怎么用

  例子:

  smarty怎么用_item怎么用

  smarty怎么用_item怎么用

结果:

  smarty怎么用_item怎么用

5.10、{section}{sectionelse}

可以循环遍历连续数字索引的数组,不能循环关联数组

smarty怎么用_item怎么用

基本使用:

   smarty怎么用_item怎么用

   smarty怎么用_item怎么用

访问结果:

  smarty怎么用_item怎么用

不使用赋值数组直接输出:

  smarty怎么用_item怎么用

结果:

  smarty怎么用_item怎么用

遍历关联数组:

  smarty怎么用_item怎么用

  smarty怎么用_item怎么用

结果:

  smarty怎么用_item怎么用

  Section还有很多关键字强大的功能还没有一一列出来,具体可以参考smarty手册。Foreach相对于section来说显得更加强大,能用section做到的,foreach也能做到,并且foreach使用起来更加方便简单,接下来我们来学习了解foreach。

 

5.11、foreache与foreachelse

  通过类比的方法可以知道foreache是用来循环数组的。如果不存在遍历的数组则执行{foreachelse}部分

注意:这里不存在的数组指的是定义后这个数组没有数据。假若这个数组没有定义,则会发出警告。

简单例子:

1 <?php
2 require './libs/Smarty.class.php';
3 $smarty=new Smarty();
4 $arr=array('name'=>'小明','sex'=>'男','age'=>'18');
5 $smarty->assign( 'arr' , $arr );
6 $smarty->assign('arr0',array());
7 $smarty->display('./test1.html');
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>smarty test1</title>
 6 </head>
 7 <body>
 8 {foreach $arr as $k=>$v}
 9 {$k}=>{$v}<br/>
10 {foreachelse}
11 99999
12 {/foreach}
13 <hr/>
14 {foreach $arr0 as $k=>$v}
15 {$k}=>{$v}<br/>
16 {foreachelse}
17 此处输出foreachelse,无数据
18 {/foreach}
19 </body>
20 </html>

访问结果:

  smarty怎么用_item怎么用

在smarty中使用foreach和我们在PHP中的foreach循环几乎是一样的,就是书写的方式不一样,但形式上是一样的!

foreach具有一些内部关键字:

1、@iteration,当前循环次数,从1开始

2、@index,表示当前索引,从零开始

3、@first当前是首次循环是,first为true

4、@last循环最后一次时,last为true

5、@show,是在{foreach}循环执行后,,检测循环是否有输出,show是一个布尔值

6、@total,{foreach}的循环次数,total可以在{foreach}内部,或者之后使用

7、{break},停止循环

8、{continue},跳出此次循环

例子:

1 <?php
2 require './libs/Smarty.class.php';
3 $smarty=new Smarty();
4 $arr=array('name'=>'狗蛋','sex'=>'男','age'=>'18','from'=>'广东','tel'=>'123456789');
5 $smarty->assign( 'arr' , $arr);
6 $smarty->display('./test1.html');
 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>smarty test1</title>
 6 </head>
 7 <body>
 8 {foreach $arr as $k=>$v}
 9      
10 
11      {if $v@iteration==2}
12      <b>{$k}=>{$v}</b>---这里iteration,从1开始计算<br/>
13      {continue}
14      {/if}
15 
16      {if $v@index==2}
17      <b>{$k}=>{$v}</b>---这里index,从0开始计算<br/>
18      {continue}
19      {/if}
20 
21      {if $v@first}
22      <b>{$k}=>{$v}</b>---这里first,数组第一个元素<br/>
23      {continue}
24      {/if}
25 
26      {if $v@last}
27      <b>{$k}=>{$v}</b>---这里last,数组最后一个元素<br/>
28      {break}
29      break将已经跳出去了,不能在输出这里的内容了【这个例子跳出整个循环的现在不能够检验,读者可自己进行测试】
30      {/if}
31 
32    {$k}=>{$v}<br/>
33 
34 {/foreach}
35 <hr/>
36 总循环次数:{$v@total}
37 {if $v@show}
38 <hr/>
39 判断上面循环有输出<br/>
40 {/if}
41 
42 </body>
43 </html>

访问结果:

   smarty怎么用_item怎么用

5.12、自定义函数

Smarty自带了一些自定义的函数插件,可以在模板内使用。

  以下是参考smarty手册所列的自定义函数:

  a、{counter},用于显示一个计数器。 {counter}可以记住foreach循环的次数。

  b、{cycle},用于交替循环一系列值。 

  c、{fetch},用于获取文件内容、HTTP或者FTP内容,以便输出。

  d、{html_checkboxes},是一个自定义函数,用于创建HTML的多选框组和提供数据。

  e、{html_image},用于生成HTML的<img>标签。

  f、{html_options},可以提供数据,生成HTML<select><option>标签,还可以设置选中项等属性。

  g、{html_radios},用于创建HTML的单选框和提供数据。

  h、{html_select_data},用于创建一个选择日期的下拉框。 它可以显示任何或者全部的年、月、日。 任何不在上面列表中的键值对属性,都会被输出到<select>标签中作为属性和值。

  i、{html_select_time},用于创建一个选择时间的下拉框。 它可以显示任何或全部的小时、分钟、秒和上下午。

  j、{html_table},可以使用数组的形式的数据来创建一个HTML的<table>。

  k、{mailto},可以自动创建一个mailto:链接,而且可以选择编码方式。 对邮件编码可以使邮件地址更难以被网络爬虫抓取。

  l、{math},可以让模板设计者在模板中进行一些数学运算。

  m、{textformat},是一个用于格式化文本的块函数。

以上是smarty的自定义函数,具体的使用方法请参考smarty手册。

5.13、模板布局

即是模板的继承问题。使用的关键字主要有block、extends

首先,我们先在站点建立一个layout文件夹(主要用来存放父模板文件),然后在文件夹下建立一个模板文件template.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta charset="utf-8">
 5     <title>这个是模板文件</title>
 6 </head>
 7 <body>
 8 <h2>这个是模板文件输出的</h2>
 9 
10 <hr/>
11 子输出一:{block name='first'}{/block}
12 <hr/>
13 <hr/>
14 子输出二:{block name='second'}{/block}
15 <hr/>
16 
17 <h2>这个是模板文件输出的</h2>
18 </body>
19 </html>

接着再建立模板文件test.html,此模板需要继承上面的父模板

1 {extends file='layout/template.html'}
2 {block name='first'}
3 这里是test中的first
4 {/block}
5 {block name='second'}
6 这里是test中的second
7 {/block}

逻辑文件调用smarty,test.php

1 <?php
2 require './libs/Smarty.class.php';
3 $smarty=new Smarty();
4 $smarty->display('./test.html');

访问结果:

  smarty怎么用_item怎么用

小结:若含较多的公共部分,则采用布局文件;含公共部分较少,则采用包含文件{include file=’文件路径’}

 

(以上是自己的一些见解,若有不足或者错误的地方请各位指出)

作者:那一叶随风

声明:本博客文章为原创,只代表本人在工作学习中某一时间内总结的观点或结论。转载时请在文章页面明显位置给出原文链接。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/166992.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java 判断一个对象是否为空对象

    java 判断一个对象是否为空对象最近项目中遇到一个问题,在用户没填数据的时候,我们需要接收从前端传过来的对象为null,但是前端说他们一个一个判断特别麻烦,只能传个空对象过来,我第一个想法就是可以通过反射来判断对象是否为空。第一版:User.javapublicclassUser{privateStringusername;privateBooleanactive;priva…

  • 卡尔曼滤波算法详细推导「建议收藏」

    卡尔曼滤波算法详细推导「建议收藏」一、预备知识1、协方差矩阵是一个维列向量,是的期望,协方差矩阵为可以看出协方差矩阵都是对称矩阵且是半正定的协方差矩阵的迹是的均方误差2、用到的两个矩阵微分公式公式一:公式二:若是对称矩阵,则下式成立…

  • 关于pdb文件

    关于pdb文件关于pdb文件当程序在VS上编译时,程序所依赖的所有动态链接库(dll文件)也会被编译,编译过程中每个dll都会产生一个pdb文件,又称为“符号文件”,是一个存储数据的信息文件,其包含dll库在编译过程的某些调试信息,例如程序中所用到的全局变量、局部变量、函数名以及他们的入口地址等。当使用VS调试程序时,会默认加载你的程序以及程序依赖的dll库产生的所有pdb文件,但是结…

  • L1正则化的理解(l1和l2正则化代表什么意思)

    在论文中看到L1正则化,可以实现降维,加大稀疏程度,菜鸟不太懂来直观理解学习一下。在工程优化中也学习过惩罚函数这部分的内容,具体给忘记了。而正则化正是在损失函数后面加一个额外的惩罚项,一般就是L1正则化和L2正则化。之所以叫惩罚项就是为了对损失函数(也就是工程优化里面的目标函数)的某个或些参数进行限制,从而减少计算量。L1正则化的损失函数是是不光滑的,L2正则化的损失函数…

  • 微服务优缺点_微服务优势和不足

    微服务优缺点_微服务优势和不足优点1.每个微服务都很小,这样能聚焦一个指定的业务功能或业务需求;2.微服务能够被小团队单独开发;3.微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的;4.微服务能使用不同的语言开发;5.微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果,无需通过合作才能体现价值;6.微服务只是业务逻辑的代码,不会和HTML,CSS或其他界面组件混合;缺点:1.运维要求较高; 2.分布式的复杂性; 3.接口调整成本高; 4.学习难度曲线

    2022年10月22日
  • String类型转换BigDecimal、Date类型

    String类型转换BigDecimal、Date类型String类型转换BigDecimal类型public static void main(String[] args) {         String str1="2.30";            BigDecimal bd=new BigDecimal(str1);            System.out.println(bd);    }Java String类型转换成D…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号