J'essaie de trier les articles en fonction de la quantité de produits commandés.
Existe-t-il une méthode logique pour trier les articles du panier par quantité commandée?
J'essaie de trier les articles en fonction de la quantité de produits commandés.
Existe-t-il une méthode logique pour trier les articles du panier par quantité commandée?
Réponses:
Vous pouvez utiliser un getItems()
plugin pour trier les éléments de devis:
Créer ce plugin
<type name="Magento\Checkout\Block\Cart">
<plugin name="item_filter" type="[Your]\[Module]\Plugin\Checkout\Block\Cart" />
</type>
Dans votre panier.php
public function afterGetItems(\Magento\Checkout\Block\Cart $subject){
$items = [];
$totalItems = [];
$itemAdded = [];
foreach ($subject->getQuote()->getAllItems() as $item) {
$totalItems[] = $item->getId();
if(/*Your Condition*/){
/*you can sort item by qty wise*/
/*you can get qty using $item->getQty();*/
$itemAdded[] = $item;
$items[] = $item;
}
}
$result = array_diff($totalItems, $itemAdded);
foreach ($result as $quoteid) {
if($quoteid){
$item = $this->cart->getQuote()->getItemById($quoteid);
$items[] = $item;
}
}
return $items;
}
Magento\Checkout\Block\Cart
, ça devrait êtreYour\Module\Plugin\Checkout\Block\Cart
Créez d'abord un plugin,
En di.xml, utilisez:
<type name="Magento\Checkout\CustomerData\Cart">
<plugin name="SortByQty" type="Vendor\Module\Plugin\Cart"/>
</type>
Ensuite, dans Cart.php, ajoutez une fonction afterGetSectionData,
Maintenant, la logique sera faite pour le tri mais je peux dire le début:
public function afterGetSectionData(\Magento\Checkout\CustomerData\Cart $subject, $result){
$items = $result['items'];
foreach ($items as $key => $value) {
$_productId = $value['product_id'];
$_productPrice = $value['product_price_value'];
$_productQty = $value['qty'];
$_productTotal = $_productPrice * $_productQty;
}
$data = [
'items' => $items
];
return $result = array_merge($data, $result);
}