Observer Checkout_cart_product_add_afterカートで製品量を取得します
-
16-10-2019 - |
質問
Checkout_cart_product_add_afterで発射するオブザーバーを作成しました。オブザーバーでは、このような量を設定します。
$item->setQty($quantity);
その製品のカートに既にカートにある数量を取得して、製品の数量が代わりに更新されるか、上書きされます。しかし、カートで製品数量を取得しようとすると(mage :: helper( 'checkout/cart'))、おそらく更新数量コードがすでに起動しているため、「新しい」量を取得します。
製品のカート量を取得するにはどうすればよいですか?
前もって感謝します、
Joost
編集:
これはオブザーバーの完全なコードです:
public function modifyPrice(Varien_Event_Observer $obs)
{
$item = $obs->getQuoteItem();
$item = ( $item->getParentItem() ? $item->getParentItem() : $item );
$price = $this->_getPrice($item);
$item->setCustomPrice($price);
$item->setOriginalCustomPrice($price);
$quantity = $this->_getQuantity($item);
$item->setQty($quantity);
$item->getProduct()->setIsSuperMode(true);
}
protected function _getPrice(Mage_Sales_Model_Quote_Item $item)
{
$price = 0;
Mage::app()->getRequest()->getPost();
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$prices = $item->getProduct()->getData('qty_dropdownbox_prices');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_prices = explode(';', $prices);
$array_quantities = explode(';', $quantities);
$price = $array_prices[$qtydropdownbox] / $array_quantities[$qtydropdownbox];
return $price;
}
protected function _getQuantity(Mage_Sales_Model_Quote_Item $item)
{
$quantity = 0;
Mage::app()->getRequest()->getPost();
$qty = Mage::app()->getRequest()->getParam('qty');
$qtydropdownbox = Mage::app()->getRequest()->getParam('qtydropdownbox');
$quantities = $item->getProduct()->getData('qty_dropdownbox_quantities');
$array_quantities = explode(';', $quantities);
$quantity = $array_quantities[$qtydropdownbox] * $qty;
return $quantity;
}
解決
私はあなたが何を達成したいのか理解していませんが、古い量を得るには手遅れであり、Origdataさえ上書きされます(私は思う)が、それをチェックしてください。
最も簡単なのはフックすることだと思います quote_item_load_after
数量を追加して、後で$ QUOTIITEM-> SETMYPERSONALQTY($ QUOTEITEM-> GETQTY())のように読み取るだけです
他のヒント
イベントを使用できます sales_quote_product_add_after
新しいアイテムが保存される前にトリガーされるため、使用できるように $item->getOrigData('qty')
元の数量を取得します。
イベントには1つのパラメーターがあります。 items
これは、この製品用に生成されたすべての単一の引用項目の配列です。シンプルな製品の場合、これは常に1つのアイテムです。バンドルと構成可能な製品の場合、メイン製品とその子供のアイテムであり、親は常に最初のアイテムです。