Mi versión de magento es 2.1.0. ¿Cómo puedo obtener toda la lista de métodos de envío activos?
Cualquier ayuda sería muy apreciada
Mi versión de magento es 2.1.0. ¿Cómo puedo obtener toda la lista de métodos de envío activos?
Cualquier ayuda sería muy apreciada
Respuestas:
¡O puede usar Magento \ Shipping \ Model \ Config \ Source \ Allmethods que hace exactamente eso!
Además de la respuesta de keyur shah
Puede obtener todos los envíos activos utilizando el siguiente código:
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;
}
Usando el siguiente código, obtendrá una lista de operadores en el archivo phtml. aquí $block
está relacionado con el bloque en el que hemos definido la función anterior
<?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();
Nota: Estoy en contra del objeto de carga directa con $ objectManager, para un mejor impacto puede inyectarlo en su constructor. Acabo de dar un ejemplo de cómo puedes lograrlo. ``
Mejor manera
protected $_shippingConfig;
public function __construct(
\Magento\Shipping\Model\Config $shippingConfig
) {
$this->_shippingConfig=$shippingConfig
}
Ahora puede obtener todos los métodos de envío activos al
$this->_shippingConfig->getActiveCarriers();
Si desea un store
específico active shipping method
, puede pasar el $store
objeto parameter
, como puede ver a continuación, este método acepta $store
parámetros
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;
}