99re热这里只有精品视频,7777色鬼xxxx欧美色妇,国产成人精品一区二三区在线观看,内射爽无广熟女亚洲,精品人妻av一区二区三区

Smarty控制輸出緩存

2018-12-09 11:37 更新

控制輸出緩存

通常情況下,開(kāi)啟緩存可以讓整個(gè)最終輸出的頁(yè)面被緩存下來(lái)。 然而,Smarty 3提供了幾種在輸出緩存中控制部分區(qū)域不進(jìn)行緩存的方法。

一般說(shuō)明

注意在不緩存的區(qū)域內(nèi)使用的全部變量,在頁(yè)面每次加載時(shí)都會(huì)從PHP里重新賦值。

模板區(qū)域緩存控制

模板內(nèi)的一塊區(qū)域可以很容易地通過(guò) {nocache} 和{/nocache} 標(biāo)簽來(lái)設(shè)置不進(jìn)行緩存。

Example 15.10. 使模板的一塊區(qū)域不進(jìn)行緩存

今天是:
{nocache}
{$smarty.now|date_format}
{/nocache}

上面的代碼將在一個(gè)緩存的頁(yè)面上輸出當(dāng)前日期時(shí)間。


標(biāo)簽的緩存控制

控制單個(gè)標(biāo)簽不進(jìn)行緩存,可以為其加入"nocache"的屬性。

Example 15.11. 讓標(biāo)簽內(nèi)容不進(jìn)行緩存

今天是:
{$smarty.now|date_format nocache}

變量的緩存控制

你可以通過(guò)assign()來(lái)控制變量值不進(jìn)行緩存。

說(shuō)明

如果一個(gè)變量被設(shè)置了不緩存,那么它在頁(yè)面每次加載時(shí)都會(huì)從PHP里重新賦值。

說(shuō)明

變量不緩存的設(shè)置,會(huì)在編譯后的代碼中起效。所以如果你重新設(shè)置了某個(gè)變量不緩存,那么你需要?jiǎng)h除已經(jīng)存在的編譯和緩存文件,使得模板可以重新編譯并起效。

Example 15.12. 控制變量不緩存

// 賦值$foo,并將其設(shè)置成不緩存的變量
$smarty->assign('foo',time(),true);

動(dòng)態(tài)的時(shí)間值是: {$foo}

插件的緩存控制

你可以在注冊(cè)一個(gè)插件時(shí),同時(shí)控制插件的緩存。 registerPlugin() 的第三個(gè)參數(shù)是$cacheable,其默認(rèn)是TRUE

當(dāng)你注冊(cè)一個(gè)插件時(shí),同時(shí)設(shè)置$cacheable=false, 那么插件會(huì)在每次頁(yè)面顯示的時(shí)候都被調(diào)用,即使頁(yè)面整體已經(jīng)被緩存了。 插件函數(shù)的這個(gè)行為和{insert}很相似。

說(shuō)明

插件不緩存的設(shè)置,會(huì)在編譯后的代碼中起效。所以如果你重新設(shè)置了某個(gè)插件不緩存,那么你需要?jiǎng)h除已經(jīng)存在的編譯和緩存文件,使得模板可以重新編譯并起效。

對(duì)比{insert}也可以默認(rèn)讓插件不進(jìn)行緩存。 它們可以通過(guò)第四個(gè)參數(shù)$cache_attrs來(lái)定義進(jìn)行緩存。 $cache_attrs定義了一個(gè)需要進(jìn)行緩存的屬性數(shù)組, 然后這些屬性會(huì)被寫(xiě)入緩存,以供插件每次執(zhí)行的時(shí)候直接讀取。

Example 15.13. 控制插件的緩存

<?php
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

function remaining_seconds($params, $smarty) {
    $remain = $params['endtime'] - time();
    if($remain >= 0){
        return $remain . ' second(s)';
    }else{
        return 'done';
    }
}

$smarty->registerPlugin('function','remaining', 'remaining_seconds', false, array('endtime'));

if (!$smarty->isCached('index.tpl')) {
    // 從db獲取$obj 并賦值...
    $smarty->assignByRef('obj', $obj);
}

$smarty->display('index.tpl');
?>

模板index.tpl 內(nèi)容是:

時(shí)間還有: {remaining endtime=$obj->endtime}

即使頁(yè)面被緩存了,$obj的倒計(jì)時(shí)也還是會(huì)在每次頁(yè)面刷新的時(shí)候改變。 endtime屬性僅在第一次頁(yè)面顯示的時(shí)候,被從db里面讀取出來(lái)并寫(xiě)入到模板,然后就一直是直接從緩存內(nèi)讀取了。


Example 15.14. 使模板內(nèi)一部分區(qū)域不緩存

index.php:

<?php
$smarty->setCaching(Smarty::CACHING_LIFETIME_CURRENT);

function smarty_block_dynamic($param, $content, $smarty) {
    return $content;
}
$smarty->registerPlugin('block','dynamic', 'smarty_block_dynamic', false);

$smarty->display('index.tpl');
?>

模板index.tpl的內(nèi)容:

頁(yè)面創(chuàng)建于: {'0'|date_format:'%D %H:%M:%S'}

{dynamic}

現(xiàn)在時(shí)間是: {'0'|date_format:'%D %H:%M:%S'}

... 做些其他事情 ...

{/dynamic}

刷新頁(yè)面后你可以發(fā)現(xiàn)兩個(gè)日期的不同。一個(gè)是動(dòng)態(tài)的,另一個(gè)是靜態(tài)的。 你可以像上面的代碼一樣把任何東西放{dynamic}...{/dynamic}標(biāo)簽內(nèi),來(lái)使其不緩存。

說(shuō)明

上面的例子是展示了動(dòng)態(tài)的區(qū)塊插件是如何工作的。 參見(jiàn)如何通過(guò){nocache}和 {/nocache}標(biāo)簽來(lái)進(jìn)行模板區(qū)域緩存控制。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)