本文主要包括以下内容

  1. 公共文件引入与继承
  2. 内容捕捉
  3. 变量调剂器
  4. 缓存
  5. Smarty过滤器
  6. 数据对象、注册对象
  7. 与已有项目结合

公共文件引入与继承

可以把许多模板页面都用到的公共页面放到单独文件里边,通过模板就可以直接调用,类似php里边通过include指令引入公共文件一样。

{include file=”[模目录/]板文件名称”}

使用include对公共文件进行包含的好处是使用较简单,好理解。不好的地方使用相对较繁琐。

许多框架程序把头部和脚部集中处理的技术成为“布局”

在Smarty模板里边还可以通过“extends继承”对头部和脚部进行处理。

extends相对include 代码也少一点、文件也相对较少,再者extends可以进行布局设计。

{extends file=”布局文件路径名”}

{block name=”名称”}{/block}

布局继承使用:

①通过block标签在布局页面进行布局设计

②在布局页面可以有两部分内容:html标签+block标签

③在继承页面里边有两部分内容:extends + block,除此之外的内容不给显示

④在继承页面通过{block name=”XXX”}来实现父级标签内容

⑤在子级标签可以调用父级标签默认内容 {smarty.block.parent} 或{smarty.block.child}

⑥父级block有默认内容,如果子级不实现会默认显示。如果实现则会覆盖。

内容捕捉

<body>
<h2>最新上架商品信息</h2>
{*
在smarty许多标签里边都有assign属性
作用:把标签包含的内容都赋予assign变量里边
像include标签也有该属性,
有assign属性的标签内容,不给立即显示,必须通过变量输出。
*}
{capture name="gds" assign="shangpin"}
{foreach $gd as $k => $v}
{$v@iteration}---{$v}<br />
{/foreach}
{/capture}
{$smarty.capture.gds} <h2>用户非常喜欢的商品信息</h2>
{$smarty.capture.gds} <h2>本月最畅销商品信息</h2>
{$shangpin}
</body>

变量调剂器

将变量按照我们所需要的格式输出

 <body>
<h2>变量调剂器</h2>
{$country}<br />
{$country|upper}<br />
{$country|lower}<br />
{$country|capitalize}{*首字母大写*}<br />
{$country|cat:'beijing':'西三旗'}{*链接字符串*}<br />
{$smarty.now}<br />
{$smarty.now|date_format:"%Y-%m-%d %H:%M:%S"}<br />
{$content}<br />
{$content|escape}{*把html标签的<>转为符号实体*}<br />
{$content|replace:'this':'that'|escape}{*对单词进行替换,并且递归使用第二个escape调剂器*}<br />
{$introduce}<br />
{$introduce|truncate:22:'..':true}{*默认给按照单词截取*}<br /> </body>

缓存

缓存分为:页面、数据

页面缓存:把php解释器解释好的内容给放到一个单独文件里边,这个单独文件可以被反复调用。

模板文件、编译文件、缓存文件

缓存文件:编译文件经过php模块编译运行生成的静态内容形成的文件就是缓存文件。

缓存具体设置:

①设置缓存文件目录cache

②开启缓存设置: smarty−>caching=true;③调用方法:smarty -> display(); 该display方法会判断caching属性是否开启,若开启会把具体的“缓存文件”给自动创建好

display()方法

该方法的作用

1.加载模板文件

2.判断是否开启缓存和是否有缓存文件,如果都符合,则直接调用缓存文件返回给用户结果。

如果有开启缓存,则会生成缓存文件;缓存文件已经过期,也会重新给生成。

3.判断是否有对应的编译文件,有则直接加载,通过php模块解释返回。

4.如果没有开启缓存、也没有对应编译文件,则对模板文件进行编译,再把编译文件给php模块解释,最后返回。

缓存文件更新

①对应的模板文件发生更新操作

②可以给缓存文件设置过期时间

$smarty -> cache_lifetime = 3600;

缓存有效期判断有两个:

①Smarty的成员属性判断cache_lifetime。

②可以根据缓存文件本身的有效期时间进行判断。

缓存caching设置

① smarty−>caching=1或true;该情况有效期判断根据Smarty成员属性cachelifetime判断②smarty -> caching = 2; 该情况有效期判断根据 缓存文件本身有效期时间的有效判断。

单模板多缓存

缓存文件删除

clearCache(模板) 删除指定模板对应的全部缓存文件

clearCache(模板,标志) 删除当前模板指定标志的缓存文件

clearAllCache() 删除全部的缓存文件

局部不缓存4种方法

① {变量名称  nocache}   {$title  nocache}  
②smarty -> assign(name,value,true);

③ {nocache}内部内容都不给缓存foreach{/nocache}

④ insert 函数不缓存设置

