在我的模板中,我想检查实体是否与另一个实体有关系。意味着一个对象位于另一个对象的附加对象存储中。
在控制器中我可以简单地调用:
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>
这在模板中是否可行?
答案 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>
当然,你需要根据你的扩展来修复VENDORNAME
和YourExt
,可以在每个控制器,模型,存储库等的开头找到。
答案 2 :(得分:1)
您可以考虑设计用于在Fluid中创建条件的https://fluidtypo3.org/viewhelpers/vhs/master/Condition/Iterator/ContainsViewHelper.html,以检查数组或迭代器是否包含其他对象,并且与f:if
和then
的{{1}}完全相同参数以及else
和f:then
子节点。