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
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:
Hoặc bạn có thể sử dụng Magento \ Shipping \ Model \ Config \ Source \ Allmethods chỉ có thế!
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 $block
có 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>
$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 store
cụ thể active shipping method
thì 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 $store
tham 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;
}