一个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脚本的10个技巧(3)
Oct 09 PHP
DISCUZ 分页代码
Jan 02 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
PHP 之Section与Cookie使用总结
Sep 14 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
PDO预处理语句PDOStatement对象使用总结
Nov 20 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
PHP记录和读取JSON格式日志文件
Jul 07 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中文件上传的安全问题
2006/10/09 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
2016/03/18 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
laravel 框架配置404等异常页面
2019/01/07 PHP
laravel执行php artisan migrate报错的解决方法
2019/10/09 PHP
JavaScript统计字符串中每个字符出现次数完整实例
2016/01/28 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
JS检测页面中哪个HTML标签触发点击事件的方法
2016/06/17 Javascript
AngularJS 指令详细介绍
2016/07/27 Javascript
JavaScript学习笔记整理_关于表达式和语句
2016/09/19 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
用vue和node写的简易购物车实现
2017/04/25 Javascript
mongoose中利用populate处理嵌套的方法
2017/05/26 Javascript
Vue中组件之间数据的传递的示例代码
2017/09/08 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
Python批量转换文件编码格式
2015/05/17 Python
Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)
2017/08/23 Python
python 文件操作删除某行的实例
2017/09/04 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Python从数据库读取大量数据批量写入文件的方法
2018/12/10 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python查看文件大小和文件夹内容的方法
2019/07/08 Python
关于Pytorch MaxUnpool2d中size操作方式
2020/01/03 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
服装电子商务创业计划书
2014/01/30 职场文书
网络技术专业求职信
2014/02/18 职场文书
考核工作实施方案
2014/03/30 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
中秋节活动总结
2014/08/29 职场文书
城管执法人员个人对照检查材料思想汇报
2014/09/29 职场文书
质量保证书格式模板
2015/02/27 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
新教师教学工作总结
2015/08/12 职场文书