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

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

Author: Jamie G, 2015-09-14

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

Что вам нужно сделать?

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

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

 -2
Author: Gaurav, 2015-11-30 11:33:03

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

 -4
Author: Y.Q, 2015-11-12 02:02:48