一个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删除HTMl标签的实现代码
Jun 30 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
Aug 20 PHP
跟我学Laravel之安装Laravel
Oct 15 PHP
PHP的Yii框架中View视图的使用进阶
Mar 29 PHP
使用php实现从身份证中提取生日
May 09 PHP
Laravel中基于Artisan View扩展包创建及删除应用视图文件的方法
Oct 08 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
Feb 15 PHP
PHP高并发和大流量解决方案整理
Dec 24 PHP
laravel框架select2多选插件初始化默认选中项操作示例
Feb 18 PHP
详解php反序列化
Jun 10 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 8小时时间差的解决方法小结
2009/12/22 PHP
CodeIgniter图像处理类的深入解析
2013/06/17 PHP
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
PHP判断是否微信访问的方法示例
2019/03/27 PHP
Yii框架页面渲染操作实例详解
2019/07/19 PHP
jQuery实现原理的模拟代码 -6 代码下载
2010/08/16 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
JavaScript实现点击自动选择TextArea文本的方法
2015/07/02 Javascript
举例讲解Node.js中的Writable对象
2015/07/29 Javascript
JavaScript实现点击按钮就复制当前网址
2015/12/14 Javascript
JS中JSON对象和String之间的互转及处理技巧
2016/04/06 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
vue用递归组件写树形控件的实例代码
2018/07/19 Javascript
如何使用 vue + d3 画一棵树
2018/12/03 Javascript
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Django组件cookie与session的具体使用
2019/06/05 Python
如何在keras中添加自己的优化器(如adam等)
2020/06/19 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
获取CSDN文章内容并转换为markdown文本的python
2020/09/06 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
全球在线商店:BerryLook
2019/04/14 全球购物
医学护理毕业生自荐信
2013/11/07 职场文书
中药专业毕业自荐书范文
2014/02/08 职场文书
信息管理应届生求职信
2014/03/07 职场文书
竞聘上岗演讲稿
2014/05/16 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
机械机修工岗位职责
2014/08/03 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
惊天动地观后感
2015/06/10 职场文书