热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php-smarty模板使用教程(四)-程序员篇

以上四个属性在2.6是公有的,在3.0里有私有的,建议大家使用相应的set和get方法进行设置和读取

Smarty程序设计篇

模板设计-à前台人员;程序设计-àphp开发人员
一、 Smarty模板常量
SMARTY_DIR  Smarty框架的路径
代码:$smarty=new Smarty();
//在这里,我们输出了smarty框架的路径
  echo SMARTY_DIR;
二、Smarty模板 变量
l $template_dir :模板路径 
l $compile_dir :编译路径
l $config_dir :配置文件路径
l $cache_dir :缓存文件
以上四个属性在2.6是公有的,在3.0里有私有的,建议大家使用相应的set和get方法进行设置和读取
l $left_delimiter :左分隔
l $right_delimiter :右分隔符
以上二个属性是公有的,可以直接访问
这们的默认值是 “{“   “}”
为了不和css和js起冲突,一般情况下,程序员会将这两个属性的值设置为以下几种
<{$name}>
{*$name*}
l $caching :是否开启缓存 
l $cache_lifetime :默认的缓存时间
如果想在smarty中使用缓存,都必须将当前caching的属性设置为true
Caching在3.0中是公有的,可以直接设置,它的值。默认是false,表示不开启缓存功能
默认的缓存时间的单位是秒,值是3600(一小时)
l $debugging 开启缓试窗口
在smarty中,开启调试共有2种方法:
1)在模板中使用   {debug}
2)在程序中使用  $smarty->debugging=true
{debug}可以观察模板中所有的变量,包括模板创建的变量
$debugging属性打开的调试只能观察php文件分配的变量
l $php_handling
在smarty2.6中,如果想在模板中使用{php}{/php}这个函数,必须设置该属性的值为true,在3.0中,可以不设置
问题:
在smarty中,编译目录和缓存目录是不是自动生成的?答:是!!!
Tip:不过不要过渡依赖这个自动生成,应该尽量手动创建!
如果模板的内容发生改变,smarty会重新生成缓存文件
 
  1. //要开启缓存,设置为true即可 
  2.     $smarty->caching=true; 
  3.      
  4.     //这个缓存时间的设置一般取决于网站的流量,越大,时间越小,越小,时间越大 
  5.     $smarty->cache_lifetime=3600; 
  6.      
  7.     $smarty->assign('name','lisi'); 
  8.      
  9.     //开启smarty的调试窗口 
  10.     $smarty->debugging=true; 
  11.      
  12.     $smarty->display('demo01.htpl'); 
三、 Smarty模板方法
l assign :为模板变量赋值 (传值)
l assignByRef :为模板变量赋值 (传地址)
l append :将变量或值追加至数组
l appendByRef :将变量以地址形式追加至数组
append认为,数据是可变的,是不固定的
l clearAllAssign :清除所有已赋值的模板变量
l clearAssign :清除指定的模板变量
l clearCache :清除缓存
l configLoad :加载配置文件
在smarty中,如果想加载一个配置文件,有两种方式:
1) 在模板中  {config_load file=’file’}
2) 在程序中  $smarty->configLoad(配置文件名,配置节);
l clearConfig :清除某个配置文件的变量
l display :显示某模板
1) 读取模板内容
2) 替换字符串
3) 输出
l fetch :返回替换之后的字符串
1) 读取模板内容
2) 替换字符串
3) 返回字符串(返回给php程序)
l templateExists :判断模板是否存在
在smarty中,如果使用了一个不存在的模板则会出错,所以在显示一个模板之前应
该对这个模板进行判断,判断其是否存在
下面是代码部分:
 
													
  1. //assignByRef 为模板变量赋 变量地址 
  2.     $name='xiaogang'; 
  3.     //$smt->assign('name',$name); 
  4.     $smt->assignByRef('name',$name); 
  5.     $name="lixiaolong"; 
  6.     $smt->display('demo2.html'); 
  7.  
 
																					
  1. /*append的用法、appendByRef的用法*/ 
  2.     $c1='美国'; 
  3.     $smarty->appendByRef('city',$c1);   //将c1变量以地址形式传给city 
  4.     $smarty->append('city','北京');   //将北京追加模板变量数组city中 
  5.     $smarty->append('city','上海');   //将上海追加模板变量数组city中 
  6.     $c1='山东'; 
  7.      
  8.     //这种写法相当于 
  9.       // $smarty->assign('city',array('北京','上海')); 
 
	
																																
  1. //将所有之前模板变量的值清空 
  2.     //$smarty->clearAllAssign(); 
  3.      
  4.     //将模板变量name的值清空 
  5.     //$smarty->clearAssign('name'); 
  6.      
  7.     //$smarty->caching=true; 
  8.     //表示清除demo02.htpl这个模板文件的缓存文件 
  9.     //$smarty->clearCache('demo02.htpl'); 
  10.      
  11.     //加载demo02.conf配置文件 
  12.     //$smarty->configLoad('demo02.conf'); 
  13.     //表示将配置文件中的fgcolor的值清除 
  14.     //$smarty->clearConfig('fgcolor'); 
 
																																																
  1. //fetch方法一般用于生成静态页 
  2. //  $str=$smarty->fetch('demo03.htpl'); 
  3. //  $filename='html/'.date("YmdHis").'.html'; 
  4. //  file_put_contents($filename, $str); 
  5.      
  6.     //显示某个模板 
  7.     ///$smarty->display('demo03.htpl'); 
  8.      
  9.      
  10.     //调用了一个不存在的模板,程序出错 
  11.     //如果模板存在,返回值为true,反之为false 
  12.     if($smarty->templateExists('demo04.htpl')) 
  13.         $smarty->display('demo04.htpl'); 
  14.     else 
  15.         echo '模板不存在!'; 
  16.      
