Smarty_迷你模板引擎开发(1)
来源:互联网 发布:ntfs for mac os 10.5 编辑:程序博客网 时间:2024/04/25 06:46
Smarty是一个使用PHP写出来的模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目的就是要使PHP程序员同前端人员分离,使程序员改变程序的逻辑内容不会影响到前端人员的页面设计,前端人员重新修改页面不会影响到程序的程序逻辑,这在多人合作的项目中显的尤为重要。
Smarty开发图
模板文件(02.html)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Untitled Document</title></head><body><div>{$title}</div><div>{$content}</div></body></html>
迷你引擎类文件(MiniSmarty.class.php),通过模板引擎类,处理模板文件,得到混编文件(02.html.php),然后导入这个混编文件。
<?php//模板引擎类class MiniSmarty{ //“编译”模板文件({ }标记替换为php标记) function compile($tpl){ //获得模板文件内部具体的模板内容 $cont = file_get_contents($tpl); //echo $cont; //替换:{ 替换为 < ?php echo $cont = str_replace("{", "<?php echo ", $cont); //替换:} 替换为 ;? > $cont = str_replace("}", ";?>", $cont); //echo $cont; //把生成好的编译内容(php+html混编内容)放入一个文件里 file_put_contents('./02.html.php', $cont); //引入混编文件 require "02.html.php"; }}
混编文件(02.html.php)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Untitled Document</title></head><body><div><?php echo $title;?></div><div><?php echo $content;?></div></body></html>
客户端页面(02.php),使用模板类。
<?phpini_set('display_errors',1);$title = "今日头条";$content = "北京机动车限行";//1.引入Smartyrequire "02.MiniSmarty.class.php";//2.实例化smarty对象$smarty = new MiniSmarty;//3.调用compile方法,同时传递02.html模板文件参数//在该方法里面把02.html内部标记替换为php标记$smarty->compile('02.html');
但直接运行会出现错误
Notice: Undefined variable: title Notice: Undefined variable: content
之所以出错,在于变量的作用域的问题,
$title = "今日头条";$content = "北京机动车限行";
是全局变量,不能在类中直接使用。
解决方法:
可以把模板引擎内部使用的变量信息都声明为该“模板类”的属性信息,这样在类的内部可以正常使用本身的属性信息。
改写模板引擎(02.MiniSmarty.class.php)
<?php//模板引擎类class MiniSmarty{ //给该类声明属性,用于存储外部的变量信息 public $tpl_var = array(); //把外部变量设置为类内部属性的一部分 function assign($k, $v){ $this->tpl_var[$k] = $v; } //“编译”模板文件({ }标记替换为php标记) function compile($tpl){ //获得模板文件内部具体的模板内容 $cont = file_get_contents($tpl); //echo $cont; /*//替换:{ 替换为 < ?php echo $cont = str_replace("{", "<?php echo ", $cont);*/ //替换:{ 替换为 < ?php echo $this->tpl_var[' $cont = str_replace("{\$", "<?php echo \$this->tpl_var['", $cont); /*//替换:} 替换为 ;? > $cont = str_replace("}", ";?>", $cont);*/ //替换:} 替换为 '];? > $cont = str_replace("}", "'];?>", $cont); //echo $cont; //把生成好的编译内容(php+html混编内容)放入一个文件里 file_put_contents('./02.html.php', $cont); //引入混编文件 require "02.html.php"; }}
客户端页面(02.php)
<?phpini_set('display_errors',1);//$title = "今日头条";//$content = "北京机动车限行";//1.引入Smartyrequire "02.MiniSmarty.class.php";//2.实例化smarty对象$smarty = new MiniSmarty;//把字符串信息设置为模板引擎类的属信息$smarty->assign('title', '今日头条');$smarty->assign('content', '北京机动车限行');//3.调用compile方法,同时传递02.html模板文件参数//在该方法里面把02.html内部标记替换为php标记$smarty->compile('02.html');
会重新生成混编文件(02.html.php)
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>Untitled Document</title></head><body><div><?php echo $this->tpl_var['title'];?></div><div><?php echo $this->tpl_var['content'];?></div></body></html>
运行结果:
今日头条北京机动车限行
有关模板引擎小优化,请参考 Smarty_模板引擎优化
0 0
- Smarty_迷你模板引擎开发(1)
- Smarty_模板引擎开发(2)
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好(附代码)
- Smarty_总结1
- 写一个迷你版Smarty模板引擎,对认识模板引擎原理非常好
- SimpleTemplate模板引擎开发
- dolite模板引擎开发
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(一)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(二)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(三)
- 由浅入深:自己动手开发模板引擎——置换型模板引擎(四)
- 用C为LUA写一个超迷你的模板引擎.
- 学习 javascript 模板引擎开发
- 开发自己的模板引擎
- 如何使用 velocity 模板引擎开发网站(转)
- Velocity模板引擎之旅(1)
- Smarty_缓存
- 新手开发asp.net模板引擎(1): 一个简单的模板
- NOIP 1999 旅行家的预算
- [LeetCode]Maximum Subarray
- shoi2001 化工厂装箱员
- Eclipse启动时发生An internal error occurred during: "Initializing Java Tooling".错误的解决方法
- 素数路
- Smarty_迷你模板引擎开发(1)
- mysql取某个范围内随机日期
- PCI设备的地址空间
- MSbuid命令行参数
- dojo DOM
- html5 js 图片上传预览
- 为经典版eclipse增加web and JavaEE插件
- Hibernate中使用Session中出现的问题
- xml解析