W Magento 1 możesz pobrać bieżący kod waluty, wykonując:
Mage::app()->getStore()->getCurrentCurrencyCode()
Zastanawiam się, jaki jest zalecany sposób zrobienia tego w Magento 2. W moim przypadku w bloku.
W Magento 1 możesz pobrać bieżący kod waluty, wykonując:
Mage::app()->getStore()->getCurrentCurrencyCode()
Zastanawiam się, jaki jest zalecany sposób zrobienia tego w Magento 2. W moim przypadku w bloku.
Odpowiedzi:
W Magento 2, można użyć \Magento\Store\Model\StoreManagerInterface, który jest przechowywany w zmiennej dostępnej $_storeManagerdla każdej klasy rozciągającej \Magento\Framework\View\Element\Templatewięc większość zajęć blokowych ( Template, Messages, Redirectrodzajów bloków, ale nie Textani TextList).
W ten sposób w swoim bloku możesz bezpośrednio wpisać następujący kod, aby uzyskać bieżący kod waluty:
$this->_storeManager->getStore()->getCurrentCurrency()->getCode()
Nie trzeba wprowadzać \Magento\Store\Model\StoreManagerInterfacekonstruktów, ponieważ jest to zmienna dostępna z dowolnej klasy bloków.
Możesz wstrzyknąć do \Magento\Store\Model\StoreManagerInterfaceswojego konstruktora:
protected $_storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
Następnie wywołaj tę samą funkcję co blok:
$this->_storeManager->getStore()->getCurrentCurrency()->getCode()
To czerpie inspirację Magento\Framework\Pricing\Render\Amounti działa dobrze w moim przypadku (zachowując się jak Magento):
protected $_priceCurrency;
public function __construct(
...
\Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
...
)
{
$this->_priceCurrency = $priceCurrency;
...
}
/**
* Get current currency code
*
* @return string
*/
public function getCurrentCurrencyCode()
{
return $this->_priceCurrency->getCurrency()->getCurrencyCode();
}
Możesz uzyskać symbol waluty również:
/**
* Get current currency symbol
*
* @return string
*/
public function getCurrentCurrencySymbol()
{
return $this->_priceCurrency->getCurrency()->getCurrencySymbol();
}