2015-02-18 125 views
0

我有使用Extbase和實施延遲加載和視網膜圖像,同時保持兼容性如果JavaScript被禁用的擴展TYPO3項目,我需要生成一些像這樣的輸出:輸出嵌套的標籤

<noscript data-src-small="small.jpg" data-src-large="large.jpg" data-width="300" data-height="200"> 
    <img src="small.jpg" width="300" height="200"> 
</noscript> 

所以我寫了一個自定義的ViewHelper(或者說我複製並修改了一個現有的),完全可以做到這一點,它的工作原理,但我不確定我是否正確地做,因爲我手動創建這樣的<img>

$content = '<img class="'.$class.'" alt=" " src="'.$imageSource.'" width="'.$imageInfo[0].'" height="'.$imageInfo[1].'">'; 
$this->tag->setContent($content); 

我不知道是否t這裏不是一個更好的方式來做到這一點,理想情況下,我想在我的自定義ViewHelper中調用標準的ImageViewHelper::render()函數。

有沒有辦法做到這一點?應該甚至完成嗎?

我知道,我會調整我的模板是這樣的:

<x:noscript src="filename.jpg" width="300"> 
    <f:image src="filename.jpg" width="300" /> 
</x:noscript> 

x:noscript應該是我的自定義視圖助手)
並調用renderChildren()我的視圖助手裏面。

但是之後我必須重複src="filename.jpg" width="300",如果有更好的方法,我通常不喜歡重複輸入。

回答

1

實現你想要的最簡單的方法是使用部分。它應該是這樣的:

{namespace x=Yourcompany\Yourproduct\ViewHelpers} 
<f:comment> 
    Parameters: 
    * src:  src of the image 
    * width: Width of the image 
</f:comment> 

<x:noscript src="{src}" width="{width}"> 
    <f:image src="{src}" width="{width}" /> 
</x:noscript> 

您可以使用它像這樣:

<f:render 
    partial="Path/To/Partial" 
    arguments="{width: 300, src: 'filename.jpg'} 
/> 
+0

感謝。這意味着我應該實際上不寫一個生成嵌套輸出的ViewHelper?此外,目前我在部分內部調用ViewHelper,是否可以(也是可取的)從部分內部調用部分? – mmgross 2015-02-18 13:53:06

+0

是的,你可以從partials內部安全地調用partials - 我推薦它,所以模板部分不會太大和可管理。與將程序拆分爲更小塊時相同(如果您有編程經驗)。 – Jost 2015-02-18 14:12:26