Magento 2 Comment obtenir toutes les méthodes d'expédition actives?


10

Ma version de magento est 2.1.0. Comment puis-je obtenir la liste de toutes les méthodes d'expédition actives?

Toute aide serait très appréciée

Réponses:


10

Ou vous pouvez utiliser Magento \ Shipping \ Model \ Config \ Source \ Allmethods qui fait exactement cela!


1
Cela devrait être la réponse acceptée!
Milan Simek

Qu'en est-il de l'utilisation dans des domaines multisélectionnés?
2018

mais comment puis-je passer le drapeau pour obtenir toutes les méthodes actives. de ma forme de composant d'
interface utilisateur

7

En plus de répondre de keyur shah

Vous pouvez obtenir toutes les expéditions actives en utilisant le code ci-dessous:

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;        

    }

En utilisant le code ci-dessous, vous obtiendrez la liste des transporteurs dans le fichier phtml. ici $blockest lié au bloc dans lequel nous avons défini la fonction ci-dessus

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

cette radio de méthode d'expédition changeante en tant que sélection ??? Je travaille sur la conversion des méthodes d'expédition des boutons radio en liste déroulante des méthodes d'expédition avec le prix ..
sangan

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

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

Remarque: Je suis contre le chargement direct d'un objet avec $ objectManager, pour un meilleur impact, vous pouvez l'injecter dans votre constructeur. Je viens de donner un exemple de la façon dont vous pouvez y parvenir. "


Meilleure façon

protected $_shippingConfig;

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

Maintenant, vous pouvez obtenir toutes les méthodes d'expédition actives en

$this->_shippingConfig->getActiveCarriers();

Si vous voulez storespécifique, active shipping methodvous pouvez passer un $storeobjet parameter, comme vous pouvez le voir ci-dessous, cette méthode accepte le $storeparamètre

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 J'ai besoin de la liste des méthodes d'expédition, vous venez d'ajouter du code qui donne un objet de méthode d'expédition après que vous ayez édité la réponse merci pour votre soutien
Prashant Valanda

je travaille sur la conversion des méthodes d'expédition de la radio en méthodes d'expédition déroulantes avec le taux d'expédition (personnalisé) lors du paiement .. alors comment faire
sangan
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.