Magento 2 Làm thế nào để có được tất cả các phương thức vận chuyển đang hoạt động?


10

Phiên bản magento của tôi là 2.1.0. Làm thế nào tôi có thể nhận được tất cả danh sách phương pháp vận chuyển hoạt động?

Bất kỳ trợ giúp sẽ được đánh giá cao

Câu trả lời:


10

Hoặc bạn có thể sử dụng Magento \ Shipping \ Model \ Config \ Source \ Allmethods chỉ có thế!


1
Đây phải là câu trả lời được chấp nhận!
Milan Simek

Điều gì về việc sử dụng trong các lĩnh vực multiselect?
spiil

nhưng làm thế nào tôi có thể vượt qua cờ để có được tất cả các phương thức hoạt động. từ mẫu thành phần ui của tôi
Himanshu

7

Ngoài câu trả lời của keyur shah

Bạn có thể nhận được tất cả vận chuyển hoạt động bằng cách sử dụng mã dưới đây:

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;        

    }

Sử dụng mã dưới đây, bạn sẽ nhận được danh sách nhà cung cấp trong tệp phtml. Ở đây $blockcó liên quan đến khối mà chúng ta đã xác định hàm trên

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

điều này thay đổi phương thức vận chuyển vô tuyến như chọn ??? tôi đang làm việc để chuyển đổi các phương thức vận chuyển nút radio sang thả xuống các phương thức vận chuyển với giá ..
sangan

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

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

Lưu ý: Tôi chống lại đối tượng tải trực tiếp với $ objectManager, để có tác động tốt hơn bạn có thể đưa nó vào hàm tạo của mình. Tôi vừa đưa ra ví dụ làm thế nào bạn có thể đạt được nó. `


Cách tốt hơn

protected $_shippingConfig;

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

Bây giờ bạn có thể nhận được tất cả các phương thức vận chuyển hoạt động bằng cách

$this->_shippingConfig->getActiveCarriers();

Nếu bạn muốn storecụ thể active shipping methodthì bạn có thể truyền $stoređối tượng vào parameter, như bạn có thể thấy bên dưới phương thức này chấp nhận $storetham số

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 Tôi cần danh sách phương thức giao hàng, bạn chỉ cần thêm mã cung cấp cho đối tượng phương thức giao hàng sau đó bạn đã chỉnh sửa câu trả lời nhờ sự hỗ trợ của bạn
Prashant Valanda

tôi đang làm việc để chuyển đổi phương thức vận chuyển của radio sang phương thức vận chuyển thả xuống với tốc độ vận chuyển (tùy chỉnh) trong thanh toán .. vì vậy làm thế nào để làm điều này
sangan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.