Magento 1.5.1.0の拡張機能を開発中です。在庫量がゼロになる製品にカタログ価格ルールを追加できます。 auto_discount_active
という属性セットに属性を追加しました。この属性は、私の価格規則の条件として機能する私のオン/オフスイッチです。Magento - 製品属性を変更した後のカタログルールの再割り当て
私はイベントsales_order_place_after
とcatalog_product_save_before
に反応するObserverを書いた。現在の製品の在庫量が変更されているかどうかをチェックし、カスタム属性をオンまたはオフに設定するのがタスクです。
catalog_product_save_before
イベントを処理するメソッドは正常に動作します。バックエンドに商品を保存した後、価格ルールは(必要に応じて)アクティブになります。コードは次のようになります。
class Company_AutoDiscount_Model_Observer
{
public function updateAutoDiscount($observer)
{
/**
* @var Varien_Event
*/
$event = $observer->getEvent();
$product = $event->getProduct();
$data = $product->getStockData();
$discount = $data['qty'] < 1 ? true : false;
$attributes = $product->getAttributes();
$attribute = $attributes["auto_discount_active"];
if ($product->getAutoDiscountAllowed())
{
$product->setAutoDiscountActive($discount);
}
return $this;
}
}
私は誰かが私の店に注文すると、私は同じことをしたいと思います。それは私が今までに働いているイベントsales_order_place_after
を使用するためです。カスタム属性の値を変更した後は、価格ルールは更新されません。私のオブザーバメソッドは、次のようになります。
public function updateAutoDiscountAfterOrder($observer)
{
/**
* @var Varien_Event
*/
$event = $observer->getEvent();
$order = $event->getOrder();
foreach ($order->getItemsCollection() as $item)
{
$productId = $item->getProductId();
$productIds[] = $productId;
$product = Mage::getModel('catalog/product')->setStoreId($order->getStoreId())->load($productId);
$data = $product->getStockData();
$discount = $data['qty'] < 1 ? true : false;
if ($product->getAutoDiscountAllowed())
{
$product->setAutoDiscountActive($discount);
$product->save();
}
Mage::getModel('catalogrule/rule')->applyAllRulesToProduct($productId);
}
return $this;
}
変更することなく、バックエンドに手動で注文して買った記事を保存した後、価格ルールが更新されます。しかし、私は私のオブザーバーメソッドで更新を取得しています。
カスタム属性を変更した後、カタログ価格ルールを割り当てるにはどうすればよいですか?
Thxで事前に!