2014-07-07 39 views
0

在我的模板中,我想檢查一個實體是否與另一個實體有關係。意思是一個對象位於另一個對象的存儲中。如何訪問方法並在模板中傳遞參數?

在控制器我可以簡單地叫:

if ($product->getCategory()->offsetExists($category) { 
    print 'In category ' . $category->getName(); 
} 

但我不能在模板中找出正確的語法。我想那些沒有運氣(包括評估爲true每次):

<f:if condition="{product.category.offsetExists(category)}">true</f:if>  
<f:if condition="{product.category.offsetExists({category})}">true</f:if> 

這甚至可能在模板內?

回答

1

除了sretuer的答案,我只會提到你可以創建VH,它將有條件地顯示塊:

文件typo3conf/ext/your_ext/ViewHelpers/CheckOffsetViewHelper.php

<?php 
namespace VENDORNAME\YourExt\ViewHelpers; 

class CheckOffsetViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { 
    public function render() { 
     return ($product->getCategory()->offsetExists($category)) 
       ? $this->renderChildren() 
       : ''; 
    } 
} 
?> 

這樣你就可以在視圖中使用它:

{namespace vh=VENDORNAME\YourExt\ViewHelpers} 

<vh:checkOffset product="{product}" category="{category}" > 
    Display this only if product is in category 
</vh:checkOffset> 

當然,你需要修復VENDORNAME,並根據您的擴​​展YourExt,可以在開始時被發現每個控制器,型號,存儲庫等。

+0

再次感謝 - 我完全忘了回到這裏,豎起大拇指。 – lampshade

+0

我不敢碰你的代碼。 @ thomas-hörner確實爲NAA添加了一條評論:*您忘記了方法renderChildren的括號。它沒有在我的代碼中沒有括號運行。 return($ product-> getCategory() - > offsetExists($ category))? $ this-> renderChildren():「」; * – bummi

+0

@bummi和Thomas謝謝你指出缺少的括號,那是StackOverflow可以自由地編輯別人的答案/問題,特別是如果它們包含討厭的錯誤; btw對不起,我根據[書籍]從頭部 – biesior

3

您只能通過不帶參數的Fluid訪問屬性,但是您可以實現自己的ViewHelper來檢查該屬性。作爲參數,您可以使用您的產品和類別。然後,你可以打電話給你的視圖助手從流體是這樣的:

<vh:checkOffset product="{product}" category="{category}" /> 

或內嵌

{vh:checkOffset(product: product, category: category)} 

在您的視圖助手,你可以在你已經在你的控制器用同樣的方式檢查:

public function render($product, $category){ 
    return ($product->getCategory()->offsetExists($category)); 
} 
+0

再次感謝 - 我完全忘了回來這裏,豎起大拇指。 – lampshade