Magento 2 Wie erhalte ich alle aktiven Versandarten?


Antworten:


10

Oder Sie können Magento \ Shipping \ Model \ Config \ Source \ Allmethods verwenden , das genau das tut!


1
Dies sollte die akzeptierte Antwort sein!
Milan Simek

Was ist mit der Verwendung in Mehrfachauswahlfeldern?
Spiil

aber wie kann ich flag für alle aktiven Methode übergeben. von meiner UI-Komponentenform
Himanshu

7

Neben der Antwort von Keyur Shah

Sie können alle aktiven Versand mit dem folgenden Code erhalten:

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;        

    }

Mit dem folgenden Code erhalten Sie eine Liste der Träger in der HTML-Datei. hier $blockbezieht sich auf Block, in dem wir oben Funktion definiert haben

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

Diese Änderung Versandart Radio als Auswahl ??? Ich arbeite an der Konvertierung von Optionsfeldern Versandmethoden in Dropdown-Versandmethoden mit Preis ..
Sangan

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

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

Hinweis: Ich bin gegen das direkte Laden von Objekten mit $ objectManager. Um eine bessere Wirkung zu erzielen, können Sie es in Ihren Konstruktor einfügen. Ich habe gerade ein Beispiel gegeben, wie Sie es erreichen können. `


Besserer Weg

protected $_shippingConfig;

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

Jetzt können Sie alle aktiven Versandarten von erhalten

$this->_shippingConfig->getActiveCarriers();

Wenn Sie storebestimmte möchten active shipping method, können Sie ein $storeObjekt übergeben parameter, wie Sie unten sehen können, akzeptieren Sie den $storeParameter accept

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 Ich brauche Versandartenliste Sie fügen nur Code, der Versandart Objekt gibt, nachdem Sie Antwort bearbeitet haben, danke für Ihre Unterstützung
Prashant Valanda

Ich arbeite an der Konvertierung von Versandmethoden Radio zu Dropdown-Versandmethoden mit Versandrate (benutzerdefiniert) in der Kasse ..so wie das geht
Sangan
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.