Smarty模板技术学习(二)

本文主要包括以下内容

  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=1true;Smartycachelifetimesmarty -> 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()  抓取缓冲区内容,并清除之抓取/删除 当前行以上的信息,以下行信息没有影响

过滤器

<?phpinclude "./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');

数据对象、注册对象

数据对象

<?phpinclude "./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里边可以给模板传递一个对象变量,对象可以通过”->”调用自己的属性和方法。
注册对象:可以限制对象在模板中调用什么方法/属性。

<?phpinclude "./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”);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493936.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式服务框架 Zookeeper -- 管理分布式环境中的数据

安装和配置详解 本文介绍的 Zookeeper 是以 3.2.2 这个稳定版本为基础&#xff0c;最新的版本可以通过官网 http://hadoop.apache.org/zookeeper/来获取&#xff0c;Zookeeper 的安装非常简单&#xff0c;下面将从单机模式和集群模式两个方面介绍 Zookeeper 的安装和配置。 单机…

AI“重造”麻省理工学院!今宣布投资10亿美元成立全新计算学院,近70年来最大结构调整...

来源&#xff1a;Deep Tech深科技摘要&#xff1a;近日&#xff0c;世界顶尖名校麻省理工学院通过学校官方网站宣布重磅消息。近日&#xff0c;世界顶尖名校麻省理工学院通过学校官方网站宣布重磅消息&#xff1a;投资 10 亿美元以引领计算机技术和人工智能技术的发展及全球影响…

经验分享:10个简单实用的 jQuery 代码片段

尽管各种 JavaScirpt 框架和库层出不穷&#xff0c;jQuery 仍然是 Web 前端开发中最常用的工具库。今天&#xff0c;向大家分享我觉得在网站开发中10个简单实用的 jQuery 代码片段。 您可能感兴趣的相关文章精心挑选12款优秀 jQuery Ajax 分页插件分享60款绚丽的 jQuery 幻灯片…

PHP数据库操作

PHP实现数据库的增删改查 <?php $connmysql_connect(localhost,root,root); if(!$conn){ echo "connect failed"; exit; }$sqluse test; mysql_query($sql,$conn);//增加 $sql"insert into mytest values(null,pu,20)"; $rsmysql_query($sql,$conn);…

日本机器人实力大盘点,和Atlas的高调刷屏相比,日本机器人的默默崛起更让人忌惮...

来源&#xff1a;机器人大讲堂摘要&#xff1a;近期&#xff0c;估计全球的机器人圈都沉浸在Atlas的三连跳中无法自拔&#xff0c;刷屏的Atlas代表了美国对待科研的态度&#xff1a;我能所以全世界都得膜拜我&#xff01;近期&#xff0c;估计全球的机器人圈都沉浸在Atlas的三连…

Android高性能ORM数据库DBFlow入门

DBFlow&#xff0c;综合了 ActiveAndroid, Schematic, Ollie,Sprinkles 等库的优点。同时不是基于反射&#xff0c;所以性能也是非常高&#xff0c;效率紧跟greenDAO其后。基于注解&#xff0c;使用apt技术&#xff0c;在编译过程中生成操作类&#xff0c;使用方式和ActiveAndr…

不值钱的软件人才[转]

软件人才在中国不值钱&#xff0c;不但价格只比“一文不值”多一点&#xff0c;而且地位也就是一个普通劳动者&#xff0c;和高薪等挂不上钩。这里讲的是中国大陆地区&#xff0c;因为我不知道其他国家的情况&#xff0c;如无特殊声明&#xff0c;以下所有情况均只中国大陆的情…

科学:揭示自由意志的生物学本质

来源&#xff1a;中国科学报摘要&#xff1a;神经科学家开始精确定位大脑中参与自由意志感知的区域。“外星人肢体综合征”听起来也许并非那么像外星人的事&#xff0c;虽然它仍然很怪异。病人们抱怨说&#xff0c;他们的一只手变成了“流氓”&#xff0c;会在自己不知道的情况…

ThinkPHP入门

ThinkPHP项目的创建 <?php include "../../ThinkPHP/ThinkPHP.php"; 在index.php中导入ThinkPHP.php即可&#xff0c;会自动创建目录。 tp创建流程分析 1. 入口文件index.php2. ThinkPHP/ThinkPHP.phprequire THINK_PATH.Common/runtime.php;3. ThinkPHP/…

