मेरा Magento संस्करण 2.1.0 है। मैं सभी सक्रिय शिपिंग विधि सूची कैसे प्राप्त कर सकता हूं?
किसी भी मदद की बहुत सराहना की जाएगी
मेरा Magento संस्करण 2.1.0 है। मैं सभी सक्रिय शिपिंग विधि सूची कैसे प्राप्त कर सकता हूं?
किसी भी मदद की बहुत सराहना की जाएगी
जवाबों:
या आप Magento \ Shipping \ Model \ Config \ Source \ Allmethods का उपयोग कर सकते हैं जो ऐसा करता है!
कुंजी शाह के जवाब के अलावा
आप नीचे दिए गए कोड का उपयोग करके सभी सक्रिय शिपिंग प्राप्त कर सकते हैं:
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>
$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;
}