web development blog

> 编程 模板机制之web开发

模板机制,被很多人忽略,也被很多人理解为就是简单的查找和替换。在web开发中,很多人都不习惯把它们应用到我们的开发中。当然,现在很多比如mvc,以及一些用模板插件如Smarty/Heyes Template Class/SimpleTemplate等驱动的web应用程序是例外。在这里是在不用框架驱动,也不用模板插件,自己独立开发web应用程序的情况下,谈谈开发心得。

为什么要用模板机制?很多人在潜意识中就会认为,使用它们就多是查找和替换,影响速度;或者认为如果用一个模板插件类驱动,就增加了应用程序的体积变臃肿了,也要去学习模板标签的语法。但是,我想说的是,真的是那样吗?下面我从几点来说说我使用它们,给我带来的方便之处和体会:

第一:程序做到代码和视图html结构分离,条理清晰,后期维护方便;

第二:后台开发,和前端开发协调更好。比一些公司是前端做好页面结果效果后,丢给后台程序,然后程员又重新一次把程序嵌套进去,工作重复。而且程序对样式那些比较感冒,总是要前端配合,而前端开发又对程序感冒。对彼此合作起来,互相感冒,觉得工作配合很繁琐。如果你融入了模板机制,那么会让你们配合的更好。

第三:模板机制的实现,我也是为了要生成静态页来考虑的。因为web应用程序静态化,特别是企业型的cms网站,可让页面访问速度变快,不用通过服务器执行后才返回,以及数据库连接等等。总之,生成静态后,好处多多。

第四:自己开发一个模板机制。不可能有现成的模板插件,而且给方面都和你需求一样,要想符合自己,就要自己总结自己的工作,开发一个属于自己简单、易用的。以后可以大大的提示你的开发效率,带来你想象不到的惊喜。

第五:也许有人会说,你这样不累吗,现在的模板机制已经又不少,很成熟了,你这是浪费时间。随便用一个框架驱动,就可以做到前后台分工,或者真的想要就用一个模板插件就解决问题,不用多此一举!他们的这些质疑也是有道理的,可是人你追求速度,不想应用程序臃肿,又想在一定程度上分离。对应一些需求,实在没必要大动干戈,搞什么框架驱动之类的。我就喜欢diy,裸写代码的基础上,融入一些自己的开发想法。在工作中,面对各种需求,我不断积累,和完善,发现,自己开发的东西,不但自己非常了解,也很好扩展(也遇到过头疼的,比如多语言等),在无法扩展的情况下,又重构核心代码,使之变的可以扩展,很多问题都从复杂变简单了,自己也从中成长很多。

啰嗦了那么多,下面就来实现一个大家口中简单的“查找替换”。

TemplateParse模板类介绍:

/**
 * 模板解析类
 * TemplateParse
 */

///属性列表
public static $version = 1.0;
private $regTag = '/{(.*?)}/'; ///模板标签标识规则
private $tplPath = ''; ///模板路径
private $toPath = ''; ///生成文件存放路径
private $ext = '.html'; ///生成文件后缀
private $tplData = array();///保存模板标签动态数据

///方法列表
/**
 * 解析模板,返回解析后的字符串
 * @param $tpl_name string 模板文件名字
 * @param $data array 动态数据
 * @return $content string;
 */
public function parseTemplate($tpl_name,$data)

/**
 * 执行模板解析,并生成文件
 * @param $tpl_name string 模板文件名字
 * @param $file_name string 生成文件名称
 * @param $data array 动态数据
 * @return boolean;
 */
public function parseToFile($tpl_name,$file_name,$data)

/**
 * 替换内容标签
 */
private function replaceContent($str)

/**
 * 替换模板标签
 * @param $str string
 * @param $data array key/value 关联数组
 * return $str string 返回替换标签后的字符串
 */
private function replaceTag($str,$data)

/**
 * 读取模板文件
 * @param $file_path string
 * @return string
 */
private function readFile($file_path)
    
/**
 * 生成html文件
 * @param $content string
 * @param $file_name  string
 * return boolean
 */
private function writeFile($content,$file_name)
 
/**
 * 检测路径文件夹是否存在
 * & 没有就创建文件夹
 * @param string $path
 * @return boolean
 */
private function dir_create($path)
 
/**
 * 返回标准的绝对路径
 * @param string $path
 * @return string
 */
private function dir_path($path)

模板解析类使用demo:

/**
 * 模板机制
 */
define('ROOTPATH', substr(str_replace('\\','/',__FILE__),0,-9));

//导入类
require_once ROOTPATH.'core/TemplateParse.php';

//模拟数据
$data = array(
		'web_name'=>'站点名称',
		'title'=>'简单的模板机制',
		'keywords'=>'seo 关键字',
		'description'=>'seo 描述',
		'content'=>'body 主要内容'				
	);


//模板类类配置
$config = array(
		'tplPath'=>ROOTPATH.'tpl/',
		'toPath'=>ROOTPATH.'html/'
);

//new 一个实例
$template = new TemplateParse($config);

//解析模板文件,并生成html静态文件
$template->parseToFile('demo', 'first_tpl', $data);

//输出模板替换后的内容
echo $template->parseTemplate('demo', $data);

结语:类很简单,也只是举了一个内容普通标签替换。其中replaceContent就是一个实际应用的函数,你可以自己扩展,比如你把页面分成(hd.html,bd.html,ft.html)等,自己组合扩展。在类里面,如果你想要,可以可传递$db数据库链接对象,然后读取数据库的数据,进行替换。也可以扩展一些循环标签等,标签语法可以自己定,只要通过正则取出,然后解析,我用的标签是#table:case tpl='sub_li_tpl'#做的循环扩展。

下面附上模板机制的源码,下载点击 这里

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com