2010-08-10 35 views
2

我想去略深成Smarty的緩存,所以我有一些簡單的問題...Smarty的緩存文件無效

  1. 要操作緩存失效我想知道的是Smarty的存儲哪個目錄下的緩存例如,所有與user_id=123相關的緩存頁面我想存儲在cache/users/123/。其中cache是聰明的緩存目錄。我怎麼能告訴smarty存儲有關user_id=123的緩存在cache/users/123/? Smarty會將子模板的緩存存儲在這個目錄中嗎?

  2. 有沒有關於在這個目錄中清理緩存的建議?我認爲,如果某些訪問者正在訪問此頁面,只是從該目錄中刪除文件可能會導致一些錯誤(如果smarty會看到找到了模板緩存,則可能會發生錯誤,但未找到子模板緩存,因爲它已被刪除,例如)。

任何建議和意見,讚賞。

謝謝。

回答

0

看一看Smarty的文檔:。在「Cache Groups」部分正是這麼做的

0

使用可以切換智者cachedir,這取決於你想要的是(你可以檢查一些自己的if語句)

// Create smarty object 
$smarty = new Smarty(); 

// Change smarty-dir is like this: 
if (isset($_GET['userId'])) { 
    $smarty->compile_dir = '/path/to/dir/' . $_GET['userId']; 
} else { 
    $smarty->compile_dir = '/path/to/dir/default'; 
} 

第二點是有點困難,你要的foreach通過所有MAPPS,並指定新的編譯目錄,然後運行以下命令:

$smarty->clear_cache(); 

但正如你所說,這是可能的文件要求,同時有一個刪除。 :-(


但它不建議使用不同的緩存文件夾,Smarty的不手動緩存輸出,只需編譯PHP文件。

+0

感謝您的回答。有什麼方法可以設置緩存子目錄,而'$ smarty-> cache_dir'設置爲單個目錄('$ smarty-> cache_dir ='/ path/to/cache'')。我想,它會解決大量的問題。我知道如果'$ smarty-> use_sub_dirs = true',我們可以直接在cache_id('/ user/123 /')中定義緩存路徑,但Smarty也會將它自己的附加子目錄添加到我們的cache_id中,我們會得到類似於('/ user/123 /%12 /%23 /%45 /')的內容。你知道如何避免它嗎? – Kirzilla 2010-08-10 13:32:12

+0

當您將其設置爲true時,您可以每次使用differen cache_id($ smarty-> fetch('file','cacheId')&$ smarty-> display('file','cacheId'))。 – Ronn0 2010-08-10 13:53:47

+0

如果您啓用Smarty,Smarty可以進行這兩種緩存。您可以緩存編譯後的模板和最終輸出。 – djn 2010-08-10 16:21:06

1

你應該清除緩存。對於使用clear_cache()和clear_compiled_tpl()可以清除所有緩存,並且還做選擇性的清除與他們