Smarty的应用
smarty模板的核心是一個類,下載好的模板中有這么幾個重要的文件夾
(1)libs核心文件夾
(2)int.inc.php這是入口文件
(3)plugins:自己寫的插件文件夾
(4)templates_c:存放編譯好的文件
(5)int.inc.php這是入口文件
(6)定義好常量:不能修改
?
二、怎么用模板?
模板頁面
1.引入模板的入口文件
include("入口文件路徑位置");
2.直接用對象
提供一個方法:向模板中注冊變量的方法(assign(名字,值)
$smarty->assign("ceshi","你好");
提供一個方法:顯示模板的(display(模板的名稱或是路徑))
$smarty->display("ceshi.html");
正常頁面
{assign(名字)}
注意:
1.訪問的是php的頁面,顯示的是html頁面
2.html用到了外部的樣式表,位置是相對于訪問的php頁面來找外部樣式
?
(1)php頁面
<?php $filename = "../cache/huancun.html"; //這個是放緩存的頁面(緩存的不是代碼,而是頁面的源信息)include("../init.inc.php"); //引入入口文件 include("../DBDA.php"); //引入數據庫,要用到數據庫的內容$db = new DBDA(); //造新對象 $sql = "select * from chinastates"; //這是查找Chinastates表中的信息 $attr = $db->Query($sql); //執行這個語句$smarty->assign("shuzu",$attr); //注冊變量信息 $smarty->display("huancun.html"); //顯示模板
(2)html頁面
可以用表來顯示數據
<h1>數據列表</h1> <table width="50%" border="1" cellpadding="0" cellspacing="0"><tr><td>代號</td><td>名稱</td><td>操作</td></tr><{foreach $shuzu as $v}> <!--遍歷顯示這個表中的相應信息--><tr><td><{$v[0]}></td><td><{$v[1]}></td><td>操作</td></tr><{/foreach}></table>
看下效果
?
二、就是編寫“緩存”功能
進行寫入緩存的時候不是寫入的上面的php頁面,而是這個頁面的源代碼
(1)這個cache文件中要判斷這個huancun.html文件存不存在,存在怎么樣?不存在怎么樣?
結果就是:如果緩存文件存在:直接調用緩存;如果緩存文件不存在:重新緩存。
A.如果這個文件存在(判斷文件存不存在用的是:file_exists()方法)語句:
if(file_exists($filename)) {//直接調用緩存 include($filename); }B.否則(文件不存在)
?重要的是要在上面讀取數據庫的內容加上這幾項:
1.開啟內存緩存;
2.關閉內存緩存;
它們是成對的!!!
else {//重新緩存 ob_start(); //開啟內存緩存include("../init.inc.php");include("../DBDA.php");$db = new DBDA();$sql = "select * from chinastates";$attr = $db->Query($sql);$smarty->assign("shuzu",$attr);$smarty->display("huancun.html");$str = ob_get_contents(); //獲取內存中的緩存內容file_put_contents($filename,$str); //將字符串中的內容放入$filename的文件中ob_flush(); //關閉內存緩存echo "#######################################"; //這個是為了區別哪個是剛出來的緩存文件}看下效果如下圖,因為cache文件夾中沒有hunacun.html才會走上面的“否則”語句,輸出一長串的######
再刷新一下就沒有了,因為cache文件夾中已經有了huancun.html文件
?
三、緩存的有效時間
緩存要是一直都在的話,那么后臺怎么改,前面也不會進行修改,那么就要盡心緩存的有效時間
代碼如下:
$time = 10; //緩存有效期10秒 if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) ) //這是對緩存文件的判斷當緩存文件有了并且10秒之后就會重新又沒有緩存文件時候的輸出####
?
四、進行分頁的緩存
首先是分頁的php頁面的書寫,在上面的更新的php頁面中進行再一次修改,如下:
<?php $p = 1; if(!empty($_GET["page"])) {$p = $_GET["page"]; }$filename = "../cache/huancun{$p}.html"; //緩存文件存放的位置$time = 10; //緩存有效期10秒 if(file_exists($filename) && ((filemtime($filename)+$time)>= time()) ) {//直接調用緩存 include($filename); } else {//重新緩存 ob_start(); //開啟內存緩存include("../init.inc.php");include("../DBDA.php");$db = new DBDA();$sqll = "select count(*) from chinastates";$zts = $db->StrQuery($sqll); //總條數的執行語句include("../page.class.php");$page = new Page($zts,10); //分頁顯示的條數$sql = "select * from chinastates ".$page->limit; //分頁的$page->limit$attr = $db->Query($sql);$smarty->assign("fpage",$page->fpage()); //分頁信息的顯示$smarty->assign("shuzu",$attr);$smarty->display("huancun.html");$str = ob_get_contents(); //獲取內存中的緩存內容file_put_contents($filename,$str); //將$str的內容寫入$filename的文件中ob_flush(); //關閉內存緩存echo "#######################################";}
?
結果就是入下,每一個頁面都會從緩存開始有,10秒后失效
這是第二個頁面,剛開始沒有緩存文件,所以會有####
隨便點一頁,回來后就是有了緩存文件,所以沒有了###
轉載于:https://www.cnblogs.com/li1056822533/p/6771477.html
總結
- 上一篇: Android 之UID and PID
- 下一篇: 查看php-fpm 占用内存情况