Smarty實(shí)現(xiàn)頁面靜態(tài)化(生成HTML)的方法

字號:


    本文實(shí)例講述了Smarty實(shí)現(xiàn)頁面靜態(tài)化(生成HTML)的方法。分享給大家供大家參考,具體如下:
    為了減少數(shù)據(jù)庫讀取次數(shù),某些內(nèi)容不經(jīng)常被更改的頁面,比如文章詳細(xì)頁面需要做成HTML靜態(tài)頁面。
    在使用Smarty的情況下,也可以實(shí)現(xiàn)頁面靜態(tài)化。下面先簡單說一下使用Smarty時通常動態(tài)讀取的做法。
    一般分這幾步:
    1、通過URL傳遞一個參數(shù)(ID);
    2、然后根據(jù)此ID查詢數(shù)據(jù)庫;
    3、取得數(shù)據(jù)后根據(jù)需要修改顯示內(nèi)容;
    4、assign需要顯示的數(shù)據(jù);
    5、display模板文件。
    Smarty靜態(tài)化過程只需要在上述過程中添加兩個步驟:
    第一:在1之前使用 ob_start() 打開緩沖區(qū)。
    第二:在5之后使用 ob_get_contents() 獲取內(nèi)存未輸出內(nèi)容,然后使用fwrite()將內(nèi)容寫入目標(biāo)html文件。
    根據(jù)上述描述,此過程是在網(wǎng)站前臺實(shí)現(xiàn)的,而內(nèi)容管理(添加、修改、刪除)通常是在后臺進(jìn)行,為了能有效
    利用上述過程,可以使用一點(diǎn)小手段,那就是Header()。具體過程是這樣的:在添加、修改程序完成之后,使用
    Header() (當(dāng)然還有其它方式)跳到前臺讀取,這樣可以實(shí)現(xiàn)頁面HTML化,然后在生成html后再跳回后臺管理側(cè),而這兩個跳轉(zhuǎn)
    過程是不可見的。
    <?php
    $cachefile="./cache/demo.html";//把緩存文件放到一個cache文件夾里
    $cachetime=20;
    if (!file_exists($cachefile ) || filemtime($cachefile)+$cachetime < time()) //判斷是否存在和過期時間
    {
      ob_start();//輸出控制
      echo '<table width="800">';
      echo '<caption><h1>user</h1></caption>';
      echo '<tr>';
      echo "<td>11111</td>";
      echo "<td>22222</td>";
      echo '</tr>';
      echo '<tr>';
      echo "<td>11111</td>";
      echo "<td>22222</td>";
      echo '</tr>';
      echo '</table>';
    $html=ob_get_contents();
    file_put_contents($cachefile, $html);//輸出到緩存文件
    ob_end_flush();//輸出并關(guān)閉緩沖區(qū)
    }
    else{
      echo 'ceshi';
     include $cachefile;
    }
    ?>
    希望本文所述對大家基于smarty模板的PHP程序設(shè)計(jì)有所幫助。