#magento #new-operator #product
#magento #new-operator #продукт
Вопрос:
После отправки заказа, как Magento сохраняет заказанные товары (в таблице sales_flat_order_item). Мне нужны файлы, потому что я хочу также сохранить обычную цену в базе данных; если у вас есть специальная цена, Magento сохраняет специальную цену в базе данных только тогда, когда кто-то делает заказ. Или у кого-нибудь есть идеи, как я могу сохранить обычную цену в базе данных для каждого заказанного товара?
Ответ №1:
Медленно? Тщательно? С помощью SQL? Я шучу, я шучу.
Честно говоря, да, вы правы в том, что единственными данными, хранящимися в таблице позиций заказа, является цена, которую фактически заплатил клиент (в отличие от обычной цены). Если вы хотите сохранить дополнительные данные в этой таблице, выполните следующие действия:
- Создайте новый модуль с помощью установочного SQL-скрипта
- Попросите установщика вашего модуля добавить новый столбец в таблицу товаров заказа
- Добавьте наблюдателя к событию предварительного сохранения элемента заказа
- Заставьте этого наблюдателя записать обычную цену в ваш новый столбец
Теперь у вас должны быть эти данные в базе данных, и вы должны иметь возможность извлекать их обычным образом, как и любой другой столбец. Надеюсь, это поможет!
Спасибо, Джо
Комментарии:
1. Спасибо. После долгой напряженной работы я нашел другое решение. Я добавляю в ‘sales_flat_order_item’ мое новое поле ‘regular_price’, затем добавляю в ‘APP / CODE / CORE /MAGE/SALES / MODEL / CONVERT / Quote. php’ в функции ‘itemToOrderItem’
$product = Mage::getModel('catalog/product'); $product->load($item->getProductId()); $price = 0; if($product->getData('special_price') != null amp;amp; $product->getData('special_price') > 0){ $price = $product->getData('price'); }
и одно дополнительное поле для$orderItem = Mage::getModel('sales/order_item') ->setRegularPrice($price)
.2. Это не очень хорошее решение. При следующем обновлении Magento ваш код будет перезаписан и сломается. Причина использования модуля и наблюдателя заключается в том, что он не прерывает работу остальной части вашей системы и будет совместим с будущим, тогда как это решение вызовет у вас проблемы в будущем.
Ответ №2:
Мне любопытно, зачем вам вообще нужно сохранять исходную цену в таблице… Вы всегда можете просмотреть это на лету, когда просматриваете элементы заказа:
$origPrice = Mage::getModel('catalog/product')->load($item->getProductId())->getData('price');
Или вы могли бы написать свой собственный модуль, который создает либо новый столбец в ‘sales_flat_order_item’, либо создать свою собственную таблицу, которая ссылается на конкретный идентификатор в этой таблице. Вы могли бы заставить свой модуль наблюдать событие успешного выполнения заказа, перебирать все товары в заказе и устанавливать значение в базе данных.
Как сказал Джозеф в комментарии выше, вы никогда не должны изменять основной код. Если вам нужно внести изменения, напишите соответствующий модуль для этого. Если вы изменяете основной код (или, на мой взгляд, если вы создаете этот каталог: app /code /local /Mage /), то вы делаете что-то неправильно.
Комментарии:
1. Поиск на лету не всегда является решением, потому что я хочу знать первоначальную цену на момент размещения заказа, а не в текущее время.