Magento 2 Wie erhalte ich alle aktiven Versandarten?

10

Meine Magento-Version ist 2.1.0. Wie kann ich alle aktiven Versandartenlisten erhalten?

Jede Hilfe wäre sehr dankbar

Prashant Valanda
quelle

Antworten:

10

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

Spatz
quelle
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>
Prashant Valanda
quelle
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 Shah
quelle
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