Программное обновление значения раскрывающегося списка атрибутов для одного продукта


Onclick Добавить в корзину кнопка мы пытаемся обновить значение атрибута с "НЕТ" на "ДА".

[ код атрибута : cart_status ( Раскрывающийся список Да/Нет) Атрибут]

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

<?php

foreach ($collections as $key => $product) 
{
    echo $product->getName().' <br><br>';           
    $_product = Mage::getModel('catalog/product')->load($product->getId());             
?>

<form action="<?php 

echo  Mage::helper('checkout/cart')->getAddUrl($product);

// update cart_status

    echo "\n".'updating '.$_product->getSku()."...\n";
    $_product->setData('cart_status', 1)->getResource()->saveAttribute($_product, 'cart_status');
    $_product->save(); 

// update cart_status end

?>" method="post">  
<div>

<button>Add to cart</button>

</div>
</form>

Обновление

После выполнения Решения Дирена Васои, как только я нажму на Add to cart, в 1) Внешний интерфейс изменяет значение атрибута [С "НЕТ" на "ДА" , но как только я обновлю страницу, снова отобразится старое значение [ НЕТ], Но в 2) В Бэкэнде обновленные значения не отображаются для "Значений по умолчанию ", но отображаются для " Хранит"

Значения по умолчанию :

enter image description here

Магазины :

enter image description here

Конфигурация :

<checkout_cart_product_add_after>
            <observers>
                <example_add_to_cart_after>
                  <class>Amasty_Example_Model_Observer</class>
                  <method>AddToCartAfter</method>
                </example_add_to_cart_after>
            </observers>
</checkout_cart_product_add_after>

App/code/local/Amasty/Example/Model/Observer.php

class Amasty_Example_Model_Observer 
{
    public function AddToCartAfter($observer)
    {

         $product = $observer->getEvent()->getProduct();         
         $product->setCartStatus(1);
         $product->save();
    }
}
Author: sv3n, 2017-06-09

6 answers

Сначала вам нужно добавить наблюдателя через ваше расширение config.xml .

App/code/CODEPOOL/Vendor/Extension/etc/config.xml

<frontend>
    <events>
        <checkout_cart_product_add_after>
            <observers>
                <extension_add_to_cart_after>
                    <class>YOUR_OBSERVER_CLASS</class>
                    <method>AddToCartAfter</method>
                </extension_add_to_cart_after>
            </observers>
        </checkout_cart_product_add_after>
    </events>
</frontend>

Теперь вам нужно ввести код в yorr observer.php файл, подобный этому:

App/code/CODEPOOL/Vendor/Extension/Model/Observer.php

class Vendor_Extension_Model_Observer extends Mage_Core_Model_Observer
{
    public function AddToCartAfter($observer)
    {
        $product = $observer->getEvent()->getProduct();         
        $product->setCartStatus(1);
        $product->save();
    }
}
 0
Author: Dhiren Vasoya, 2017-06-12 08:10:20
  1. Переопределите свой контроллер оформления заказа там в addAction после добавления кода в корзину используйте свой код.

  2. ИЛИ создайте наблюдателя событий checkout_cart_product_add_after, где вы можете получить конкретный продукт.

Для описанного выше процесса, если вы не знакомы с Google, вы получите эту информацию.

 0
Author: JAY, 2017-06-09 12:52:01

Вы хотите обновить значение определенного атрибута товара, который добавляется в корзину. Поэтому будет лучше, если вы используете observer для добавления в корзину. Используя это, вы можете обновить значение атрибута для конкретного товара, который вы добавляете в корзину.

 0
Author: Sayan Basak, 2017-06-10 15:44:40

Вам лучше использовать событие checkout_cart_product_add_after, а затем использовать упомянутый здесь код

 0
Author: Asrar, 2017-06-11 00:11:39

Для вашего сообщения об ошибке... пожалуйста, попробуйте этот код в своем методе наблюдателя:

$product = $observer->getEvent()->getProduct();
Mage::getSingleton('catalog/product_action')->updateAttributes(
    array($product->getId()),
    array('cart_status' => 1),
    $storeId
);

Примечание: установите $storeId в 0, если вы хотите сохранить его в качестве значения по умолчанию или использовать Mage::app()->getStore()->getId() для конкретного значения представления хранилища.

 0
Author: sv3n, 2017-06-12 08:03:58

Создайте пользовательский модуль

App/code/local/MagePal/UpdateProductOnAddToCart/etc/config.xml

<frontend>
    <events>
        <checkout_cart_product_add_after>
            <observers>
                <magepal_updateproductonaddtocart_add_to_cart_after>
                    <class>MagePal_UpdateProductOnAddToCart_Observer</class>
                    <method>AddToCartAfter</method>
                </magepal_updateproductonaddtocart_add_to_cart_after>
            </observers>
        </checkout_cart_product_add_after>
    </events>
</frontend>

Наблюдатель

App/code/local/MagePal/UpdateProductOnAddToCart/Model/Observer.php

class MagePal_UpdateProductOnAddToCart_Observer extends Mage_Core_Model_Observer
{
    public function AddToCartAfter($observer)
    {
        // Set store id to admin
        Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
        $product_id = $observer->getEvent()->getProduct()->getId();
        $store_id = 0;

        $action = Mage::getModel('catalog/resource_product_action');
        $action->updateAttributes(array($product_id), array(
            'cart_status' => 1
        ), $store_id);
    }
}
 0
Author: Renon Stewart, 2017-06-12 11:20:41