缓存集合

缓存集合:是对单模板多缓存升级的一种缓存效果

http://wangzhan/goods.php?brand=samsung&price=3&network=unicom&screen=4&color=black

缓存集合:要把商品全部的参数做“排序组合”,每种情况都设置一个缓存文件

与MVC结合使用

①在入口文件引入Smarty

②在父类控制器里边实例化Smarty对象,通过父类属性接收该对象

③在子类里边调用父类的smarty属性,进行smarty相关操作。

缓存文件制作

ob_get_contents()  抓取php缓存区内容
注意:抓取该函数以上行的内容
php缓冲区开关
① ob_start(); 开启php缓冲区
② php.ini
output_buffering = 4096 开启
output_buffering = Off 关闭 ob_clean() 清除php缓冲区内容
清除当前行以上的缓冲区内容,以下行的内容仍然可以抓取使用 ob_get_clean() 抓取缓冲区内容,并清除之
抓取/删除 当前行以上的信息,以下行信息没有影响

过滤器

<?php

include "./MySmarty.class.php";

$smarty = new MySmarty;

$smarty -> caching = 1;

//① 前置过滤器pre

//$smarty -> registerFilter("pre",处理函数);
$smarty -> registerFilter("pre","beforeC"); //$tpl是"模板文件"内容
function beforeC($tpl){
//删除$tpl的注释内容
return preg_replace("/<!--.*-->/","",$tpl);
}
/*
$mark: 表示过滤器类型(前置、后置、输出)
function registerFilter($mark,$callback){
$cont = file_get_contents(模板文件名称);//获得模板内容
$callback($cont);
}
*/ //② 后置过滤器post
// 给混编文件统一设置作者信息
$smarty -> registerFilter("post","afterC");
//$tpl 是编译后的混编代码内容
function afterC($tpl){
return "<!--create by itcast0421-->".$tpl;
} //③ 输出过滤器output
// 对关键字进行过滤
$smarty -> registerFilter("output","outC");
//是php模块解释后的静态内容
function outC($tpl){
return str_replace('2014-06-14','date20140614',$tpl);
} $smarty -> assign('qi','2014-06-14'); $smarty -> clearCompiledTemplate('03.html');//清除旧的编译文件 $smarty -> display('03.html');

数据对象、注册对象

数据对象

<?php

include "./MySmarty.class.php";

$smarty = new MySmarty;

//有时候,页面内容非常多,这样不同程序员开发自己的php代码,
//调用自己的一部分模板 //由于页面非常大,彼此定义的变量名称"一致" //以下变量其实是最后一个会起作用
//解决:
// ① 把变量名称给改一下
// 不推荐,代码高耦合,一个地方修改另一个地方也要修改
// ② 把页面调用调到前面
// 不推荐,display代码受到位置限制
// ③ 利用数据对象实现 //三个盒子(数据对象)
$data1 = $smarty -> createData();
$data2 = $smarty -> createData();
$data3 = $smarty -> createData(); //通过数据对象$data1 $data2 $data3为各自模板传递变量信息
$title = "乌克兰发送内战";
$data1 -> assign('title', $title); //为当前盒子填充变量信息
$data1 -> assign('age',20); $title = "京津冀一体化";
$data2 -> assign('title', $title);//为当前盒子填充变量信息
$data2 -> assign('age',21); $title = "巴西世界杯";
$data3 -> assign('title', $title);//为当前盒子填充变量信息
$data3 -> assign('age',22); $smarty -> display("041.html", $data1); //在自己盒子获得变量信息
$smarty -> display("042.html", $data2);
$smarty -> display("043.html", $data3);

注册对象

在php里边可以给模板传递一个对象变量,对象可以通过”->”调用自己的属性和方法。

注册对象:可以限制对象在模板中调用什么方法/属性。

<?php

include "./MySmarty.class.php";

$smarty = new MySmarty;

//注册对象
class Order{
public $type = "电子产品"; //$args是当前函数的形式参数,会接收模板传递过来的全部信息
function getInfo($args){
//从数据库获得订单信息
return $args['name']."--".$args['number']."--1个T桖、3双袜子";
} function getPrice(){
//从数据库获得价格信息
return 59;
} function getKou(){
return 7.5;
}
}
$dingdan = new Order;
//注册对象具体使用
//$smarty -> registerObject(模板变量,对象,允许被调用的"属性/方法"的数组);
$smarty -> registerObject('dingdan', $dingdan, array('getInfo','getPrice','type'));
$smarty -> display("05.html");

与已有项目结合

引入smarty后,auto_load自动加载失效。

Smarty与已有框架结合重点:把加载机制级别设置与Smarty一致。

