Magento 1.9 неправильный символ валюты в корзине с подтверждением заказа по электронной почте - при оплате через PayPal - formatPrice()
У меня есть Magento 1.9.0.1, работающий с GBP (£) в качестве базовой и отображаемой валюты по умолчанию, и евро (€) в качестве разрешенной валюты.
Если пользователь выбирает оформление заказа в евро, сайт работает полностью, за исключением случаев, когда он оплачивает 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 напрямую через сайт.
Может ли кто-нибудь указать мне правильное направление? Спасибо
3 answers
В электронном письме с подтверждением не должно быть никакого звонка $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
, выполнив поиск по этому конкретному коду для шаблона электронной почты.
Вы можете изменить символы валюты в разделе Система->Управление валютой->Символы