Magento 2 วิธีรับวิธีการจัดส่งที่ใช้งานอยู่ทั้งหมด?


10

เวอร์ชั่นวีโอไอพีของฉันคือ 2.1.0 ฉันจะรับรายการวิธีการจัดส่งที่ใช้งานอยู่ทั้งหมดได้อย่างไร

ความช่วยเหลือใด ๆ จะขอขอบคุณอย่างมาก

คำตอบ:


10

หรือคุณสามารถใช้Magento \ Shipping \ Model \ Config \ Source \ All วิธีการที่ไม่เพียงแค่นั้น!


1
นี่ควรเป็นคำตอบที่ยอมรับได้!
Milan Simek

สิ่งที่เกี่ยวกับการใช้ในช่องเลือกหลายรายการ?
spiil

แต่ฉันจะส่งค่าสถานะเพื่อรับวิธีการทั้งหมดได้อย่างไร จากรูปแบบองค์ประกอบ UI ของฉัน
Himanshu

7

นอกจากนี้เพื่อตอบ keyur shah

คุณสามารถรับการจัดส่งที่ใช้งานอยู่ทั้งหมดโดยใช้รหัสด้านล่าง:

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;        

    }

ใช้รหัสด้านล่างคุณจะได้รับรายชื่อผู้ให้บริการในไฟล์ phtml นี่$blockคือที่เกี่ยวข้องกับบล็อกที่เราได้กำหนดไว้ข้างต้นฟังก์ชั่น

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

วิธีเปลี่ยนวิธีการจัดส่งนี้เป็นตัวเลือก ??? ฉันกำลังทำงานเพื่อเปลี่ยนวิธีการจัดส่งปุ่มเป็นแบบเลื่อนลงของวิธีการจัดส่งด้วยราคา ..
sangan

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

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

หมายเหตุ: ฉันไม่เห็นด้วยกับการโหลดวัตถุโดยตรงด้วย $ objectManager เพื่อให้ได้ผลดียิ่งขึ้นคุณสามารถฉีดลงในตัวสร้างของคุณได้ ฉันเพิ่งยกตัวอย่างว่าคุณจะบรรลุเป้าหมายได้อย่างไร `


ทางที่ดีกว่า

protected $_shippingConfig;

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

ตอนนี้คุณสามารถรับวิธีการจัดส่งทั้งหมดได้โดย

$this->_shippingConfig->getActiveCarriers();

หากคุณต้องการstoreเฉพาะactive shipping methodแล้วคุณสามารถผ่าน$storeวัตถุในparameterตามที่คุณเห็นด้านล่างวิธีการนี้ยอมรับ$storeพารามิเตอร์

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 ผมจำเป็นที่จะต้องจัดส่งรายชื่อวิธีการที่คุณเพิ่งเพิ่มรหัสซึ่งจะช่วยให้การจัดส่งวัตถุวิธีการหลังจากที่คุณได้แก้ไขคำตอบขอบคุณสำหรับการสนับสนุนของคุณ
Prashant Valanda

ฉันกำลังทำงานเพื่อแปลงวิธีการจัดส่งวิทยุของเป็นวิธีการจัดส่งแบบเลื่อนลงที่มีอัตราการจัดส่ง (กำหนดเอง) ในการชำระเงิน .. ดังนั้นวิธีการทำเช่นนี้
sangan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.