spl_autoload_register声明会覆盖原始的autoload加载机制,引入全部的加载机制都声明为spl_autoload_register就可以分别执行。

spl_autoload_register(“__autoload”);

Smarty模板技术学习(二)的更多相关文章

  1. Smarty模板技术学习

    模板引擎技术:使得php代码和html代码分离的技术就称为"模板引擎技术" 自定义smarty模板技术实现 <?php //迷你smarty原理 class MiniSmar ...

  2. smarty模板技术

    一.什么是smarty?smarty是一个使用php写出来的模板php模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用php程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美 ...

  3. smarty详细使用教程(韩顺平smarty模板技术笔记)

    MVC是一种开发模式,强调数据的输入.处理.显示是强制分离的 Smarty使用教程1.如何配置我们的smarty解压后把libs文件夹放在网站第一级目录下,然后创建两个文件夹templates 存放模 ...

  4. 三,Smarty模板技术/引擎——变量操作(2)

    1, 变量的分类 ① 从PHP中分配的变量,比如a.php跳转到b.php时候,可以在a.php中分配变量,b.tpl中直接调用.a.php中代码,$smarty->assign(‘str’,’ ...

  5. 二 ,Smarty模板技术/引擎——变量操作(1)

    1,基本变量 $smarty->assign('data1',3); $smarty->assign('data2',3.45); $smarty->assign('data3',' ...

  6. Smarty模板技术之foreach遍历数组实例全面讲解

    一.item属性用法 <?php $arr = array(, , ); $smarty->assign('testarrg', $arr); ?> 用Smarty中的foreach ...

  7. 四,Smarty模板技术/引擎-----内建函数

    内建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用. PHP的自建函数很多,讲解下<foreach>和< ...

  8. 一,Smarty模板技术/引擎——简介

    Smarty是一个使用PHP写出来的模板PHP模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使PHP程序员与美工分离,使用的程序员改变程序的逻辑内容不会影响到美工的页面设计,美工重新修改 ...

  9. 五,Smarty模板技术/引擎——自定义函数机制

    自建函数是smarty提供的函数,不允许修改,只能被调用: 自定义函数是自己编写函数,注册成为smarty的函数,之后可以被调用: 示例:使用smarty自定义函数的机制,编写一个函数myfun1,通 ...

随机推荐

  1. android GestureDetector 手势基础

    1. 当用户触摸屏幕的时候,会产生许多手势,例如down,up,scroll,filing等等,我们知道View类有个View.OnTouchListener内部接口,通过重写他的onTouch(Vi ...

  2. MS Project 使用之创建项目信息

    1. 我们打开MS Project 2013,创建一个空白文档. 2. 切换“项目”选项卡,点击“项目信息”,设置项目开始时间等信息,项目一般是需要设置开始时间和使用日历的,下面我们分别进行设置 如, ...

  3. [codevs1157]2^k进制数

    [codevs1157]2k进制数 试题描述 设r是个2k 进制数,并满足以下条件: (1)r至少是个2位的2k 进制数. (2)作为2k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位. ...

  4. hiho #1325 : 平衡树·Treap

    #1325 : 平衡树·Treap 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho:小Hi,我发现我们以前讲过的两个数据结构特别相似. 小Hi:你说的是哪两个啊? ...

  5. PHP运算符:算数运算符、逻辑运算符、三目运算符、位运算符、字符串运算符。

    赋值运算符 PHP 赋值运算符用于向变量写值. PHP 中基础的赋值运算符是 "=". 这意味着右侧复制表达式会为左侧运算数设置值. _______________________ ...

  6. 分享一个快速设置背景的js 自动获取背景图的长宽

    我来分享一个快速设置背景的js (需要jq支持!) 快速切图铺页面用---就是不需要手动输入背景图的长宽 自动获取背景图的长宽 : <div class="wrap"> ...

  7. linux kernel i2c底层代码跟踪

    其实跟上次跟的平台总线有关 在arch/arm/mach-mx6/board-mx6q_sabresd.c 文件中 static void __init mx6_sabresd_board_init( ...

  8. linux kernel input 子系统分析

    Linux 内核为了处理各种不同类型的的输入设备 , 比如说鼠标 , 键盘 , 操纵杆 , 触摸屏 , 设计并实现了一个对上层应用统一的试图的抽象层 , 即是Linux 输入子系统 . 输入子系统的层 ...

  9. Kali Linux渗透基础知识整理(一):信息搜集

    写在前面的废话:最近要给一些新人做培训,整理些东西,算不上什么太高端的内容,只是简单的整理下了,我觉得对于小白的话也还算是干货.在乌云水了几年,算不上什么大神水平,最近生活费紧张,现在打算在FreeB ...

  10. django的信号

    Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. 1.Django内置信号 Model signals pre_in ...