Benim magento versiyonum 2.1.0. Tüm etkin gönderim yöntemi listesini nasıl alabilirim?
Herhangi bir yardım çok takdir edilecektir
Benim magento versiyonum 2.1.0. Tüm etkin gönderim yöntemi listesini nasıl alabilirim?
Herhangi bir yardım çok takdir edilecektir
Yanıtlar:
Keyur shah cevabına ek olarak
Aşağıdaki kodu kullanarak tüm aktif nakliye alabilirsiniz:
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;
}
Aşağıdaki kodu kullanarak phtml dosyasındaki taşıyıcı listesini alırsınız. burada $blockyukarıdaki işlevi tanımladığımız blok ile ilgilidir
<?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();
Not: $ objectManager ile doğrudan yükleme nesnesine karşıyım, daha iyi etki için yapıcıya enjekte edebilirsiniz. Az önce bunu nasıl başarabileceğinize bir örnek verdim. '
Daha iyi yol
protected $_shippingConfig;
public function __construct(
\Magento\Shipping\Model\Config $shippingConfig
) {
$this->_shippingConfig=$shippingConfig
}
Şimdi alabilirsiniz tüm aktif nakliye yöntemi tarafından
$this->_shippingConfig->getActiveCarriers();
İsterseniz storeözgü active shipping methodo zaman geçebilir $storeobjeyi parameterBu yöntemle aşağıda görebileceğiniz gibi kabul $storeparametreyi
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;
}