smarty总结

smarty语法  1.定界符 2.注释

 3.变量(1.通过assign分配过来的变量 2.保留变量,他是无需分配的直接在模板中使用(包括smarty本身的及超全局变量,其中常量是需要先定义,但无需分配) 3.配置变量 )

4.内置函数

(1.if/else  选择结构。和php中if/else几乎是一样的。唯一不同的是现在是使用smarty语句来书写的。{if},{elseif},{else}

2. foreach    重中之重   处理数组的情况最多,一维数组、二维数组、多维数组。   foreach是使用做多的。

格式有两种,如下:

ü {foreach $arrayvar as $itemvar}

ü {foreach $arrayvar as $keyvar=>$itemvar}

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

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

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

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

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

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

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

{foreach $arr1 as $k => $v}

<tr

{if $v@iteration is odd} class="odd" {/if}

>

<td>{$v.id}</td>

<td>{$v.name}</td>

<td>{$v['age']}</td>

</tr>

{/foreach}

3.section 也是用来循环的。只能遍历数字连续的索引数组。

<ul>{section name = 'index' start = 2 loop = $arr}

<li>{$arr[index]}</li>

{/section}</ul>

其中,name就是下标,而loop则是循环的次数。可以通过下标来访问我们的数组元素。结论:不要用section来遍历关联数组。

 

还需要注意一点,就是loop的取值可以是分配过来的数组的名字。

 

如果是关联数组,则会报错误

☞ 注意细节

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

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

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

 

在实际应用中,凡是能使用section的地方,都可以使用foreach,但是反之不行。所以一般我们只需要使用foreach即可。

 

 

4.变量修饰器

有的时候,我们在模板中使用数据,还需要做进一步的处理,而且只能在模板层面来处理。

比如,我们在完成无限分类的展示的时候,按照层级来进行显示。

如果有多个参数呢,只需要使用:隔开即可。

如truncate的使用

 注意细节

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

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

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

5.函数插件

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

除了可以使用 foreach 来输出这些内容之外,smarty还 自带了一些自定义的函数插件,可以在模板内使用。

(1).单选html_radios

用于生成单选框组

(2).复选 html_checkboxes

用于生成复选框组

(3).下拉列表html_options

用于生成下拉列表

(4).cycle

用于循环交替某些值。)

5.Smarty实战

站在PHP开发人员的角度学习并使用smarty

包括进阶安装(在项目中如何安装)、模板包含、模板继承、缓存。

1.在项目中引入smarty

[需求]:在中级项目shopcz中使用smarty思考:我们的smarty应该放在哪儿?

application还是framework呢?

答案是:都可以。

不同的程序员会有不同的考虑。如放到framework,把smarty作为框架的一个部分,thinkphp

比如放到application中,将smarty作为第三方文件来引入,比如CI框架。

我们采取第二种,作为第三方的工具引入smarty

注意保证文件夹层次的简洁性。将原来的libs更名为smarty

具体怎么使用呢?

2.模板包含

[需求]:把商品详情页中的头部信息也显示出来

第一步,将头部的信息,单独的保存为header.html注意,剪切的位置。

第二步,在模板页面中,使用include载入头部即可。

 

在项目中使用smarty模板引擎。

先复制smarty文件到application下的third-party下,然后在views下的home文件下建两个文件夹   

然后在Basecontroller类文件下的构造函数中写引入smarty类文件,实例化smarty对象,注意让$smarty变成BaseController的一个属性,要不然一个函数的局部变量不能被继承,设置模板目录编译目录属性,分配变量, 然后再多分配一个index值为false(为了在IndexController中用trueindex值覆盖掉,为了在header.html中区别要不要显示分类数据),然后让indexController等类文件继承BaseController类文件,然后再从模型中取数据,分配变量,最后调用smarty方法display,去引入视图目录中的模板。

模板包含:在index.html中提取出头部信息,到header.html中,然后在各模板文件中引入头部信息{include  file= “header.html”},就是模板包含

在视图模板中通过smarty的定界符,内置函数,传过来的变量来输出数据

3.模板继承

先回忆一下php中的机制:

