TYPO3 计算有约束的对象并在流体模板中显示结果
TYPO3 count objects with constraint and display result in fluid template
我已经使用处理 objects
的扩展构建器构建了一个扩展,object
可以是 "item" 或 "project"。
一个对象有一个字段 status
,它有 4 个选项,并填充了一个整数(3 = 已售出)。
一个对象可以被签名为 "project",在这种情况下,它有一个布尔值 1 用于 isproject
和一个字段 items
,相关对象作为项目。
这一切都很好,我可以使用我的流畅模板遍历项目并使用 <f:count>{object.items}</f:count>
显示项目的项目数量。
以同样的方式,我应该仅显示已售商品的数量 ...
(<f:count where="object.items.status == 3">{object.items}</f:count>
这个显然不行,只是为了渲染思路)
with <f:debug>{object}</f:debug>
我看到为所有项目定义的字段 status
...
因为我不知道如何处理这个问题,所以我可能遗漏了一些重要信息
您可以在控制器中对它们进行计数或使用 GroupedFor ViewHelper https://fluidtypo3.org/viewhelpers/fluid/master/GroupedForViewHelper.html
如上一个答案所示,您可以为此目的使用 GroupedFor ViewHelper。但是在流体模板中使用它会涉及很多逻辑,这就是为什么应该在控制器、模型或存储库中完成的原因。
示例:将 Getter 添加到 Object-Model
/**
* @return int
*/
public function getSoldItems() {
$soldCount = 0;
foreach($this->getItems() as $item) {
// 0 = sold
if($item->getStatus()===0) {
$soldCount++;
}
}
return $soldCount;
}
在流体中你可以用 {object.soldItems}
调用 Getter
一个更好的性能解决方案,尤其是对于延迟加载子对象,将计算在存储库中。为此,您必须在存储库中创建一个函数并在 Getter-Function 中调用它。要使用通用存储库方法创建查询,您需要 "Backrelation" 对象的项目。否则,您必须自己编写带有 "statement()" 的查询。
我已经使用处理 objects
的扩展构建器构建了一个扩展,object
可以是 "item" 或 "project"。
一个对象有一个字段 status
,它有 4 个选项,并填充了一个整数(3 = 已售出)。
一个对象可以被签名为 "project",在这种情况下,它有一个布尔值 1 用于 isproject
和一个字段 items
,相关对象作为项目。
这一切都很好,我可以使用我的流畅模板遍历项目并使用 <f:count>{object.items}</f:count>
显示项目的项目数量。
以同样的方式,我应该仅显示已售商品的数量 ...
(<f:count where="object.items.status == 3">{object.items}</f:count>
这个显然不行,只是为了渲染思路)
with <f:debug>{object}</f:debug>
我看到为所有项目定义的字段 status
...
因为我不知道如何处理这个问题,所以我可能遗漏了一些重要信息
您可以在控制器中对它们进行计数或使用 GroupedFor ViewHelper https://fluidtypo3.org/viewhelpers/fluid/master/GroupedForViewHelper.html
如上一个答案所示,您可以为此目的使用 GroupedFor ViewHelper。但是在流体模板中使用它会涉及很多逻辑,这就是为什么应该在控制器、模型或存储库中完成的原因。
示例:将 Getter 添加到 Object-Model
/**
* @return int
*/
public function getSoldItems() {
$soldCount = 0;
foreach($this->getItems() as $item) {
// 0 = sold
if($item->getStatus()===0) {
$soldCount++;
}
}
return $soldCount;
}
在流体中你可以用 {object.soldItems}
一个更好的性能解决方案,尤其是对于延迟加载子对象,将计算在存储库中。为此,您必须在存储库中创建一个函数并在 Getter-Function 中调用它。要使用通用存储库方法创建查询,您需要 "Backrelation" 对象的项目。否则,您必须自己编写带有 "statement()" 的查询。