Magento 2 Como obter todos os métodos de remessa ativos?


Respostas:


10

Ou você pode usar o Magento \ Shipping \ Model \ Config \ Source \ Allmethods que faz exatamente isso!


1
Essa deve ser a resposta aceita!
Milan Simek

Que tal usar em campos de seleção múltipla?
spiil

mas como posso passar sinalizador para obter todo o método ativo. do meu formulário de componente de interface do
usuário

7

Além da resposta do keyur shah

Você pode obter todo o transporte ativo usando o código abaixo:

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 o código abaixo, você obterá a lista de transportadora no arquivo phtml. aqui $blockestá relacionado ao bloco no qual definimos a função acima

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

este método mudando o transporte de rádio é como selecionar ??? eu estou trabalhando na conversão botões de rádio métodos transporte para suspensa de transporte métodos com preço ..
Sangan

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

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

Nota: Sou contra o objeto de carregamento direto com $ objectManager, para obter um melhor impacto, você pode injetá-lo em seu construtor. Acabei de dar um exemplo de como você pode alcançá-lo. `


Melhor maneira

protected $_shippingConfig;

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

Agora você pode obter todo o método de envio ativo por

$this->_shippingConfig->getActiveCarriers();

Se você quiser storeespecífica active shipping method, então você pode passar $storeobjeto parameter, como você pode ver abaixo deste método aceitar $storeparâmetro

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 I lista método de envio necessidade que você acabou de adicionar código que dá o transporte método de objeto depois que você tiver editado resposta obrigado por seu apoio
Prashant Valanda

Eu estou trabalhando na conversão de métodos de envio de rádio para métodos de envio suspensos com taxa de envio (personalizada) na finalização da compra
.. Então
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.