我有一個包含另一個負責生成我想編輯的代碼塊的.tpl。通過評論生成內容的{include ...},我發現了它的位置。但是,當我在文件系統上搜索.tpl文件時,它不存在。那麼它真的存儲在哪裏?Smarty模板包含文件系統中不存在的文件,但仍然會生成內容?
即{包括文件=「用戶/ content.tpl」} (不位於文件系統)
是否有一些其它的文件中的一些硬編碼地址用於此?有沒有條件如果:如果文件不存在,使用這個呢?
我有一個包含另一個負責生成我想編輯的代碼塊的.tpl。通過評論生成內容的{include ...},我發現了它的位置。但是,當我在文件系統上搜索.tpl文件時,它不存在。那麼它真的存儲在哪裏?Smarty模板包含文件系統中不存在的文件,但仍然會生成內容?
即{包括文件=「用戶/ content.tpl」} (不位於文件系統)
是否有一些其它的文件中的一些硬編碼地址用於此?有沒有條件如果:如果文件不存在,使用這個呢?
文件是否存在,很容易:
{if file_exists("../path_to_file.xxx")}
/* DO STUFF */
{/if}
在包括可以在這裏使用絕對或relativ路徑,看到更多的例子中的文件路徑 - >http://www.smarty.net/docsv2/en/language.function.include.tpl
不知道爲什麼,這不是在覈心中,但您可以輕鬆創建自己的插件/修飾符,以便您檢查相對路徑是否存在:{if "pagination.tpl"|template_exists}
。
在插件目錄中創建:modifier.template_exists.php。
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: modifier.template_exists.php
* Type: modifier
* Name: template_exists
* Purpose: Test if a template exists
* -------------------------------------------------------------
*/
function smarty_modifier_template_exists($file){
if (empty($file)) return false;
$oSmarty = Cms_Smarty::getInstance();
$templates = $oSmarty->getTemplateDir();
foreach($templates as $template){
if(file_exists($template . $file)){
return true;
}
}
return false;
}
注意,如果您有多個模板目錄,該插件也可以使用。在我的情況下,我有一組默認主題中的模板,如分頁/等。當我使用標準{include file='pagination.tpl'}
smarty會自動檢查自定義並回退到默認主題。
當加載智者簡單的設置:
$oSmarty->setTemplateDir($custom_theme)
->addTemplateDir($default_theme);