Создание пользовательской опции и приза для простого добавления продукта в корзину с помощью Observer

magento.stackexchange https://magento.stackexchange.com/questions/1327

Вопрос

Я хочу добавить пользовательскую опцию в цитату с использованием Observer, какого наблюдателя CACKOUTCartProductAdDafter и пожаров после добавления продукта в CART.

public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{

 $item = $observer->getQuoteItem();  
  $item->addOption(new Varien_Object(
            array(
                    'product' => $item->getProduct(),
                    'label' => 'Free Gifts',
                    'value' => 'Spend $50 and get gift product worth $9.99'
                 )
        ));
    return;

}

Мой наблюдатель работает, но я не могу добавить пользовательскую опцию к добавлению продукта. Пожалуйста, предоставьте помощь, чтобы добавить пользовательскую опцию, используя Observer, чтобы просто добавить продукт.

Это было полезно?

Решение

@Tim рассказал об этом выпуске на выходных: https://docs.google.com/presentation/d/1efpznqsvtrt1had1xqvcpc-tgvr8jyok4x7zejhm9je/edit

Вы хотите, чтобы метод 2:Добавить следующее событие в config.xml

<sales_quote_collect_totals_before>
<observers>
<hackathon_presentation>
<type>singleton</type>
<class>modulename/observer</class>
<method>salesQuoteAddressCollectTotalsBefore</method>
</hackathon_presentation>
</observers>
</sales_quote_collect_totals_before>

В viserver.php добавить следующий метод

   public function salesQuoteAddressCollectTotalsBefore($observer)
    {
        $quote = $observer->getQuote();
        $quote_items = $quote->getItemsCollection();
        foreach ($quote_items as $item) {
            $additionalOptions = array(
                array(
                    'code'  => 'my_code',
                    'label' => 'This text is displayed through additional options',
                    'value' => 'ID is ' . $item->getProductId() . ' and SKU is ' . $item->getSku()
                )
            );
            $item->addOption(
                array(
                     'code'  => 'additional_options',
                     'value' => serialize($additionalOptions),
                )
            );
        }
    }

Вот больше об этой теме:

https://stackoverflow.com/questions/9334115/magento-change-custom-option-value-ffore-adding-it-to-cart/9344336#93444336

и более:

https://stackoverflow.com/questions/9412074/magento-quote-order-product-item-attribute на основе in-user-input/9496266#9496266

Другие советы

Событие Appropiate для добавления пользовательских опций на лету catalog_product_type_prepare_full_options, который запускается непосредственно перед тем, как продукт с его пользовательскими опциями преобразуется в пункт цитаты.

Если данные BuyRequest повлияют на атрибуты или опции продукта, наблюдатель на мероприятии catalog_product_type_prepare_{$processMode}_options хороший выбор, где $processMode это режим проверки и может быть «полным» или «lite». Режим «Полный» используется, когда продукт регулярно добавляется в корзину, и подтверждается, если все необходимые параметры установлены и вся конфигурация действительна. В параметрах «Lite» только в режиме, содержащихся в запросе, подтверждены, он используется при добавлении продукта в список желаний, но также возможна при создании порядка из бэкэнда. Чтобы обработать данные в любом случае, вы можете зарегистрировать наблюдатель для обоих событий. Если будет проверка, вы должны дифференцировать события, конечно.

События запускаются в mage_catalog_model_product_type_abstract :: _ prepareoptions () и следующие параметры доступны:

  • transport: Транспортный объект для всех пользовательских параметров (но никаких других параметров, например, параметров пакета), чтобы вы могли изменить их в наблюдателе. Transport-> Параметры-это массив в форме Option_id => option_value. Внимание, транспорт сам является объектом stdclass, а не экземпляром varien_object, как вы можете ожидать. Таким образом, нет никаких методов Getter и Setter для транспортировки.> Опции.
  • buy_request: Объект BuyRequest, вы можете прочитать его здесь и все еще изменить его.
  • product: Продукт, который будет преобразован в предмет цитаты позже. Здесь вы можете манипулировать атрибутами или добавлять их динамически. Но вам все еще нужно рассмотреть их в процессе конверсии. Событие использовалось для этого, sales_quote_product_add_after, запускается только позже.

Источник: Объект Magento Buyrequest - ссылка

Так что наблюдатель может выглядеть так:

public function addCustomOption(Varien_Event_Observer $observer)
{
    $transport = $observer->getTransport();
    if (this_item_should_be_free()) { // implement your condition here
        $transport->options['Free Gifts'] = 'Spend $50 and get gift product worth $9.99';
    }
}

Вы не можете установить цену для этой динамически добавленной пользовательской опции, но вы можете изменить цену пункта цитаты, используя второй наблюдатель для catalog_product_get_final_price как это:

public function adjustFinalPrice($observer) {

    $product = $observer->getProduct();
    // Set price to "0" if custom option "Free Gift" has been set
    if ($product->getCustomOption('Free Gift')) {
        $product->setFinalPrice(0);
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top