解密:LL与LR解析 2(译,完结)

由于GFW&#xff0c;我无法联系到作者&#xff0c;所以没有授权&#xff0c;瞎翻译的。原文在这里[http://blog.reverberate.org/2013/07/ll-and-lr-parsing-demystified.html]。 这是第2部分和完结。 3. 解析树的形状 到目前为止&#xff0c;我们使用的算术表达式的那棵树&…

即时配送:新零售时代的“物流新战场”

来源&#xff1a;平安证券2018年8月2日&#xff0c;星巴克和阿里巴巴达成战略合作&#xff0c;共同推出外卖业务&#xff0c;为消费者配送旗下饮料和烘焙食品。这意味着&#xff0c;以后可以在饿了么、手机淘宝等APP上点星巴克外卖了。其实&#xff0c;新零售、新业态的快速发展…

ThinkPHP入门(二)

smarty使用 smarty引入流程 1. 控制器IndexAction.class.phpfunction index()$this -> display(); (父类Action的display) 2. 父类ThinkPHP/Lib/Core/Action.class.phpfunction display()$this->view->display 3. ThinkPHP/Lib/Core/View.class.phpfunction displa…

雁栖湖会议研讨:计算机能代替程序员吗?

来源&#xff1a;科学网写不完的代码&#xff0c;熬不完的夜&#xff0c;进度总是赶不上变化。程序开发是一项既费时费力&#xff0c;又容易出错的工作。但当前持续涌现的软件工程大数据以及快速发展的人工智能技术&#xff0c;正使得软件自动化成为可能。通过程序合成、代码补…

在 Mac OS X Lion 下修改 Hosts 的四种方法

一名刚刚使用 Mac OS X Lion 系统的朋友问我怎么该系统下修改 Hosts 文件&#xff0c;说网上搜了很多办法都不管用&#xff0c;只要编辑 Hosts 文件就出现”你不是文件 hosts 的所有者&#xff0c;因此没有权限写到该文件”的提示&#xff0c;要解决这个权限问题又比较麻烦&…

Django环境配置

Django安装 #安装最新版本的Django $ pip install django #或者指定安装版本 pip install -v django1.7.1 项目创建 $ django-admin startproject my_blog建立Django app $ python manage.py startapp article运行程序 $ python manage.py runserver pip安装python模…

CCAI2018演讲实录 | 蒲慕明:脑科学与类脑机器学习

来源&#xff1a;人工智能前沿讲习班摘要&#xff1a;7月28-29日&#xff0c;由中国人工智能学会和深圳市罗湖区人民政府共同主办&#xff0c;马上科普承办的“2018 中国人工智能大会&#xff08;CCAI 2018&#xff09;”完美收官。大会第二天下午&#xff0c;中科院神经科学所…

Django搭建简易博客

Django简易博客&#xff0c;主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markdown与代码高亮 归档&#xff0c;AboutME和标签分类 搜索与ReadMore RSS与分页 需要添加的安装包 pip i…

HDU 4619 Warm up 2 (多校)

题意&#xff1a;在网格里面给定了 横&#xff0c;竖 两种多米诺骨牌&#xff0c;同向的不可以覆盖&#xff0c;不同向的可以覆盖&#xff0c;问你最多去掉多少个有覆盖的多米诺&#xff0c;使得网格内剩余的多米诺骨牌最多 解题思路&#xff1a; 一.搜索 &#xff08;1&…

工业智联网: 基本概念、关键技术与核心应用

来源&#xff1a;王飞跃科学网博客作者&#xff1a;王飞跃, 张军, 张俊, 王晓摘要&#xff1a;本文首先阐述了工业网联技术的演化过程&#xff0c;重点讨论了工业智联网产生的技术和时代背景.然后探讨了工业智联网的基本概念、内涵与应用领域。本文详细介绍了工业智联网的关键技…

JDBC链接

//1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar Connection con null; Class.forName( "org.gjt.mm.mysql.Driver" );// 加载驱动程序 con DriverManager.getConnection( "jdbc:mysql://DbComputerNameOrIPAddr:3306/DatabaseName", UserNa…