В Magento 1 вы можете получить текущий код валюты, выполнив:
Mage::app()->getStore()->getCurrentCurrencyCode()
Мне интересно, каков рекомендуемый способ сделать это в Magento 2. В моем случае в блоке.
В Magento 1 вы можете получить текущий код валюты, выполнив:
Mage::app()->getStore()->getCurrentCurrencyCode()
Мне интересно, каков рекомендуемый способ сделать это в Magento 2. В моем случае в блоке.
Ответы:
В Magento 2, вы можете использовать , \Magento\Store\Model\StoreManagerInterface
который хранится в доступном переменном $_storeManager
для каждого класса , простирающегося \Magento\Framework\View\Element\Template
поэтому большинство классов блоков ( Template
, Messages
, Redirect
типов блоков , но не Text
ни TextList
).
Таким образом, в своем блоке вы можете напрямую ввести следующий код, чтобы получить текущий код валюты:
$this->_storeManager->getStore()->getCurrentCurrency()->getCode()
Нет необходимости вставлять \Magento\Store\Model\StoreManagerInterface
в вашу конструкцию, так как это переменная, доступная из любого класса блока.
Вы можете добавить \Magento\Store\Model\StoreManagerInterface
в свой конструктор:
protected $_storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
Затем вызовите ту же функцию, что и блок:
$this->_storeManager->getStore()->getCurrentCurrency()->getCode()
Это требует вдохновения, Magento\Framework\Pricing\Render\Amount
и в моем случае это работает хорошо (ведет себя как 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();
}
Вы также можете получить символ валюты:
/**
* Get current currency symbol
*
* @return string
*/
public function getCurrentCurrencySymbol()
{
return $this->_priceCurrency->getCurrency()->getCurrencySymbol();
}