ü 首先,需要定义一个基类(父类),在父类中定义通用的属性或方法。

ü 其次,子类要通过extends来继承父类,父类中非私有的属性和方法都可以被继承过来。

ü 如果在子类中定义了一个和父类相同的方法时,则会覆盖父类的。

注意事项:

ü 布局页面可以有许多block,子级页面也可以有许多block,通过name属性进行关联。

ü 子级页面除了extendsblock其他内容不予显示

ü 布局页面的block可以有默认内容,子级页面不实现就直接显示,实现就覆盖。

ü 布局页面的block可以彼此嵌套,子级实现可以有针对性实现。

ü {$smarty.block.child}布局可以调用子级的内容,{$smarty.block.parent}子级页面可以调用父级页面内容

 

我们如何来选择使用模板包含和模板继承?

ü 如果页面的公共部分比较少的时候,用包含就可以了。

ü 如果页面的公共部分比较多的时候,使用继承会好一些。

4.插件扩展

smarty中,有这么几种函数,内置函数、变量修饰器、插件函数。通常内置函数不用扩展。扩展较多的是变量修饰器。

有时候,我们在页面中输出的时候,发现smarty提供的变量修饰器以及php函数都不能满足我们的需求,此时就扩展。

扩展写在什么地方?plugins

五.Smarty缓存

常见的缓存形式有哪些?

数据缓存,站在数据库的角度(mysql),有些数据不是经常变化的,我们就可以把它缓存起来,下次再访问的时候,就直接访问缓存,极大了提升了效率。Memcached

文件缓存,也称页面缓存,有些页面,一旦生成,就不再变化,我们可以将这些页面缓存起来,就是直接将其转成静态页面,后续的访问就直接访问静态页面,极大了提升访问的效率。

页面静态化技术。

我们的smarty也实现了缓存,实现的是文件缓存

什么情况下缓存会失效呢?

已经过了有效期cache_lifetime的设置值.    缓存文件被删除.    模板文件被修改、

2.局部不缓存

一旦页面使用了缓存之后,那整个页面的内容就不会变化。

但实际上,在某些页面,需要动态的展示信息,比如时间、用户的状态。

意味着在我们的页面中, 有一小块内容是不缓存。

Smarty提供了一个局部不缓存的用法。

有三种方式:标签的缓存控制,即在标签中使用 nocache属性,适用于单个标签

ü 变量的缓存控制,即在分配变量时设置第三个参数为 true,适用于单个变量

ü 模板区域缓存控制,即在模板页面中使用{nocache} {/nocache},适用于一块

3.单模板多缓存

[需求]:在我们的商品详情页中使用缓存

原因:所有的商品都共享一个模板页面,所以就都使用了同一个缓存文件

需要将每个商品单独的生成一个缓存文件,这个就是单模板多缓存

实现很简单,只需要在display的时候,传递第二个参数,用来标识当前的内容。

4.缓存组

[需求]:对我们的列表页实现缓存    载入我们的列表页

还是可以使用缓存的。该怎么缓存呢?---smarty提供了缓存组的用法,实际上它是单模板多缓存的一种更为精细的用法。

 

自定义模板引擎

首先是模板类中属性有: //保存变量的数组属性

private $tpl_vars = array();

//模板目录

public $template_dir = "templates";

//编译目录

public $compile_dir = "templates_c";

方法://分配变量方法

public function assign($name,$value)作用:将变量的值存到模板类的数组属性中,

//载入模板方法

public function display($file)

display只是把模板文件内容取出来$content = file_get_content($file),经过引入解析类Parse,做了替换处理,此时的模板文件中的$title已经变成了<?php echo $this->tpl_vars[‘title’];?>,再将此时的$content放到编译文件了file_put_contents($compileFile, $content);,然后再载入编译文件,此时的编译文件就是php文件了。也就是编译文件与index.php文件在一个页面中

 

模板引擎就是把php代码和html代码分开,php中的变量值怎样到html中呢,通过模板引擎解决.   php中的变量值没有传到html中,只是保存到自己的数组属性了,然后在编译文件中要输出的变量值替换成了<?php echo $this->tpl_vars[‘title’];?>这种格式,所以就在视图层输出了php的变量值

