2012-07-10 68 views
0

我對如何在smarty中使用post/pre過濾器感到困惑。Smarty Postfilters/Prefilters如何在輸出前應用模板

我需要做的是在頁面顯示之前搜索並替換頁面中的某些元素。我希望在$ smarty-> display被調用之前這樣做。這意味着,在它被保存到磁盤之前,但在它被編譯之後(如此,postfilter)。

實例後置濾波器功能:

function smarty_postfilter_replace($tpl_output, $search, $replace) 
{ 
    return str_replace($search, $replace, $tpl_output); 
} 

如何申請Smarty的輸出之前這一權利。我在查看Smarty文檔(http://www.smarty.net/docsv2/de/advanced.features.postfilters.tpl)和其他一些示例之後嘗試過,但似乎沒有任何工作。

有人可以給我一個關於如何做到這一點的示例代碼,以及如何將參數傳遞給過濾器($ search,$ replace)。

謝謝

回答

1

後過濾器可能是最容易被誤解的過濾器。雖然預過濾器運行在未編譯的模板源代碼上,並且輸出過濾器運行在已評估的輸出上(您知道,生成的HTML),但後過濾器作爲編譯器的一部分運行 - 它會生成PHP由編譯器。我不確定有人會用這個做什麼。無論如何,這不是你想要的。

使用輸出過濾器來替換您的內容。如果您使用緩存,則在寫入緩存之前運行,前提是您沒有任何非緩存元素。如果您有非緩存元素(如{nocache}或具有nocache標誌的變量),則在緩存已經被評估(幾乎每次請求)後,輸出篩選器將運行

+0

所以,如果我理解正確,它會被保存到修改後的緩存中 – mspir 2012-07-10 15:57:28

+0

在Smarty 3中,如果你沒有nocache元素,是的。如果你有nocache元素,過濾器在*每個*請求上的緩存之後運行*。就Smarty 2而言,我的記憶已經消退,並且由於它已經過去幾年已經被棄用了,所以我並不太想去挖掘來源:/ – rodneyrehm 2012-07-10 17:15:42

+0

好的,謝謝你的幫助! – mspir 2012-07-10 17:39:51