質問

Onclick Add to cart button we are trying to update the Attribute value from "NO" to "YES".

[ attribute code : cart_status (Yes/No dropdown) Attribute ]

I tried below code, its changing attribute values for all products, but i need to change value only for that particular product that i added to cart.

<?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>

Update

After following Dhiren Vasoya's Solution , once i click on Add to cart, In 1)Frontend its changing Attribute value [From "NO" to "YES" , but once i refresh page, again it showing old value [ NO ] , But in 2)In Backend, updated Values are not showing for "Default Values" , but showing for "Stores"

Default values :

enter image description here

Stores :

enter image description here

config :

<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();
    }
}
役に立ちましたか?

解決

First you need to add observer throught you extension 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>

Now you have to code in yorr observer.php file like this :

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

他のヒント

  1. override your checkout controller there in addAction after add to cart code use your code.

  2. OR create an event observer checkout_cart_product_add_after there you can get the particular product.

For the above process, if you not familiar do google you'll get those information.

you want to update particular product attribute value which one is getting added to cart. So it will better if you use observer for add to cart. Using that you can update attribute value for the specific product that you are adding to cart.

You are better off using event checkout_cart_product_add_after and then utilise the code mentioned here

For your error message ... please try this code in your observer method:

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

Note: set $storeId to 0 if you want to save it as default value or use Mage::app()->getStore()->getId() for store view specific value.

Create a custom module

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>

Observer

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);
    }
}
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top