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 $blockjest 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 storekonkretny active shipping method, możesz przekazać $storeobiekt parameter, jak widać poniżej: metoda accept $storeparametru
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;
}