У меня есть Magento 1.9.0.1, работающий с GBP (£) в качестве базовой и отображаемой валюты по умолчанию, и Euros (€) в качестве разрешенной валюты.
Если пользователь выбирает оформить заказ в евро, сайт все работает, за исключением того, что если он оплачивает через PayPal в своей собственной валюте, то в электронном письме с подтверждением заказа есть ошибка. В моем тесте ниже я выписался в евро (€), но в моем аккаунте PayPal использовались фунты (£).
Цена товара и общая сумма в корзине указаны в евро, но с символом £.
Итого, доставка & Все отображаются в евро, с правильным символом €.
Пример ниже показывает базовое представление с приблизительными ценами:
Items Quantity Item Price Sub Total
--- --- --- ---
Product 1 £150.00 £150.00 <<-- These £'s should be €'s
-----------------------------------------------
Sub Total: €150.00
Delivery: €0.00
Total: €150.00
Grand Total to be Charged: £100.00
Я пытался отследить это, но я не уверен, где это идет не так, и это кошмар, чтобы проверить. Электронная почта звонит:
(Mage_Checkout_Helper_Data) $this->helper('checkout')->formatPrice(...);
Что вызывает
(Mage_Core_Model_Store) $this->getQuote()->getStore()->formatPrice($price);
Который в конечном счете находит свой путь к методам Zend, но я не знаю, где символ валюты теряется.
Эта проблема возникает только при оплате через PayPal, а не при оплате через CC напрямую через сайт.
Может кто-то указать мне верное направление?
Спасибо
В подтверждении по электронной почте не должно быть звонка $this->helper('checkout')->formatPrice(...)
в любом месте. В этом случае в электронном письме заказа используются собственные шаблоны элементов оформления заказа, что, вероятно, вызвано не полностью реализованным пользовательским типом продукта или ошибкой в вашей теме.
Итоговые суммы заказа показывают правильную валюту, потому что итоговый блок использует formatPrice()
метод заказа, который учитывает валюту заказа:
$this->getOrder()->formatPrice($total->getValue());
Шаблоны для отдельных предметов также используют $_order->formatPrice(...)
, Но в зависимости от типа продукта используются разные шаблоны. Это шаблон по умолчанию.
Блоки и шаблоны для каждого типа продукта определены в sales.xml
с addItemRender
действие:
<sales_email_order_items>
<block type="sales/order_email_items" name="items" template="email/order/items.phtml">
<action method="addItemRender"><type>default</type><block>sales/order_email_items_order_default</block><template>email/order/items/order/default.phtml</template></action>
<action method="addItemRender"><type>grouped</type><block>sales/order_email_items_order_grouped</block><template>email/order/items/order/default.phtml</template></action>
<block type="sales/order_totals" name="order_totals" template="sales/order/totals.phtml">
<action method="setLabelProperties"><value>colspan="3" align="right" style="padding:3px 9px"</value></action>
<action method="setValueProperties"><value>align="right" style="padding:3px 9px"</value></action>
<block type="tax/sales_order_tax" name="tax" template="tax/order/tax.phtml">
<action method="setIsPlaneMode"><value>1</value></action>
</block>
</block>
</block>
<block type="core/text_list" name="additional.product.info" />
</sales_email_order_items>
Модули, которые добавляют типы продуктов, должны регистрировать свои собственные средства визуализации, как это можно увидеть в bundle.xml
:
<sales_email_order_items>
<reference name="items">
<action method="addItemRender"><type>bundle</type><block>bundle/sales_order_items_renderer</block><template>bundle/email/order/items/order/default.phtml</template></action>
</reference>
</sales_email_order_items>
Если это не было определено, по умолчанию используется средство визуализации из кассы, где сама модель заказа не используется, только отдельные элементы (к которым не прикреплена информация о валюте). Там форматирование цены выполняется помощником оформления заказа, который не имеет информации о заказе, поэтому он использует текущую выбранную валюту магазина.
Почему это проблема только с такими онлайн-платежами, как PayPal? Потому что при использовании других методов, когда письмо с подтверждением заказа создается немедленно с помощью кнопки «разместить заказ», текущая выбранная валюта магазина по-прежнему совпадает с валютой заказа. Но в запросе обратного вызова от PayPal этот контекст теряется, и вместо него будет использоваться валюта по умолчанию.
<sales_email_order_items>
дескриптор макета в XML-файлах макета, чтобы увидеть, правильно ли зарегистрированы средства визуализации элементов по умолчанию$this->_helper('checkout')->formatPrice()
с $_order->formatPrice()
,Это похоже на ошибку валюты кодировки.
Вам необходимо подать заявку charset utf-8
путем поиска этого конкретного кода для шаблона электронной почты.
Вы можете изменить символы валюты из Системы-> Управление валютой-> Символы