Flo*_* P. 1 events observers magento
以下是我的问题:以编程方式添加产品以引用的正确事件是什么(条目sales_flat_quote_item表).此外,我必须从用户/客户处捕获添加到购物车的商品/产品,因为他们的数据信息将决定将以编程方式添加的产品.所以场景将是:
在我看来,在将产品写入数据库之前,最好使用引号.
我弄清楚如何通过Mage_Sales_Model_Quote :: _ addCatalogProduct()添加它.但我想通过事件观察者而不是覆盖核心类来实现.
编辑
经过这篇文章的更多研究和建议,我能够让它运作起来.对我来说关键的是理解观察者中的对象,他们的类和类方法
var_dump(get_class($quote)); // $item // $product
var_dump(get_class_methods($quote)); // $item // $product
Run Code Online (Sandbox Code Playgroud)
现在知道方法可用,更容易弄清楚:
事件:
<events>
<checkout_cart_product_add_after>
<observers>
<unifiedarts_configurablebundleset>
<type>singleton</type>
<class>Namespace_ConfigurableBundleSet_Model_Observer</class>
<method>salesQuoteEditItems</method>
</unifiedarts_configurablebundleset>
</observers>
</checkout_cart_product_add_after>
</events>
Run Code Online (Sandbox Code Playgroud)
和观察者数据:
public function salesQuoteEditItems($observer)
{
$event = $observer->getEvent();
$item = $event->getQuoteItem();
$product = $item->getProduct();
$quote = $item->getQuote();
$parent = Mage::getModel('catalog/product')->load($product->getParentProductId());
if($parent->getTypeId() == 'bundle')
{
if($product->getTypeId() == 'configurable')
{
if ($simpleItem = $item->getOptionByCode('simple_product'))
{
// check if the simple product is in the table
if(!$quote->hasProductId($simpleItem->getProduct()->getId()))
{
echo '<br /><br /> no simple, add it';
echo ' simple id '.$simpleItem->getProduct()->getId();
$simple = Mage::getModel('catalog/product')->load($simpleItem->getProduct()->getId());
$quoteItem = Mage::getModel('sales/quote_item')->setProduct($simple);
$parentItem = ( $item->getParentItem() ? $item->getParentItem() : $item );
echo 'simple id '.$simpleItem->getProduct()->getId();
$item->setRowWeight($product->getWeight());
$quoteItem->setQuote($quote);
$quoteItem->setQty('1');
$quoteItem->setParentItem($parentItem);
$quoteItem->setStoreId(Mage::app()->getStore()->getId());
$quoteItem->setOriginalCustomPrice(0);
$quote->addItem($quoteItem);
$quote->save();
}
else
{
echo 'simple found change someting'; die;
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
最重要的是我的扩展程序必须添加一个已配置的项目与包.产品视图正常运行.艰巨的任务是将它放入购物车.现在,一切正常,直到返回并使用不同(已配置)选项再次添加产品.
你看上面我试图检查简单的产品(我手动添加).该代码在sales_flat_quote_item表中生成两个新行.
如何删除旧的两个条目,或者是否有更好的方法来设置新数据?谢谢 :)

小智 5
在config.xml中声明事件观察者
<events>
<checkout_cart_product_add_after>
<observers>
<custommodule>
<class>custommodule/observer</class>
<method>cartProductAddAfter</method>
</custommodule>
</observers>
</checkout_cart_product_add_after>
<checkout_cart_product_update_after>
<observers>
<custommodule>
<class>custommodule/observer</class>
<method>cartProductUpdateAfter</method>
</custommodule>
</observers>
</checkout_cart_product_update_after>
</events>
Run Code Online (Sandbox Code Playgroud)
开发Observers处理程序
class Vendor_Custommodule_Model_Observer
{
/* If you'd like to do the same while updating the shopping cart*/
public function cartProductUpdateAfter($observer)
{
$this->cartProductAddAfter($observer);
}
public function cartProductAddAfter($observer)
{
$product = $observer->getEvent()->getProduct();
$currentItem = $observer->getEvent()->getQuoteItem();
$quote = $currentItem->getQuote();
$quoteItems = $quote->getItems();
/* Detect Product ID and Qty programmatically */
$idToAdd = "ANY PRODUCT ID";
$qty = 1;
$productToAdd = Mage::getModel('catalog/product');
/* @var $productToAdd Mage_Catalog_Model_Product */
$productToAdd->load($idToAdd);
$this->_addProductToCart($productToAdd, $qty);
}
protected function _addProductToCart($product, $qty)
{
$cart = Mage::getSingleton('checkout/cart');
/* @var $cart Mage_Checkout_Model_Cart */
if ($product->getId()) {
$cart->addProduct($product, $qty);
return true;
}
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12587 次 |
| 最近记录: |