就是运用了正则表达式匹配,字符串的搜索和替换preg_match(),preg_replace(),将模板文件变成了htmlphp混编格式的编译文件

display方法就是把模板文件拿到php文件中来,在display方法中引入解析类parse,调用解析方法parse,解析方法中调用了解析if,foreach,而且返回值是变量值


php中如何来使用正则

使用正则的时候,注意两个小的细节:

ü 正则表达式应该放在//之间

ü 使用单引号引用

(4).正则表达式

http://deerchao.net/tutorials/regex/regex.htm

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Smarty模板引擎提供了多种输出方式,可以通过修改Smarty的配置文件来修改输出方式。以下是一些常见的输出方式及其配置方式: 1. 直接输出 HTML:默认情况下Smarty会直接输出 HTML,即把模板中的内容原封不动地输出到浏览器中。 2. 输出到文件:可以通过修改Smarty的配置文件,设置$template_dir和$compile_dir参数,来将模板编译后输出到指定的文件中。 3. 输出到缓存:可以通过设置Smarty的缓存参数,将模板内容输出到缓存中,下次访问时可以直接从缓存中获取内容,从而提高页面加载速度。 4. 输出为 JSON:可以通过在模板中使用Smarty的json_encode函数,将模板数据转换成JSON格式输出。 5. 输出为 XML:可以通过在模板中使用Smarty的xml_encode函数,将模板数据转换成XML格式输出。 6. 输出为 CSV:可以通过在模板中使用Smarty的csv_encode函数,将模板数据转换成CSV格式输出。 以上是一些常见的输出方式,你可以根据自己的需求选择适合的输出方式。 ### 回答2: Smarty 是一种用于 PHP 的模板引擎,它提供了一种简化和组织模板的方式。在 Smarty 中,我们可以通过使用不同的标签和变量来改变输出的方式。 首先,我们可以使用Smarty的标签来输出变量。例如,使用{$variable}标签可以输出一个变量的值。如果要输出一个数组的某个元素,可以使用{$array[index]}标签来获取指定索引的值。 其次,Smarty 还提供了一些内置函数来处理输出。例如,如果要将一个字符串转为大写,可以使用{ strtoupper('hello') }标签来输出转换后的结果。 此外,Smarty 还支持条件输出。例如,可以使用{if}和{else}标签来根据特定条件输出不同的内容。如果条件为真,Smarty会输出{if}标签内的内容;如果条件为假,Smarty则会输出{else}标签内的内容。 除了以上方式,我们还可以使用Smarty的模板注释来改变输出的方式。在Smarty模板中,可以使用{*注释内容*}的方式添加注释。这样,注释的内容不会被编译和输出到最终的结果中。 总结起来,Smarty提供了多种方式来改变输出的方式,包括使用标签输出变量、使用内置函数处理输出、使用条件输出、以及添加模板注释等。这些灵活的输出方式使得开发者能够更加方便地组织和定制模板的输出。 ### 回答3: Smarty换输出的方式是通过修改Smarty模板引擎的配置文件来实现的。在配置文件中,可以修改输出的默认方式,包括将输出方式从HTML改为XML或者其他格式。 具体步骤如下: 1. 打开Smarty的配置文件,一般命名为smarty.conf。 2. 找到输出相关的配置项,一般是“output_handler”。 3. 修改配置项的值,可以改为“XML”或其他格式的输出方式。例如,将“output_handler”配置为“XML”即可将输出方式改为XML格式。 4. 保存配置文件并重新加载Smarty引擎。 通过上述方式,就可以灵活地改变Smarty模板引擎的输出方式。除了修改配置文件,还可以根据具体需求在模板文件中动态设定输出的方式,例如通过条件判断实现在某些情况下输出为HTML,而在其他情况下输出为XML。这样可以根据具体业务场景灵活地控制输出方式。 总结起来,Smarty换输出的方式可以通过修改配置文件或在模板文件中动态设定来实现,以满足不同的输出需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值