Magento 2 सभी सक्रिय शिपिंग विधियों को कैसे प्राप्त करें?


10

मेरा Magento संस्करण 2.1.0 है। मैं सभी सक्रिय शिपिंग विधि सूची कैसे प्राप्त कर सकता हूं?

किसी भी मदद की बहुत सराहना की जाएगी

जवाबों:


10

या आप Magento \ Shipping \ Model \ Config \ Source \ Allmethods का उपयोग कर सकते हैं जो ऐसा करता है!


1
यह स्वीकृत उत्तर होना चाहिए!
मिलन सिमक सेप

मल्टीसेप्ट फील्ड में उपयोग करने के बारे में क्या?
11

लेकिन मैं सभी सक्रिय विधि प्राप्त करने के लिए ध्वज को कैसे पास कर सकता हूं। मेरे ui घटक फॉर्म से
हिमांशु

7

कुंजी शाह के जवाब के अलावा

आप नीचे दिए गए कोड का उपयोग करके सभी सक्रिय शिपिंग प्राप्त कर सकते हैं:

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>

यह परिवर्तनशील शिपिंग विधि रेडियो का चयन के रूप में ??? मैं कीमत के साथ शिपिंग विधियों के ड्रॉपडाउन के लिए रेडियो बटन शिपिंग विधियों को परिवर्तित करने पर काम कर रहा
हूं

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;
    }

कीयूर मुझे शिपिंग विधि की आवश्यकता है आप बस कोड जोड़ें जो शिपिंग विधि ऑब्जेक्ट देता है उसके बाद आपने अपने समर्थन के लिए उत्तर धन्यवाद संपादित किया है
प्रशांत वलंदा

मैं नौवहन विधियों रेडियो को बदलने के लिए काम कर रहा हूं। चेकआउट में शिपिंग दर (कस्टम) के साथ शिपिंग विधियों को ड्रॉपडाउन करना है। इसके अलावा यह कैसे करना है
sangan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.