繁体   English   中英

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

[英]How to change the order of the product list in cart_products in TYPO3 11?

我想创建链接,让用户对 cart_products 中的产品列表进行升序和降序排序。

为此,我在 cart_products 的“ Grid.html ”中创建了一个 Fluid-link,将排序参数传递给 controller:

<f:link.action action="list" arguments="{sorting:'up'}">Sorting up</f:link.action>

“ProductController.php”中的 function “listAction”获取参数:

if ($this->request->hasArgument('sorting')) {
    $sorting = $this->request->getArgument('sorting');
}

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

if ($sorting === "up") {
    // Get all products sorted ascending
} else if ($sorting === "down"){
    // Get all products sorted decending
} 

使用以下命令(原始)接收产品:

$products = $this->productRepository->findDemanded($demand);

文档说以下 function 进行排序:

$query->setOrderings(
    [
        'organization.name' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
        'title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
    ]
);

我想知道如何结合这两个部分来接收所希望订购的产品。

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

<f:link.action action="listSorted" arguments="{sorting:'asc'}">Sorting up</f:link.action>

添加您自己的 controller 动作(扩展 class 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);
    }
    //...

?>

然后添加您自己的存储库 function(扩展 class 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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM