熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

一個PHP模板,主要想體現一下思路

2022-06-13   來源: 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);
   }
}
?>
From:http://tw.wingwit.com/Article/program/PHP/201405/30764.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.