Magento 2 Bagaimana cara mendapatkan semua metode pengiriman aktif?

10

Versi magento saya adalah 2.1.0. Bagaimana saya bisa mendapatkan semua daftar metode pengiriman aktif?

Bantuan apa pun akan sangat dihargai

Valash Prashant
sumber

Jawaban:

10

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

burung gereja
sumber
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>
Valash Prashant
sumber
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 Shah
sumber
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