Magento 2 Jak uzyskać wszystkie aktywne metody wysyłki?


Odpowiedzi:


10

Lub możesz użyć Magento \ Shipping \ Model \ Config \ Source \ Allmethods , który właśnie to robi!


1
To powinna być zaakceptowana odpowiedź!
Milan Simek

Co z użyciem w polach wielokrotnego wyboru?
'18

ale jak mogę przekazać flagę, aby uzyskać wszystkie aktywne metody. z mojego formularza komponentu interfejsu użytkownika
Himanshu,

7

Oprócz odpowiedzi keyur shah

Możesz uzyskać całą aktywną wysyłkę, używając poniższego kodu:

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;        

    }

Za pomocą poniższego kodu otrzymasz listę przewoźników w pliku phtml. tutaj $blockjest związane z bloku, w którym mamy zdefiniowanego powyżej funkcji

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

zmieniające się metody wysyłki radia jako wybrane? Pracuję nad konwersją metod wysyłki przycisków radiowych na rozwijane metody wysyłki z ceną.
sangan

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

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

Uwaga: Jestem przeciwny bezpośredniemu ładowaniu obiektu za pomocą $ objectManager, dla lepszego wpływu możesz wstrzyknąć go do swojego konstruktora. Właśnie podałem przykład, jak możesz to osiągnąć. `


Lepszy sposób

protected $_shippingConfig;

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

Teraz możesz uzyskać wszystkie aktywne metody wysyłki do

$this->_shippingConfig->getActiveCarriers();

Jeśli chcesz storekonkretny active shipping method, możesz przekazać $storeobiekt parameter, jak widać poniżej: metoda accept $storeparametru

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 Potrzebuję listy metod wysyłki, po prostu dodajesz kod, który daje obiekt metody wysyłki po tym, jak zredagowałeś odpowiedź, dziękuję za wsparcie
Prashant Valanda,

Pracuję nad konwersją metod wysyłki na rozwijane metody wysyłki z kursem wysyłki (niestandardowe) przy kasie. więc jak to zrobić
sangan
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.