我想要创建的链接,让用户排序的产品列表在cart_products升序和下降。
为此,我在Grid.html of 产品中创建了一个流体链接,将用于排序的参数传递给控制器:
<f:link.action action="list" arguments="{sorting:'up'}">Sorting up</f:link.action>listAction()在ProductController.php中获取参数的方法有:
if ($this->request->hasArgument('sorting')) {
$sorting = $this->request->getArgument('sorting');
}使用这个if-语句,我根据给定的参数控制正在发生的事情:
if ($sorting === "up") {
// Get all products sorted ascending
} elseif ($sorting === "down"){
// Get all products sorted decending
} 收到的产品有以下命令(原件):
$products = $this->productRepository->findDemanded($demand);文档说,下面的函数执行排序:
$query->setOrderings(
[
'organization.name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
'title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
]
);我想知道如何将这两部分结合在一起,以接收按需要订购的产品。
发布于 2022-08-28 11:40:32
更改视图助手以直接使用排序参数
<f:link.action action="listSorted" arguments="{sorting:'asc'}">Sorting up</f:link.action>添加您自己的控制器操作(扩展类ProductController)
<?php
// ...
public function listSortedAction(int $currentPage = 1): void
{
$demand = $this->createDemandObjectFromSettings($this->settings);
// ...
// Code from cart_products/Classes/Controller/ProductController.php listAction()
// ...
// instead of $products = $this->productRepository->findDemanded($demand);
if ($this->request->hasArgument('sorting')) {
$sorting = $this->request->getArgument('sorting');
$products = $this->productRepository->findDemandedSorted($demand,$sorting);
}
//...
?>然后添加自己的存储库函数(扩展类ProductRepository)
<?php
public function findDemandedSorted(ProductDemand $demand, $sortOrder)
{
$query = $this->createQuery();
// ...
// Code from cart_products/Classes/Domain/Repository/Product/ProductRepository.php findDemanded(ProductDemand $demand)
// ...
// instead of
// if ($orderings = $this->createOrderingsFromDemand($demand)) {
// $query->setOrderings($orderings);
// }
$query->setOrderings($sortOrder);
return $query->execute();
}https://stackoverflow.com/questions/73475272
复制相似问题