Magento 1.9 неправильный символ валюты в корзине электронной почты с подтверждением заказа — при оплате через PayPal — formatPrice ()

У меня есть 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 напрямую через сайт.

Может кто-то указать мне верное направление?
Спасибо

29

Решение

В подтверждении по электронной почте не должно быть звонка $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 этот контекст теряется, и вместо него будет использоваться валюта по умолчанию.

Что тебе необходимо сделать?

  1. Поиск для <sales_email_order_items> дескриптор макета в XML-файлах макета, чтобы увидеть, правильно ли зарегистрированы средства визуализации элементов по умолчанию
  2. Убедитесь, что любые пользовательские типы продуктов также регистрируют их рендеры
  3. Проверьте шаблоны, которые используются средствами визуализации элементов. Может быть, это ошибка в вашей теме, и вам просто нужно заменить $this->_helper('checkout')->formatPrice() с $_order->formatPrice(),
3

Другие решения

Это похоже на ошибку валюты кодировки.
Вам необходимо подать заявку charset utf-8 путем поиска этого конкретного кода для шаблона электронной почты.

-2

Вы можете изменить символы валюты из Системы-> Управление валютой-> Символы

-4
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector