Versi magento saya adalah 2.1.0. Bagaimana saya bisa mendapatkan semua daftar metode pengiriman aktif?
Bantuan apa pun akan sangat dihargai
Versi magento saya adalah 2.1.0. Bagaimana saya bisa mendapatkan semua daftar metode pengiriman aktif?
Bantuan apa pun akan sangat dihargai
Jawaban:
Atau Anda dapat menggunakan Magento \ Pengiriman \ Model \ Config \ Source \ Allmethods yang melakukan hal itu!
Selain menjawab keyur shah
Anda bisa mendapatkan semua pengiriman aktif menggunakan kode di bawah ini:
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;
}
Menggunakan kode di bawah ini Anda akan mendapatkan daftar operator dalam file phtml. di sini $block
terkait dengan blok di mana kita telah mendefinisikan fungsi di atas
<?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();
Catatan: Saya menentang objek pemuatan langsung dengan $ objectManager, untuk dampak yang lebih baik Anda dapat menyuntikkannya dalam konstruktor Anda. Saya baru saja memberi contoh bagaimana Anda bisa mencapainya. `
Cara yang lebih baik
protected $_shippingConfig;
public function __construct(
\Magento\Shipping\Model\Config $shippingConfig
) {
$this->_shippingConfig=$shippingConfig
}
Sekarang Anda bisa mendapatkan semua metode pengiriman aktif dengan
$this->_shippingConfig->getActiveCarriers();
Jika Anda ingin store
spesifik active shipping method
maka Anda dapat mengirimkan $store
objek parameter
, seperti yang Anda lihat di bawah metode ini menerima $store
parameter
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;
}