Assign和assignByRef的区别:
 
phpstar
 
四、 对象应用
l 注册对象到模板,然后通过类似于用户自定义函数的形式来访问它。
l 给模板分配对象,然后通过访问其它赋值变量类似的方法进行访问
 
																																																																	
  1. class Person 
  2.     { 
  3.         public $name; 
  4.         public $age; 
  5.          
  6.         public function display() 
  7.         { 
  8.             echo '你好,我的名字是'.$this->name.'年龄是'.$this->age.'
    '; 
  9.         } 
  10.     } 
  11.     $per=new Person(); 
  12.     $per->name='zhangsan'; 
  13.     $per->age='30'; 
  14.  
  15.     include('../Smarty/Smarty.class.php'); 
  16.      
  17.     $smarty=new Smarty(); 
  18.     $smarty->assign('per',$per);    //为模板分配了一个对象per 
  19.     $smarty->display('demo04.htpl'); 
 
 
五、 过滤器
就是用来过滤数据的
1、过滤器的种类
Prefilters预过滤器
Postfilters后过滤器
Output Filters输出过滤器(输出滤镜)
2、过滤器的流程
l tpl源文件 =〉Prefilter =〉编译tpl文件 => Postfilter =>保存到磁盘=> 编译过的php文件执行=〉Output Filters(=〉如果有smarty cache的话,Output Filters的内容会缓存) =>结果输出。
读取tpl模板文件之后,对它进行编译之前,触发的是预过滤器
编译之后,保存之前,触发的是后过滤器
保存之后,输出之前,触发的是输出过滤器
3、使用过滤器
在smarty中,使用过滤器必须要先注册
在smarty2.6中,使用过滤器通过以下形式:
l Prefilters注册预过滤器
$smarty->register_prefilter(“func”); 
l Postfilters 注册后过滤器
$smarty->register_postfilter(“func”); 
l Output Filters 注册输出过滤器
$smarty->register_outputfilter(“func”);
在smarty3.0中,使用以下形式注册:
$smarty->registerFilter($type, $callback)
Type:过滤器类型   取值范围:pre、post、output
Callback:回调函数 (当触发过滤器时执行的函数)
4、开始使用
 
																																																																																					
  1. //display1是预过滤器的回调函数 
  2.     function display1($tpl) //tpl表示模板内容 
  3.     { 
  4.         echo '这是预过滤器!
    '; 
  5.         //$tpl=str_replace('#title#', '家教网', $tpl); 
  6.         return $tpl; 
  7.     } 
  8.     function display2($tpl) 
  9.     { 
  10.         echo '这是后过滤器!
    '; 
  11.         //$tpl=''.$tpl; 
  12.         return $tpl; 
  13.     } 
  14.     function display3($tpl) 
  15.     { 
  16.         echo '这是输出过滤器!
    '; 
  17. $tpl=str_replace('smarty', 'smarty', $tpl); 
  18.         return $tpl; 
  19.     } 
  20.     include('../Smarty/Smarty.class.php'); 
  21.     $smarty=new Smarty(); 
  22.     //注册预过滤器 
  23.     $smarty->registerFilter('pre', 'display1');  
  24.     //注册后过滤器 
  25.     $smarty->registerFilter('post', 'display2');     
  26.     //注册输出过滤器 
  27.     $smarty->registerFilter('output', 'display3'); 
  28.     $smarty->display('demo05.htpl'); 
 
预过滤器和后过滤器只要模板没有改变,只能执行一次
输出过滤器可以每次执行

推荐阅读
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 后台获取视图对应的字符串
    1.帮助类后台获取视图对应的字符串publicclassViewHelper{将View输出为字符串(注:不会执行对应的ac ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
author-avatar
mobiledu2502927147
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有