Подтвердить что ты не робот

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

У меня Magento 1.9.0.1 работает с GBP (£) в качестве базовой и дефолтной валюты отображения, а евро (€) - как разрешенная валюта.

Если пользователь выбирает оплату в евро, сайт работает, за исключением случаев, когда они платят PayPal в своей валюте, тогда письмо с подтверждением заказа имеет ошибку. В моем тесте ниже я проверил в евро (€), но в моей учетной записи PayPal использовался фунт (£).

Корзина Пункт Цена и Суб Всего шоу в евро, но с символом £. Sub Total, Delivery и Total отображаются в евро, с правильным символом €.

В приведенном ниже примере показано базовое представление с приблизительными ценами:

Items       Quantity    Item Price    Sub Total
---         ---         ---           ---
Product     1           £150.00       £150.00  <<-- These £ 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 напрямую через сайт.

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

4b9b3361

Ответ 1

В электронном письме с подтверждением не должно быть никакого вызова $this->helper('checkout')->formatPrice(...) в любом месте. Если это так, в электронном письме заказа используются шаблоны элементов оформления заказа, а не их собственные, что, вероятно, вызвано не полностью реализованным пользовательским типом продукта или ошибкой в ​​вашей теме.

Итоговые суммы заказа показывают правильную валюту, потому что nofollow → totalals использует метод 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().

Ответ 2

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

Ответ 3

Вы можете изменить символы валюты из System- > Manage Currency- > Symbols