簡體   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