2014-03-04 31 views
0

我卡在使用的Smarty(3.1.16我認爲),一所大學的項目 我有這樣的目錄結構:無法獲取相對路徑工作在...的Smarty :(

+ templates/ 
+ -- application.tpl 
+ -- backend.tpl 
+ -- backend/ 
+ ---- blog.tpl 

templates/backend.tpl我有一個{extends 'application.tpl'}當我加載backend.php和渲染這個文件

裏面templates/backend/blog.tpl我有一個{extends '../backend.tpl'}當我訪問backend/blog.php(它加載templates/backend/blog.tpl)我得到這個錯誤,其工作原理:。

Unable to read template file 'application.tpl' 

可能是這個錯誤的原因是什麼?

+0

是不是你' application.tpl'一個文件夾返回到你的'backend.tpl'的位置? –

+0

@OhhMee對不起,錯字!我更新了這個問題。 – whatyouhide

回答

0

據我所知,你在這一點上設置的路徑是相對於設置的模板目錄,而不是文件本身。

所以../backend.tpl成爲templates/../backend.tpl

如果你設置了一個單獨的模板文件夾( 「模板」),它應該工作的時候與

{extends 'backend.tpl'} 

更換

{extends '../backend.tpl'} 

你也可以定義多個模板目錄並通過數組索引(可選)對其進行標識。 使用setTemplateDir方法設置Smarty的這種行爲

$smarty->setTemplateDir(array(
    'frontend' => 'templates', 
    'backend' => 'templates/backend' 
)); 

在你的模板現在您可以包括/從一個特定的目錄與智者文件protokol延伸模板,像這樣

{extends 'file:[backend]blog.tpl'} 
+0

實際上,當我編寫'{extends'../ backend.tpl}'時(它不會在我不寫相對路徑時),它會加載'backend.tpl',問題是(就像我在該問題),它無法加載'application.tpl'。 – whatyouhide

+0

只是一個小問題:我應該爲整個應用程序使用整個Smarty對象還是應該爲每個PHP腳本創建一個「新的Smarty()」? – whatyouhide

+0

只要您將基本配置(緩存,編譯,模板等)分開,這並不重要。您可以擴展smarty類和構造函數(在此添加配置)並在每個腳本上對其進行實例化。依賴於您的應用程序,您也可以將對象初始化爲單例,但是您必須注意雙重分配或類似問題。 – sofl