Moja wersja Magento to 2.1.0. Jak mogę uzyskać listę wszystkich aktywnych metod wysyłki?
Każda pomoc byłaby bardzo wdzięczna
Moja wersja Magento to 2.1.0. Jak mogę uzyskać listę wszystkich aktywnych metod wysyłki?
Każda pomoc byłaby bardzo wdzięczna
Odpowiedzi:
Lub możesz użyć Magento \ Shipping \ Model \ Config \ Source \ Allmethods , który właśnie to robi!
Oprócz odpowiedzi keyur shah
Możesz uzyskać całą aktywną wysyłkę, używając poniższego kodu:
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;
}
Za pomocą poniższego kodu otrzymasz listę przewoźników w pliku phtml. tutaj $block
jest związane z bloku, w którym mamy zdefiniowanego powyżej funkcji
<?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();
Uwaga: Jestem przeciwny bezpośredniemu ładowaniu obiektu za pomocą $ objectManager, dla lepszego wpływu możesz wstrzyknąć go do swojego konstruktora. Właśnie podałem przykład, jak możesz to osiągnąć. `
Lepszy sposób
protected $_shippingConfig;
public function __construct(
\Magento\Shipping\Model\Config $shippingConfig
) {
$this->_shippingConfig=$shippingConfig
}
Teraz możesz uzyskać wszystkie aktywne metody wysyłki do
$this->_shippingConfig->getActiveCarriers();
Jeśli chcesz store
konkretny active shipping method
, możesz przekazać $store
obiekt parameter
, jak widać poniżej: metoda accept $store
parametru
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;
}