Magento 2 Come ottenere tutti i metodi di spedizione attivi?


10

La mia versione di Magento è la 2.1.0. Come posso ottenere tutto l'elenco dei metodi di spedizione attivi?

Qualsiasi aiuto sarebbe molto apprezzato

Risposte:


10

Oppure puoi usare Magento \ Shipping \ Model \ Config \ Source \ Allmethods che fa proprio questo!


1
Questa dovrebbe essere la risposta accettata!
Milan Simek,

Che dire dell'utilizzo nei campi a selezione multipla?
spiil

ma come posso passare la bandiera per ottenere tutto il metodo attivo. dal mio modulo componente
dell'interfaccia utente

7

Oltre alla risposta di keyur shah

Puoi ottenere tutte le spedizioni attive utilizzando il codice seguente:

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;        

    }

Usando il codice qui sotto otterrai l'elenco dei corrieri nel file phtml. qui $blockè legato al blocco in cui abbiamo definito la funzione sopra

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

questa radio metodo di cambiare il trasporto è come selezionare ??? sto lavorando sulla conversione di pulsanti di opzione metodi di spedizione a tendina di metodi con il prezzo di spedizione ..
Sangan

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

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

Nota: sono contrario all'oggetto di caricamento diretto con $ objectManager, per un migliore impatto è possibile iniettarlo nel costruttore. Ho appena fatto un esempio di come puoi raggiungerlo. `


Modo migliore

protected $_shippingConfig;

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

Ora puoi ottenere tutto il metodo di spedizione attivo da

$this->_shippingConfig->getActiveCarriers();

Se vuoi storespecifici active shipping method, puoi passare l' $storeoggetto parameter, come puoi vedere sotto questo metodo accetta $storeparametro

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 Ho bisogno dell'elenco dei metodi di spedizione, basta aggiungere il codice che fornisce l'oggetto del metodo di spedizione dopo che hai modificato la risposta grazie per il tuo supporto
Prashant Valanda,

sto lavorando per convertire i metodi di spedizione della radio in metodi di spedizione a discesa con la tariffa di spedizione (personalizzata) al momento del pagamento .. così come fare questo
sangan
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.