知识大全 一个PHP模板,主要想体现一下思路
Posted 文件
篇首语:不知道自己无知,乃是双倍的无知。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 一个PHP模板,主要想体现一下思路相关的知识,希望对你有一定的参考价值。
一个PHP模板,主要想体现一下思路 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
思路: 欲在速度和易用(主要指的是美工设计的方便性)之间取得一个平衡点 于是采用了由文件生成php文件的办法(编译?) 也想在分离显示逻辑和分离代码之间平衡一下 例如一个论坛首页(index php): 代码: <?php require( /template php ); //由生成的php文件的前缀 区别使用多种风格 $tpl_prefix = default ; //模板文件名 $tpl_index = index ; $tpl = new Template($tpl_prefix); $cats = array( array( forum_id => forum_cat_id => forum_name => PHP学习 ) array( forum_id => forum_cat_id => forum_name => MYSQL学习 ) ); $forums = array( array( forum_id => forum_cat_id => forum_name => PHP高级教程 ) array( forum_id => forum_cat_id => forum_name => PHP初级教程 ) array( forum_id => forum_cat_id => forum_name => MYSQL相关资料 ) ); if ($cats) if ($tpl >c_cache($tpl_index))//检查判断是否需要重新生产PHP模板文件 $tpl >load_tpl($tpl_index);//加载模板文件 //替换PHP语句 $tpl >assign_block( block_cat <?foreach(\\$cats as \\$cat) ?> ); $tpl >assign_block( /block_cat <??> ); $tpl >assign_block( block_forum <?foreach(\\$forums as \\$forum) \\nif(\\$forum[ forum_cat_id ] == \\$cat[ forum_id ]) ?> ); $tpl >assign_block( /block_forum <?\\n?> ); //生产PHP模板文件 $tpl >write_cache($tpl_index); //包含PHP模板文件 include($tpl >parse_tpl($tpl_index)); ?> 对应的模板文件(l): 代码: block_cat <table width= % border= cellspacing= cellpadding= bgcolor= # align= center > <tr align= =TR_ALING bgcolor= #FFFFFF > <td colspan= ><span class= title ><b>=$cat[ forum_name ]</b></span></td> </tr> block_forum <tr bgcolor= #FFFFFF > <td valign= top >=$forum[ forum_name ]</td> </tr> /block_forum </table> <br> /block_cat 经过处理 里面的block_forumblock_cat标签被替换成PHP循环语句 用于显示数组种所有元素 生成的PHP模板文件(default_index php): 代码: <?foreach($cats as $cat) ?> <table width= % border= cellspacing= cellpadding= bgcolor= # align= center > <tr align= <?=TR_ALING?> bgcolor= #FFFFFF > <td colspan= ><span class= title ><b><?=$cat[ forum_name ]?></b></span></td> </tr> <?foreach($forums as $forum) if($forum[ forum_cat_id ] == $cat[ forum_id ]) ?> <tr bgcolor= #FFFFFF > <td valign= top ><?=$forum[ forum_name ]?></td> </tr> <? ?> </table> <br> <??> default_index php被包含在index php 这样就可以正常显示了 这样 HTML模板文件可以用dw来进行修改美化 美工人员应该会方便一些 template php 代码: <?php /********************************************************************************* * 模板类(Template) * 最后修改时间: 本论坛使用 * * * **********************************************************************************/ class Template //$this >$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; /** * c_cache 检查 编译 后的模板是否需要更新 判断依据:最后修改时间 编译 文件是否存在 */ function c_cache($tpl_index) $tpl_file = $this >tpl_path $tpl_index l ; $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 l ; $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 <?=\\\\ ?> $this >template); //界面语言替换 $this >template = preg_replace( /\\lang +( +?)\\/ies \\$lang[ main ][ \\\\ ] $this >template); $fp = fopen($cache_file w ); flock($fp ); fwrite($fp $this >template); fclose($fp); /** * 替换block */ function assign_block($search $replace) $this >template = str_replace($search $replace $this >template); ?> cha138/Article/program/PHP/201405/30764相关参考