0

我已经使用处理的扩展构建器构建了一个扩展objectsobject可以是“项目”或“项目”。

一个对象有一个status包含 4 个选项的字段,并用整数填充(3 = 已售出)。

一个对象可以被标记为一个“项目”,在这种情况下,它有一个布尔值 1isproject和一个items将相关对象作为项目的字段。

这一切都很好,我可以使用我的流体模板迭代项目并<f:count>{object.items}</f:count>显示与项目相关的项目数量。

以同样的方式,我应该只显示已售商品的数量......
<f:count where="object.items.status == 3">{object.items}</f:count>这显然不起作用,只是为了呈现这个想法)

<f:debug>{object}</f:debug>我看到为所有项目定义的字段......status因为
我不知道如何处理这个我可能遗漏了一些重要信息

4

2 回答 2

1

如上一个答案所示,您可以为此目的使用 GroupedFor ViewHelper。但是在流体模板中使用它会产生很多逻辑,这就是为什么应该在控制器、模型或存储库中完成此操作的原因。

示例:向对象模型添加 Getter

/**
 * @return int
 */
public function getSoldItems() {
    $soldCount = 0;
    foreach($this->getItems() as $item) {
        // 0 = sold
        if($item->getStatus()===0) {
            $soldCount++;
        }
    }
    return $soldCount;
}

在流体中,您可以调用 Getter{object.soldItems}

一个更好的性能解决方案,尤其是延迟加载子对象,将计算存储库。为此,您必须在存储库中创建一个函数并在 Getter-Function 中调用它。要使用通用存储库方法来创建查询,您需要项目与对象的“反向关系”。否则,您必须自己编写带有“statement()”的查询。

于 2017-01-24T07:50:50.120 回答
0

您可以在控制器中计算它们或使用 GroupedFor ViewHelper https://fluidtypo3.org/viewhelpers/fluid/master/GroupedForViewHelper.html

于 2017-01-23T07:50:15.773 回答