Добавить атрибут в корзину товаров в Magento, показать отдельно в корзине

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

Для некоторых продуктов в Magento существует сложный процесс настройки. Существует специальный редактор, и каждый «дизайн» идентифицируется уникальным значением.
Что мне нужно, это сохранить этот идентификатор вместе с товаром в корзине и заказе. Он не должен отображаться напрямую, но должен быть доступен в коде (например, чтобы показать другой эскиз в корзине или некоторую информацию в счете-фактуре).

Кроме того, поскольку продукт настроен, этот продукт должен иметь отдельную строку в корзине и счет-фактуру, если этот идентификатор отличается!

Так, например, клиент открывает страницу продукта, выполняет некоторые настройки, и эта настройка получает идентификатор «1».
Клиент кладет это в корзину.
Он снова открывает тот же продукт, настраивает его по-другому и получает идентификатор «2».
Клиент также помещает это в корзину!

Теперь корзина должна быть:

  • ProductX [пользовательский текст, сгенерированный кодом с использованием идентификатора 1] 1 шт. X €
  • ProductX [пользовательский текст, сгенерированный кодом с использованием идентификатора 2] 1 шт. X €

и не:

  • ProductX 2 шт. Х €

Но, тем не менее, клиент должен иметь возможность заказать более одного продукта с одинаковым идентификатором!
так, например,

  • ProductX [пользовательский текст, сгенерированный кодом с использованием идентификатора 1] 4 куска x €
  • ProductX [пользовательский текст, сгенерированный кодом с использованием идентификатора 2] 2 куска х €

Настройка происходит за пределами magento. Magento просто имеет ссылку с всплывающим окном, а затем получает некоторый идентификатор, который затем можно прикрепить с помощью PHP.
Он просто хранит идентификатор и должен иметь возможность получить идентификатор для каждого продукта в корзине / счете / …

Важно то, что идентификатор хранится, и что товары с одинаковыми sku / настраиваемыми параметрами не объединяются в корзину, если идентификатор отличается!
Кроме того, идентификатор должен быть текстовой строкой, а не выбираться из списка, как с помощью настраиваемых параметров magento!

Методы, которые я нашел, могут сделать то, что я хочу:

  1. http://www.atwix.com/magento/custom-product-attribute-quote-order-item/
    Это выглядит лучше всего для меня, есть готовый модуль, который я мог бы изменить. Но я не уверен, что это правильный подход. Будут ли продукты разделены в корзине? Также значение идентификатора установлено здесь как опция продукта и отображается в бэкэнде ?! В моем случае нет никакой ценности, прежде чем клиент настроит продукт!

    1. https://magento.stackexchange.com/a/1382
      Я не совсем уверен … Как я могу получить идентификатор, который доступен на странице сведений о продукте, внутри обозревателя …

    2. Как я могу добавить каждый продукт как новый товар в корзину
      Может быть, мне нужно изменить это в дополнение к 1. или 2.?

Я был бы очень признателен, если бы Magento Expert мог пролить свет на это для меня!

2

Решение

Вы сказали, что можете позаботиться о добавлении идентификатора на страницу продукта. Что здорово. При необходимости вам нужно записать значение в скрытое поле ввода в форме добавления в корзину на странице продукта. Допустим, вход выглядит так;

<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);
}

}

5

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector