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>

这甚至可以在模板中实现吗?

4

3 回答 3

3

您只能通过来自 Fluid 的 Getter 访问不带参数的属性,但您可以实现自己的 ViewHelper 来检查它。作为参数,您可以使用您的产品和类别。然后您可以通过以下方式从 Fluid 调用 ViewHelper:

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

或内联

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

在您的 ViewHelper 中,您可以按照您在 Controller 中完成的方式检查这一点:

public function render($product, $category){
    return ($product->getCategory()->offsetExists($category));
}
于 2014-07-07T14:57:45.097 回答
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根据您的扩​​展,可以在每个控制器、模型、存储库等的开头找到。

于 2014-07-07T17:06:16.910 回答
1

您可以考虑https://fluidtypo3.org/viewhelpers/vhs/master/Condition/Iterator/ContainsViewHelper.html,它旨在在 Fluid 中创建条件,检查数组或迭代器是否包含另一个对象,并且工作方式与f:if关于thenelse参数完全相同f:thenf:else子节点。

于 2016-09-03T00:55:58.477 回答