如何访问方法并在模板中传递参数?

时间:2014-07-07 14:22:41

标签: typo3 fluid extbase typo3-6.1.x typo3-6.2.x

在我的模板中,我想检查实体是否与另一个实体有关系。意味着一个对象位于另一个对象的附加对象存储中。

在控制器中我可以简单地调用:

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>

这在模板中是否可行?

3 个答案:

答案 0 :(得分:3)

您只能通过没有参数的流体Getter访问属性,但您可以实现自己的ViewHelper来检查它。作为参数,您可以使用您的产品和类别。然后你可以这样从Fluid调用你的ViewHelper:

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

或内联

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

在您的ViewHelper中,您可以按照在控制器中完成此操作的方式进行检查:

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

答案 1 :(得分: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>

当然,你需要根据你的扩展来修复VENDORNAMEYourExt,可以在每个控制器,模型,存储库等的开头找到。

答案 2 :(得分:1)

您可以考虑设计用于在Fluid中创建条件的https://fluidtypo3.org/viewhelpers/vhs/master/Condition/Iterator/ContainsViewHelper.html,以检查数组或迭代器是否包含其他对象,并且与f:ifthen的{​​{1}}完全相同参数以及elsef:then子节点。