Magento 2 bagaimana cara menampilkan metode pengiriman urutkan urutan berdasarkan harga?
Dec 04 2020
Hai, kami ingin mengurutkan dan menampilkan metode pengiriman berdasarkan harga Rendah ke Tinggi di halaman pembayaran.
Sebagai contoh:
$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
Mengacu pada konsep plugin ini mencoba mengubah keluaran saya menggunakan plugin. Magento 2: Sembunyikan metode pengiriman lain jika pengiriman gratis tersedia
<?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;
}
}
}

Jawaban
2 NagarajuK Dec 10 2020 at 12:00
Logika di bawah ini cocok untuk saya.
<?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
Tidak yakin apa sebutan untuk atribut biaya pengiriman (Anda mungkin perlu melakukan debug) namun dengan asumsi ini adalah 'harga', ini seharusnya berfungsi. Tambahkan ini di atas pengembalian:
usort($all, function($a,$b){ return $a->price > $b->price; }); return $all;
Selalu Menjadi Ancaman: Mengapa Orang Berkulit Coklat dan Hitam Tidak Bisa Nyaman di Amerika Serikat
Jana Duggar: Semua yang Dia Katakan Tentang Cinta dan Jendela 5 Tahunnya untuk Menemukan 'Yang Satu'