動態內容

當使用 片段快取頁面快取,我們常常遇到的一個情況就是整個輸出一部分是靜態的,部分是動態的。例如,幫助頁可能會顯示靜態的幫助訊息,而使用者名稱顯示的是當前使用者的。

解決這個問題,我們可以根據使用者名稱來匹配快取內容,但是這將是我們寶貴空間一個巨大的浪費,因為快取除了使用者名稱以外,其他大部分內容是相同的。我們還可以把網頁切成幾個片段並分別快取,但這種情況會使頁面和程式碼變得非常複雜。更好的方法是使用由 CController 提供的動態內容功能 。

動態內容是指片段輸出即使是在片段快取包括的內容中也不會被快取。即使是包括的內容是從快取中取出,為了使動態內容在所有時間是動態的,每次都得重新產生。出於這個原因,我們要求動態內容通過一些方法或函數產生。

調用 CController::renderDynamic() 在你想的地方插入動態內容。

...別的 HTML 內容...
<?php if($this->beginCache($id)) { ?>
...被快取的片段內容...
    <?php $this->renderDynamic($callback); ?>
...被快取的片段內容...
<?php $this->endCache(); } ?>
...別的 HTML 內容...

在上面的,$callback 指的是有效的 PHP 回調。它可以是指向當前控制器類的方法或者全域函數的字串名。它也可以是一個陣列名指向一個類別的方法。其他任何的參數,將傳遞到 renderDynamic()方法中。回調將返回動態內容而不是僅僅是顯示它。

$Id$