一个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自动更新新闻DIY
Oct 09 PHP
PHP 中dirname(_file_)讲解
Mar 18 PHP
PHP教程 预定义变量
Oct 23 PHP
PHP开发负载均衡指南
Jul 17 PHP
PHP中如何实现常用邮箱的基本判断
Jan 07 PHP
destoon实现调用自增数字从1开始的方法
Aug 21 PHP
php获取文件名后缀常用方法小结
Feb 24 PHP
apache和PHP如何整合在一起
Oct 12 PHP
Symfony2使用第三方库Upload制作图片上传实例详解
Feb 04 PHP
php 在字符串指定位置插入新字符的简单实现
Jun 28 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 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
2019十大人气国漫
2020/03/13 国漫
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
PHP处理postfix邮件内容的方法
2015/06/16 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
php提高脚本性能的4个技巧
2020/08/18 PHP
JSON 学习之完全手册 图文
2007/05/29 Javascript
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
JavaScript之Getters和Setters 平台支持等详细介绍
2012/12/07 Javascript
jQuery中unwrap()方法用法实例
2015/01/16 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
NVM安装nodejs的方法实用步骤
2019/01/16 NodeJs
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
微信小程序登录时如何获取input框中的内容
2019/12/04 Javascript
JS Generator 函数的含义与用法实例总结
2020/04/08 Javascript
OpenLayers3实现鼠标移动显示坐标
2020/09/25 Javascript
离线安装Pyecharts的步骤以及依赖包流程
2020/04/23 Python
Python使用requests及BeautifulSoup构建爬虫实例代码
2018/01/24 Python
python使用锁访问共享变量实例解析
2018/02/08 Python
Python简单计算给定某一年的某一天是星期几示例
2018/06/27 Python
对Python中画图时候的线类型详解
2019/07/07 Python
python pymysql库的常用操作
2020/10/16 Python
python中的对数log函数表示及用法
2020/12/09 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
文明宿舍获奖感言
2014/02/07 职场文书
信息技术培训感言
2014/03/06 职场文书
毕业生应聘求职信
2014/07/10 职场文书
学位证书委托书
2014/09/30 职场文书
2014年政协工作总结
2014/12/09 职场文书
2015年秋季小学开学标语
2015/07/16 职场文书
python基于tkinter实现gif录屏功能
2021/05/19 Python
vue-cropper插件实现图片截取上传组件封装
2021/05/27 Vue.js
聊聊Lombok中的@Builder注解使用教程
2021/11/17 Java/Android