Я нашел много ответов на имеющуюся у меня проблему, но некоторые противоречат, и многие из них мне не совсем понятны, поэтому я надеюсь, что эксперт по Magento может указать мне верное направление.
Для некоторых продуктов в Magento существует сложный процесс настройки. Существует специальный редактор, и каждый «дизайн» идентифицируется уникальным значением.
Что мне нужно, это сохранить этот идентификатор вместе с товаром в корзине и заказе. Он не должен отображаться напрямую, но должен быть доступен в коде (например, чтобы показать другой эскиз в корзине или некоторую информацию в счете-фактуре).
Кроме того, поскольку продукт настроен, этот продукт должен иметь отдельную строку в корзине и счет-фактуру, если этот идентификатор отличается!
Так, например, клиент открывает страницу продукта, выполняет некоторые настройки, и эта настройка получает идентификатор «1».
Клиент кладет это в корзину.
Он снова открывает тот же продукт, настраивает его по-другому и получает идентификатор «2».
Клиент также помещает это в корзину!
Теперь корзина должна быть:
и не:
Но, тем не менее, клиент должен иметь возможность заказать более одного продукта с одинаковым идентификатором!
так, например,
Настройка происходит за пределами magento. Magento просто имеет ссылку с всплывающим окном, а затем получает некоторый идентификатор, который затем можно прикрепить с помощью PHP.
Он просто хранит идентификатор и должен иметь возможность получить идентификатор для каждого продукта в корзине / счете / …
Важно то, что идентификатор хранится, и что товары с одинаковыми sku / настраиваемыми параметрами не объединяются в корзину, если идентификатор отличается!
Кроме того, идентификатор должен быть текстовой строкой, а не выбираться из списка, как с помощью настраиваемых параметров magento!
Методы, которые я нашел, могут сделать то, что я хочу:
http://www.atwix.com/magento/custom-product-attribute-quote-order-item/
Это выглядит лучше всего для меня, есть готовый модуль, который я мог бы изменить. Но я не уверен, что это правильный подход. Будут ли продукты разделены в корзине? Также значение идентификатора установлено здесь как опция продукта и отображается в бэкэнде ?! В моем случае нет никакой ценности, прежде чем клиент настроит продукт!
https://magento.stackexchange.com/a/1382
Я не совсем уверен … Как я могу получить идентификатор, который доступен на странице сведений о продукте, внутри обозревателя …
Как я могу добавить каждый продукт как новый товар в корзину
Может быть, мне нужно изменить это в дополнение к 1. или 2.?
Я был бы очень признателен, если бы Magento Expert мог пролить свет на это для меня!
Вы сказали, что можете позаботиться о добавлении идентификатора на страницу продукта. Что здорово. При необходимости вам нужно записать значение в скрытое поле ввода в форме добавления в корзину на странице продукта. Допустим, вход выглядит так;
<input type="hidden" name="myid" id="myid" value="123" />
В свой пользовательский модуль добавьте наблюдателя событий. Я предполагаю, что при добавлении в корзину вы остаетесь на странице продукта, а не переходите прямо в корзину.
<catalog_product_load_after>
<observers>
<Company_Module_Model_Observer>
<type>model</type>
<class>Company_Module_Model_Observer</class>
<method>addPostData</method>
</Company_Module_Model_Observer>
</observers>
</catalog_product_load_after>
В папке вашего модуля создайте или откройте Company / Module / Model / Observer.php и создайте эту функцию;
class Company_Module_Model_Observer {public function addPostData(Varien_Event_Observer $observer) {
$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'checkout_cart_add') {
if($action->getRequest()->getParam('myid')) {
// ID IS PRESENT, SO LETS ADD IT
$item = $observer->getProduct();
$additionalOptions = array();
$additionalOptions[] = array(
'label' => 'The unique ID',
'value' => $action->getRequest()->getParam('myid')
);
$item->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}}
Имея это в виду, вы увидите идентификатор товара в корзине и в предложении, как если бы значение было из супер атрибута. Любой уникальный идентификатор будет рассматриваться как новая позиция.
Чтобы сохранить это значение в заказе на продажу, чтобы оно отображалось в электронных письмах о продажах и в бэкэнде, добавьте этого наблюдателя;
<sales_convert_quote_item_to_order_item>
<observers>
<Company_Module_Model_Observer>
<type>model</type>
<class>Company_Module_Model_Observer</class>
<method>salesConvertQuoteItemToOrderItem</method>
</Company_Module_Model_Observer>
</observers>
</sales_convert_quote_item_to_order_item>
И добавьте эту функцию в Company / Module / Model / Observer.php
public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{$quoteItem = $observer->getItem();
if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
$orderItem = $observer->getOrderItem();
$options = $orderItem->getProductOptions();
$options['additional_options'] = unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
Других решений пока нет …