Программное обновление значения раскрывающегося списка атрибутов для одного продукта
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) В Бэкэнде обновленные значения не отображаются для "Значений по умолчанию ", но отображаются для " Хранит"
Значения по умолчанию :
Магазины :
Конфигурация :
<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();
}
}
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();
}
}
Переопределите свой контроллер оформления заказа там в
addAction
после добавления кода в корзину используйте свой код.ИЛИ создайте наблюдателя событий
checkout_cart_product_add_after
, где вы можете получить конкретный продукт.
Для описанного выше процесса, если вы не знакомы с Google, вы получите эту информацию.
Вы хотите обновить значение определенного атрибута товара, который добавляется в корзину. Поэтому будет лучше, если вы используете observer для добавления в корзину. Используя это, вы можете обновить значение атрибута для конкретного товара, который вы добавляете в корзину.
Для вашего сообщения об ошибке... пожалуйста, попробуйте этот код в своем методе наблюдателя:
$product = $observer->getEvent()->getProduct();
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product->getId()),
array('cart_status' => 1),
$storeId
);
Примечание: установите $storeId
в 0
, если вы хотите сохранить его в качестве значения по умолчанию или использовать Mage::app()->getStore()->getId()
для конкретного значения представления хранилища.
Создайте пользовательский модуль
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);
}
}