首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在cart_products中更改TYPO3 11中产品列表的顺序?

如何在cart_products中更改TYPO3 11中产品列表的顺序?
EN

Stack Overflow用户
提问于 2022-08-24 14:49:57
回答 1查看 42关注 0票数 1

我想要创建的链接,让用户排序的产品列表在cart_products升序和下降。

为此,我在Grid.html of 产品中创建了一个流体链接,将用于排序的参数传递给控制器:

代码语言:javascript
复制
<f:link.action action="list" arguments="{sorting:'up'}">Sorting up</f:link.action>

listAction()ProductController.php中获取参数的方法有:

代码语言:javascript
复制
if ($this->request->hasArgument('sorting')) {
    $sorting = $this->request->getArgument('sorting');
}

使用这个if-语句,我根据给定的参数控制正在发生的事情:

代码语言:javascript
复制
if ($sorting === "up") {
    // Get all products sorted ascending
} elseif ($sorting === "down"){
    // Get all products sorted decending
} 

收到的产品有以下命令(原件):

代码语言:javascript
复制
$products = $this->productRepository->findDemanded($demand);

文档说,下面的函数执行排序:

代码语言:javascript
复制
$query->setOrderings(
    [
        'organization.name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
        'title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
    ]
);

我想知道如何将这两部分结合在一起,以接收按需要订购的产品。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-28 11:40:32

更改视图助手以直接使用排序参数

代码语言:javascript
复制
<f:link.action action="listSorted" arguments="{sorting:'asc'}">Sorting up</f:link.action>

添加您自己的控制器操作(扩展类ProductController)

代码语言:javascript
复制
<?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)

代码语言:javascript
复制
<?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();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73475272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档