一个PHP模板,主要想体现一下思路


Posted in PHP onDecember 25, 2006

思路:
欲在速度和易用(主要指的是美工设计的方便性)之间取得一个平衡点.于是采用了由html文件生成php文件的办法(编译?)
也想在分离显示逻辑和分离html代码之间平衡一下

例如一个论坛首页(index.php):

代码:
'1','forum_cat_id'=>'0','forum_name'=>'PHP学习'),    array('forum_id'=>'2','forum_cat_id'=>'0','forum_name'=>'MYSQL学习') ); $forums = array(    array('forum_id'=>'3','forum_cat_id'=>'1','forum_name'=>'PHP高级教程'),    array('forum_id'=>'4','forum_cat_id'=>'1','forum_name'=>'PHP初级教程'),    array('forum_id'=>'5','forum_cat_id'=>'2','forum_name'=>'MYSQL相关资料') ); if ($cats) {    if ($tpl->chk_cache($tpl_index))//检查判断是否需要重新生产PHP模板文件.     {        $tpl->load_tpl($tpl_index);//加载html模板文件.       //替换PHP语句       $tpl->assign_block("{block_cat}","");       $tpl->assign_block("{/block_cat}","}?>");         $tpl->assign_block("{block_forum}","");        $tpl->assign_block("{/block_forum}","}\n}?>");       //生产PHP模板文件.       $tpl->write_cache($tpl_index);    } } //包含PHP模板文件. include($tpl->parse_tpl($tpl_index)); ?>

对应的html模板文件(index.html):
代码:
{block_cat}         {block_forum}         {/block_forum}
{=$cat['forum_name']}
{=$forum['forum_name']}

{/block_cat}

经过处理,里面的{block_forum}{block_cat}标签被替换成PHP循环语句,用于显示数组种所有元素.

生成的PHP模板文件(default_index.php):

代码:
                } }?>
=$cat['forum_name']?>
=$forum['forum_name']?>

}?>

default_index.php被包含在index.php,这样就可以正常显示了.

这样,HTML模板文件可以用dw来进行修改美化,美工人员应该会方便一些.


template.php
代码:
$template,储存模板数据.    var $template = '';    //模板路径.    var $tpl_path = '';    //模板前缀(风格名称).    var $tpl_prefix = '';     //cache路径(编译后的路径).    var $cache_path = '';    //css文件路径.    var $css_path = '';    //header文件路径.    var $header_path = '';    //footer文件路径     var $footer_path = '';    /**    * 初始化模板路径.    */    function Template($root = 'default')    {       //模板前缀(风格名称).       $this->tpl_prefix = $root;       //模板文件路径.       $this->tpl_path = './templates/' . $root . '/';       //生成的PHP文件存放路径.       $this->cache_path = './template_data/' .$this->tpl_prefix . '_';       return true;    }    /**    * chk_cache,检查"编译"后的模板是否需要更新,判断依据:最后修改时间,"编译"文件是否存在.    */    function chk_cache($tpl_index)     {       $tpl_file = $this->tpl_path . $tpl_index . '.html';       $cache_file = $this->cache_path . $tpl_index . '.php';       //判断是否需要更新.       if(!file_exists($cache_file))         {          return true;       }         elseif(filemtime($tpl_file) > filemtime($cache_file))         {          return true;       }    }    /**    * 输出模板文件.    */    function parse_tpl($tpl_index,$message='')     {        return $this->cache_path . $tpl_index . '.php';     }    /**    * 加载模板文件.    */    function load_tpl($tpl_index)     {       $tpl_file = $this->tpl_path . $tpl_index . '.html';       $fp = fopen($tpl_file, 'r');       $this->template = fread($fp, filesize($tpl_file));       fclose($fp);    }    /**    * 替换变量,并且"编译"模板.    */    function write_cache($tpl_index)     {       $cache_file = $this->cache_path . $tpl_index . '.php';       //变量显示.       $this->template = preg_replace("/(\{=)(.+?)(\})/is", "=\\2?>", $this->template);       //界面语言替换.       $this->template = preg_replace("/\{lang +(.+?)\}/ies", "\$lang['main']['\\1']", $this->template);         $fp = fopen($cache_file, 'w');         flock($fp, 3);         fwrite($fp, $this->template);         fclose($fp);     }    /**    * 替换block.    */    function assign_block($search,$replace)     {       $this->template = str_replace($search,$replace,$this->template);    } } ?>
PHP 相关文章推荐
用PHP+java实现自动新闻滚动窗口
Oct 09 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
php array_intersect比array_diff快(附详细的使用说明)
Jul 03 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
PHP系列学习之日期函数使用介绍
Aug 18 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
php随机显示指定文件夹下图片的方法
Jul 13 PHP
php 7新特性之类型申明详解
Jun 06 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
May 30 PHP
Laravel 微信小程序后端搭建步骤详解
Nov 26 PHP
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 #PHP
php预定义常量
Dec 25 #PHP
php中看实例学正则表达式
Dec 25 #PHP
谈谈新手如何学习PHP
Dec 23 #PHP
服务器端解压缩zip的脚本
Dec 22 #PHP
Windows2003 下 MySQL 数据库每天自动备份
Dec 21 #PHP
剖析 PHP 中的输出缓冲
Dec 21 #PHP
You might like
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
php笔记之:AOP的应用
2013/04/24 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
jQuery 获取对象 根据属性、内容匹配, 还有表单元素匹配
2010/05/31 Javascript
jquery方法+js一般方法+js面向对象方法实现拖拽效果
2012/08/30 Javascript
ECMAScript 创建自己的js类库
2012/11/22 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
js中indexof的用法详细解析
2013/12/24 Javascript
Jquery中的层次选择器与find()的区别示例介绍
2014/02/20 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
VSCode中如何利用d.ts文件进行js智能提示
2018/04/13 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
Vue.extend 登录注册模态框的实现
2020/12/29 Vue.js
详解python调度框架APScheduler使用
2017/03/28 Python
Python线程创建和终止实例代码
2018/01/20 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
2019/03/18 Python
python实现支付宝转账接口
2019/05/07 Python
MoviePy简介及Python视频剪辑自动化
2020/12/18 Python
python常量折叠基础知识点讲解
2021/02/28 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
夏威夷航空官网:Hawaiian Airlines
2016/09/11 全球购物
回馈慈善的设计师太阳镜:DIFF eyewear
2019/10/17 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
毕业生医学检验求职信
2013/10/16 职场文书
项目合作计划书
2014/01/09 职场文书
资助贫困学生倡议书
2014/05/16 职场文书
通信工程专业求职信
2014/06/04 职场文书
教书育人演讲稿
2014/09/11 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2014年村党支部工作总结
2014/12/04 职场文书
结婚十年感言
2015/07/31 职场文书
深入理解MySQL中MVCC与BufferPool缓存机制
2022/05/25 MySQL