Magento 2 Bagaimana cara mendapatkan semua metode pengiriman aktif?


Jawaban:


10

Atau Anda dapat menggunakan Magento \ Pengiriman \ Model \ Config \ Source \ Allmethods yang melakukan hal itu!


1
Ini harus menjadi jawaban yang diterima!
Milan Simek

Bagaimana dengan menggunakan di bidang multiselect?
spiil

tapi bagaimana saya bisa melewati flag untuk mendapatkan semua metode aktif. dari bentuk komponen ui saya
Himanshu

7

Selain menjawab keyur shah

Anda bisa mendapatkan semua pengiriman aktif menggunakan kode di bawah ini:

protected $scopeConfig;

protected $shipconfig;

public function __construct(
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Shipping\Model\Config $shipconfig
) {
    $this->shipconfig=$shipconfig;
    $this->scopeConfig = $scopeConfig;
}

public function getShippingMethods(){

        $activeCarriers = $this->shipconfig->getActiveCarriers();
        $storeScope = \Magento\Store\Model\ScopeInterface::SCOPE_STORE;
            foreach($activeCarriers as $carrierCode => $carrierModel)
            {
               $options = array();
               if( $carrierMethods = $carrierModel->getAllowedMethods() )
               {
                   foreach ($carrierMethods as $methodCode => $method)
                   {
                        $code= $carrierCode.'_'.$methodCode;
                        $options[]=array('value'=>$code,'label'=>$method);

                   }
                   $carrierTitle =$this->scopeConfig->getValue('carriers/'.$carrierCode.'/title');

               }
                $methods[]=array('value'=>$options,'label'=>$carrierTitle);
            }
        return $methods;        

    }

Menggunakan kode di bawah ini Anda akan mendapatkan daftar operator dalam file phtml. di sini $blockterkait dengan blok di mana kita telah mendefinisikan fungsi di atas

<?php $carriers = $block->getShippingMethods(); ?>
<select name="shipping"  class="control-select">
    <option value=""><?php /* @escapeNotVerified */ echo __('Please Select'); ?></option>
        <?php foreach ($carriers as $carrier): ?>
            <optgroup label="<?php /* @escapeNotVerified */ echo $carrier['label'] ?>">
                <?php foreach ($carrier['value'] as $child): ?>
                    <option value="<?php /* @escapeNotVerified */ echo $child['value'] ?>">
                    <?php /* @escapeNotVerified */ echo $child['label']; ?>
                    </option>
                <?php endforeach; ?>
            </optgroup>
        <?php endforeach; ?>
</select>

ini mengubah metode pengiriman radio sebagai pilih ??? saya sedang bekerja pada mengubah metode pengiriman tombol radio untuk dropdown metode pengiriman dengan harga ..
sangan

3
 $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

 $activeShipping = $objectManager->create('Magento\Shipping\Model\Config')->getActiveCarriers();

Catatan: Saya menentang objek pemuatan langsung dengan $ objectManager, untuk dampak yang lebih baik Anda dapat menyuntikkannya dalam konstruktor Anda. Saya baru saja memberi contoh bagaimana Anda bisa mencapainya. `


Cara yang lebih baik

protected $_shippingConfig;

public function __construct(
\Magento\Shipping\Model\Config $shippingConfig
) {
    $this->_shippingConfig=$shippingConfig
}

Sekarang Anda bisa mendapatkan semua metode pengiriman aktif dengan

$this->_shippingConfig->getActiveCarriers();

Jika Anda ingin storespesifik active shipping methodmaka Anda dapat mengirimkan $storeobjek parameter, seperti yang Anda lihat di bawah metode ini menerima $storeparameter

public function getActiveCarriers($store = null)
    {
        $carriers = [];
        $config = $this->_scopeConfig->getValue('carriers', \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store);
        foreach (array_keys($config) as $carrierCode) {
            if ($this->_scopeConfig->isSetFlag('carriers/' . $carrierCode . '/active', \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $store)) {
                $carrierModel = $this->_carrierFactory->create($carrierCode, $store);
                if ($carrierModel) {
                    $carriers[$carrierCode] = $carrierModel;
                }
            }
        }
        return $carriers;
    }

Keyur Saya perlu daftar metode pengiriman Anda baru saja menambahkan kode yang memberikan objek metode pengiriman setelah itu Anda telah mengedit jawaban terima kasih atas dukungan Anda
Prashant Valanda

saya sedang mengerjakan konversi metode pengiriman radio ke metode pengiriman dropdown dengan tarif pengiriman (khusus) di checkout ..jadi bagaimana melakukan ini
sangan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.