เวอร์ชั่นวีโอไอพีของฉันคือ 2.1.0 ฉันจะรับรายการวิธีการจัดส่งที่ใช้งานอยู่ทั้งหมดได้อย่างไร
ความช่วยเหลือใด ๆ จะขอขอบคุณอย่างมาก
เวอร์ชั่นวีโอไอพีของฉันคือ 2.1.0 ฉันจะรับรายการวิธีการจัดส่งที่ใช้งานอยู่ทั้งหมดได้อย่างไร
ความช่วยเหลือใด ๆ จะขอขอบคุณอย่างมาก
คำตอบ:
นอกจากนี้เพื่อตอบ 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>
$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;
}