Добавить переменную атрибута в шаблон электронной почты для подтверждения заказа - PullRequest
4 голосов
/ 13 февраля 2012

Я создал несколько пользовательских атрибутов для своих продуктов. У меня есть некоторые, которые необходимо добавить к электронному письму, которое клиент получает, когда он размещает заказ. В настоящее время я обнаружил, что могу отредактировать почтовый шаблон в бэкенде и 'app / design / frontend / base / default / template / email / order / items.phtml'.

Как получить доступ к переменным объекта в шаблонах электронной почты и каков правильный синтаксис для пользовательских атрибутов элемента?

1 Ответ

11 голосов
/ 13 февраля 2012

Есть несколько возможностей (это Magento).

Шаблон app / design / frontend / base / default / template / email / order / items.phtml , который вы упомянули, является оболочкой для всех элементов в заказе.Отдельные элементы отображаются отдельными шаблонами.Большую часть времени это app / design / frontend / base / default / template / email / order / items / order / default.phtml , но другие типы продуктов могут использовать другие, например, заказывать товары в комплектепродукты используют ... template / bundle / email / order / items / order / default.phtml .

Внутри шаблонов вы работаете не с Mage_Catalog_Model_Product экземплярами модели, а с Mage_Sales_Model_Order_Item экземплярами.Эти элементы имеют различные атрибуты, чем атрибуты продукта.
Если вы хотите, чтобы ваши пользовательские атрибуты продукта всегда были доступны в экземплярах sales/order_item, вам необходимо добавить их к объекту.
В процессе оформления заказа также установите их для объекта sales/quote_item, и они скопируют их в позиции заказа, используя соответствующие наборы полей в конфигурации (см. global/fieldsets в Mage / Sales / etc / config.xml для примера.

Если продукты все еще существуют в каталоге, их можно загрузить, включая все атрибуты, используя

$product = Mage::getModel('catalog/product')->load($orderItem->getProductId();

Или, чтобы получить весь продуктмодели для всех позиций заказа одновременно (немного более эффективно):

$products = Mage::getResourceModel('catalog/product_collection')
    ->addIdFilter($orderItems->getColumnValues('product_id'))
    ->addAttributeToSelect(array('list', 'of', 'your', 'custom', 'attributes'));

Конечно, это будет означать дополнительные запросы по сравнению с первым решением добавления тех же атрибутов к сущности элемента заказа.
Также имейте в виду, что после удаления товара он больше не будет загружаться таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...