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 $block
yukarı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 method
o zaman geçebilir $store
objeyi parameter
Bu yöntemle aşağıda görebileceğiniz gibi kabul $store
parametreyi
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;
}