php

位置:IT落伍者 >> php >> 浏览文章

一个PHP模板,主要想体现一下思路


发布日期:2023年04月28日
 
一个PHP模板,主要想体现一下思路
思路:

欲在速度和易用(主要指的是美工设计的方便性)之间取得一个平衡点于是采用了由html文件生成php文件的办法(编译?)

也想在分离显示逻辑和分离html代码之间平衡一下

例如一个论坛首页(indexphp):

代码:

<?php

require(/templatephp);

//由html生成的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>chk_cache($tpl_index))//检查判断是否需要重新生产PHP模板文件

  {

   $tpl>load_tpl($tpl_index);//加载html模板文件

  //替换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));

?>

对应的html模板文件(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_forum}{block_cat}标签被替换成PHP循环语句用于显示数组种所有元素

生成的PHP模板文件(default_indexphp):

代码:

<?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_indexphp被包含在indexphp这样就可以正常显示了

这样HTML模板文件可以用dw来进行修改美化美工人员应该会方便一些

templatephp

代码:

<?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;

}

/**

* chk_cache检查编译后的模板是否需要更新判断依据:最后修改时间编译文件是否存在

*/

function chk_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);

}

}

?>               

上一篇:全面学习PHP数组初始化原理

下一篇:php遍历数组 list foreach each方法总结