一个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 $_SERVER当前完整url的写法
Nov 12 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
Jan 07 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php循环创建目录示例分享(php创建多级目录)
Mar 04 PHP
WordPress中登陆后关闭登陆页面及设置用户不可见栏目
Dec 31 PHP
PHP使用strrev翻转中文乱码问题的解决方法
Jan 13 PHP
php写app接口并返回json数据的实例(分享)
May 20 PHP
360搜索引擎自动收录php改写方案
Apr 28 PHP
laravel 操作数据库常用函数的返回值方法
Oct 11 PHP
php下的原生ajax请求用法实例分析
Feb 28 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
DOTA2 无惧惊涛骇浪 昆卡大型水友攻略
2020/04/20 DOTA
php实现的一段简单概率相关代码
2016/05/30 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
简单的jquery左侧导航栏和页面选中效果
2014/08/21 Javascript
AngularJS模块管理问题的非常规处理方法
2015/04/29 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
js实现表单多按钮提交action的处理方法
2015/10/24 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
jQuery实现的分子运动小球碰撞效果
2016/01/27 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
js隐式转换的知识实例讲解
2018/09/28 Javascript
JS图片懒加载技术实现过程解析
2020/07/27 Javascript
EXTJS7实现点击拖拉选择文本
2020/12/17 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
python三元运算符实现方法
2013/12/17 Python
深入探究Django中的Session与Cookie
2017/07/30 Python
Python实现随机选择元素功能
2017/09/14 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
python二分法查找算法实现方法【递归与非递归】
2019/12/06 Python
pytorch  网络参数 weight bias 初始化详解
2020/06/24 Python
基于Python实现天天酷跑功能
2021/01/06 Python
HTML5的结构和语义(3):语义性的块级元素
2008/10/17 HTML / CSS
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
自我评价的正确写法
2013/09/19 职场文书
创建文明学校实施方案
2014/03/11 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
医生个人自我剖析材料
2014/10/08 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
2014年妇幼保健工作总结
2014/12/08 职场文书
《观潮》教学反思
2016/02/17 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js