2011-08-19 88 views
1

想知道是否有方法可以使用相對於Twig模板引擎中模板存儲位置的路徑。PHP:Twig:圖像的相對路徑?

的情況如下:

我有一個TYPO3的網站,我的應用程序駐留在fileadmin/MyApplication的。我使用Twig作爲模板引擎來呈現從JSON文件動態加載的多語言內容。我的一些模板文件包含路徑圖像,鑑於Typo3的性質,需要有一個src路徑fileadmin/myApplication/img/...

現在,如果我想測試我的新版本應用程序,我希望能夠創建一個目錄fileadmin/myApplication2.0,而不必更改模板文件中的圖像路徑。

存在將相對路徑轉換爲服務器文件路徑的模板引擎(例如raintpl,請參閱this link)。是否有一種在Twig中實現相同效果的簡單方法?

例如

templates/template.html 
img/logo.png 

輸出

<img src="fileadmin/myApplication2.0/img/logo.png"> 

這是rain.tpl是怎麼做的:

WYSIWYG - Path replace 
This cool feature allows designers to create templates as regular HTML with images and styles with relative paths, RainTPL replaces automatically these paths with the correct server paths. 

Absolute paths and paths ending with # will be not changed. 

<link href="style.css" type="text/css" rel="stylesheet"> 
<img src="img/logo.gif"> 

Output html: 

<link href="tpl/style.css" type="text/css" rel="stylesheet"> 
<img src="tpl/img/logo.gif"> 

Note: if you set raintpl::$base_url, RainTPL will replace the path with raintpl::$base_url. 

回答

3

src屬性的路徑是一個相對的URL,而不是相對文件路徑文件系統在你的服務器上,你如何組織你的文件在你的目錄中。

相對URL將被解析爲模板將成爲/呈現在其中的文檔的基本URL。因此,您可以使用相對URL,但您需要知道它們相關的內容以使它們正常工作。

在你的情況下,快速的解決方案可能是如果你的網站駐留在網絡根使用

<img src="/img/logo.png"> 

另一種方法是擁有一個模板函數,它根據請求的URL路徑構建(相對)URL。另一種方法是在總體模板中對<base> href Docs進行硬編碼。

另一種選擇是,您獲取渲染模板的輸出,解析鏈接並使其適合。

但重要的是您需要了解所需的URL路徑以及您的模板(塊)如何使用。

+0

hakre,感謝您的回答。我想我的例子過於簡單了。我會盡量在我編輯的答案中更具體。 –

+0

我看到你編輯的答案,但它沒有改變。我發現它不適合你。您首先需要了解哪些網址適用,以及相關網址的工作方式。 IIRC TYPO3的利用了'的<基本href =「」>'在它的輸出已經(或這是很常見之間TYPO3項目。 – hakre

+0

有你居然看着到rain.tpl的聯繫?難不成我不知道第一關於URL的事情並不能真正幫助 –

2

隨着約瑟夫絕對路徑說:

<img src="/img/logo.png"> 

你可以看到圖片,僅當你的網站是在根URL作爲

http://localhost/ 

它不會

http://localhost/myApp/ 
工作

所以在這種情況下,你需要爲它

創建主機
http://myApp/ 

當您可以在瀏覽器或HTML編輯器中看到它的外觀時,模板是所見即所得模板,所以基本上所有使用相對路徑的模板都是如此。

RainTPL有真棒的想法與正確的服務器路徑(相對或絕對)自動替換模板的相對路徑,所以你可以看到你的模板立即的外觀。

使用所見即所得模板的另一種非常好的方式是使用相對路徑的< base href =「http:// localhost/myApp /」>標籤。唯一的問題是交叉瀏覽和Javascript,因爲如果它們在所有這些方面的工作方式都不太清楚。

1
<img src="{{ asset('img/my_image.gif') }}" alt="something" /> 

資產路徑將解析爲/ web目錄。在我的示例中,圖像的完整項目路徑爲:

Project/web/img/my_image.gif 

您需要使用.twig擴展才能使用此方法。