Есть несколько возможностей (это 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'));
Конечно, это будет означать дополнительные запросы по сравнению с первым решением добавления тех же атрибутов к сущности элемента заказа.
Также имейте в виду, что после удаления товара он больше не будет загружаться таким образом.