Magento 2 Wie werden Versandarten angezeigt? Sortieren Sie die Reihenfolge nach Preis?
Dec 04 2020
Hallo, wir möchten die Versandarten nach Preis Niedrig bis Hoch auf der Checkout-Seite sortieren und anzeigen .
Zum Beispiel:
$31.72 Express Saver Federal Express $37.50 2 DayFederal Express
$80.47 Standard Overnight Federal Express $87.77 Priority Overnight Federal Express
$5.00 Fixed Flat Rate $5.00 Media Mail Select Shipping Method
$10.00 FedEx Home Delivery Select Shipping Method
Verweis auf dieses Plugin-Konzept, das versucht, meine Ausgabe mit dem Plugin zu ändern. Magento 2: Andere Versandmethoden ausblenden, wenn kostenloser Versand verfügbar ist
<?php
namespace Demo\Test\Plugin\Model;
use Magento\Framework\Session\Generic;
class ShippingMethodManagement {
/**
* @var Generic
*/
private $coreSession;
/**
* @param \Magento\Framework\Session\Generic $sessionManager */ public function __construct( Generic $sessionManager
) {
$this->coreSession = $sessionManager;
}
public function afterEstimateByExtendedAddress($shippingMethodManagement, $output)
{
return $this->filterOutput($output);
}
public function afterEstimateByAddress($shippingMethodManagement, $output)
{
return $this->filterOutput($output);
}
public function afterEstimateByAddressId($shippingMethodManagement, $output)
{
return $this->filterOutput($output);
}
private function filterOutput($output) { //Here i would like to sort shipping methods by shipping amount $all = [];
foreach ($output as $shippingMethod) {
$all[] = $shippingMethod;
}
return $all;
}
}
}

Antworten
2 NagarajuK Dec 10 2020 at 12:00
Die folgende Logik funktioniert für mich.
<?php
namespace Demo\Test\Plugin\Model;
use Magento\Framework\Session\Generic;
class ShippingMethodManagement {
/**
* @var Generic
*/
private $coreSession; /** * @param \Magento\Framework\Session\Generic $sessionManager
*/
public function __construct(
Generic $sessionManager ) { $this->coreSession = $sessionManager; } public function afterEstimateByExtendedAddress($shippingMethodManagement, $output) { return $this->filterOutput($output); } public function afterEstimateByAddress($shippingMethodManagement, $output) { return $this->filterOutput($output); } public function afterEstimateByAddressId($shippingMethodManagement, $output) { return $this->filterOutput($output); } private function filterOutput($output)
{
//Here i would like to sort shipping methods by shipping amount
$all = []; foreach ($output as $shippingMethod) { $all[$shippingMethod->getAmount()] = $shippingMethod;
}
ksort($all); return $all;
}
}
bjornredemption Dec 09 2020 at 15:46
Sie sind sich nicht sicher, wie das Versandkostenattribut heißen würde (möglicherweise müssen Sie ein Debugging durchführen). Unter der Annahme, dass es sich um einen "Preis" handelt, sollte dies funktionieren. Fügen Sie dies über der Rückgabe hinzu:
usort($all, function($a,$b){ return $a->price > $b->price; }); return $all;