Magento 2 Tüm aktif nakliye yöntemleri nasıl alınır?


Yanıtlar:


10

Ya da sadece bunu yapan Magento \ Shipping \ Model \ Config \ Source \ Allmethods kullanabilirsiniz!


1
Bu kabul edilen cevap olmalı!
Milan Simek

Çoklu seçim alanlarında kullanmaya ne dersiniz?
spiil

ama tüm aktif yöntemi almak için nasıl bayrak geçirebilirim. ui bileşen
formumdan

7

Keyur shah cevabına ek olarak

Aşağıdaki kodu kullanarak tüm aktif nakliye alabilirsiniz:

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;        

    }

Aşağıdaki kodu kullanarak phtml dosyasındaki taşıyıcı listesini alırsınız. burada $blockyukarıdaki işlevi tanımladığımız blok ile ilgilidir

<?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>

Bu değişen nakliye yöntemi radyo seçin gibi ??? Ben nakliye yöntemleri ile nakliye yöntemleri açılan için radyo düğmeleri nakliye yöntemleri dönüştürme üzerinde çalışıyorum ..
sangan

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

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

Not: $ objectManager ile doğrudan yükleme nesnesine karşıyım, daha iyi etki için yapıcıya enjekte edebilirsiniz. Az önce bunu nasıl başarabileceğinize bir örnek verdim. '


Daha iyi yol

protected $_shippingConfig;

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

Şimdi alabilirsiniz tüm aktif nakliye yöntemi tarafından

$this->_shippingConfig->getActiveCarriers();

İsterseniz storeözgü active shipping methodo zaman geçebilir $storeobjeyi parameterBu yöntemle aşağıda görebileceğiniz gibi kabul $storeparametreyi

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 nakliye yöntemi listesine ihtiyacım var sadece cevap verdikten sonra nakliye yöntemi nesnesi veren kodu ekleyin Desteğiniz için teşekkürler
Prashant Valanda

Ben nakliye yöntemleri radyo 's kasada nakliye oranı (özel) ile açılan nakliye yöntemleri için dönüştürme üzerinde çalışıyorum .. bu nasıl yapılır
sangan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.