Questions tagged «event-observer»

事件/观察者用于与Magento动态协作,而无需更改核心代码。


2
Magento事件观察者:Singleton与模型
因此,Magento提供了两种声明观察者的方法。通过<type>在Magento 1.x中指定标签并shared在Magento 2中指定属性,可以选择Singleton和Model(新实例)。 Magento 1种方法。 <events> <event_name> <observers> <unique_observer_name> <type>model|object|singleton|null</type> <class>class/alias_here</class> <method>methdNameHere</method> </unique_observer_name> </observers> </event_name> </events> Magento 2版本: <event name="event_name"> <observer name="unique_observer_name" instance="Class\Name\Here" method="methodNameHere" shared="true|false" /> </event> 因此,对于Magento 1,如果<type>标签是模型或对象,则将使用实例化该类Mage::getModel()。如果是singleton或缺少它,则使用实例化Mage::getSingleton()。 在Magento 2的情况下,如果shared为,false则使用$this->_observerFactory->create() (新实例)实例化该类。 如果shared为true,则使用$this->_observerFactory->get()(单例)实例化。 在这两个版本之间,事件观察者的想法非常相似,但是Magento 1中的大多数观察者都用作单例,因为type缺少标签,而在Magento 2中,大多数(我认为是全部)观察者都具有shared="false"。 我很困惑 什么时候应该使用单例,什么时候应该为观察者使用新的实例? Magento版本(1或2)在这里并不重要。 每个方法(新实例或单例)都可以使用一个简单的用例


4
修改购物车报价项目的税率并重新计算
我有一类产品,当您订购的数量超过一定数量时,(法律上)需要更改其税率。当您将新产品添加到购物车时,我扩展了各种税收模型以使其工作,但是当用户更新购物车中的数量或添加其他产品以使购物车中的数量超过阈值时,我遇到了问题量。 问题一: 首先,我不是100%要观察哪个事件。我尝试了以下方法; checkout_cart_save_after(基于此-> https://stackoverflow.com/questions/14362702/magento-programatically-update-cart-via-event) checkout_cart_update_items_after(基于此-> https://stackoverflow.com/questions/5104482/programmatically-add-product-to-cart-with-price-change) sales_quote_save_before(基于此-> https://stackoverflow.com/questions/7638858/magento-recalculate-cart-total-in-observer) 问题2: 我能够从购物车中访问报价项目,看来有很多方法可以做到。我还能够遍历购物车中的各个项目,更新这些项目的属性,然后保存这些项目(至少是暂时的)。但是,我那时无法保存报价并在结帐时重新计算税款。 部分原因是,尽管我可以访问购物车报价,但是我不确定使用哪种方法能够写入购物车报价。 我尝试过的 关于访问购物车内容的尝试取决于我观察到的事件,但我尝试了以下所有方法: 1. $item = $observer->getQuoteItem; 2. $cart = Mage::getSingleton('checkout/cart'); $cartItems = $cart->getCart()->getItems(); 3. $cart = $observer->getData('cart'); $quote = $cart->getData('quote'); $cartItems = $quote->getAllVisibleItems(); 4. $cartHelper = Mage::helper('checkout/cart'); $cartItems = $cartHelper->getCart()->getItems(); 5. $quote = Mage::getModel('checkout/cart'); $cartItems = $quote->getItems(); 似乎至少允许我访问报价,遍历报价并更新商品的商品是 …

4
订单ID,订单增量ID混乱,我无法获得订单ID为20001201
我对订单ID和订单增量ID感到有些困惑,那么谁能帮助我理解这两者之间的区别? 我有一个sales_order_place_after的观察者,我将销售详细信息存储在自定义表中。 但是随着 $orderId = $observer->getEvent()->getOrder()->getId(); 我得到的订单ID是普通ID,例如112或113或110等,而不是20001201 那么,真实的订单ID是20001201还是112? 我需要根据该订单ID进一步处理订单数据,我使用112、113等,并且可以正常工作,但是我需要对此进行澄清。

4
在观察者之后返回$ this
我在互联网上以及在第三方模块中都看到了一些冲突的信息- $this在观察者方法结束时返回是一种要求还是最佳实践? 例如: MyCompany_Module_Model_Observer.php public function salesOrderSaveAfter($observer){ //do stuff return $this; }

2
Magento 2:插件与观察者
在Magento 2中,使用插件与观察者来实现目标的利弊是什么? 我知道观察者订阅了事件,而插件可以在Magento类上调用公共方法之前和/或之后跳入,但是可以肯定的是,它们现在已经非常接近交叉路径了吗?

1
如何在事件catalog_product_save_before上创建新的观察者
我想通过使用以下代码在事件catalog_product_save_before上创建一个新的观察器来自动生成产品的元描述: public function autoMetaDescription($observer) { $product = $observer->getEvent()->getProduct(); $metaDescription = "Buy ". $product->getName()." for Rs ".number_format($product->getFinalPrice(), 2)." at sitename.com | New Book | Authorised seller for ". $product->getAttributeText('publisher'); $product->setMetaDescription($metaDescription); } 我必须在哪个文件夹/文件中编写代码?

2
检测库存变化
我需要检测产品的库存水平何时发生变化。我使用cataloginventory_stock_item_save_after事件发生了一些成功,该事件在后端更改库存或在前端取消订单(通过Paypal)时触发,但从前端购买产品时不会触发。 我cataloginventory_stock_item_save_after喜欢这样的事件: <global> <events> <cataloginventory_stock_item_save_after> <observers> <cataloginventory_stock_item_save_after_handler> <type>model</type> <class>stockchange/observer</class> <method>stockChange</method> </cataloginventory_stock_item_save_after_handler> </observers> </cataloginventory_stock_item_save_after> </events> <?php class FashionBunker_StockChange_Model_Observer { public function stockChange(Varien_Event_Observer $observer) { 当客户购买商品时,我是否需要使用另一个事件来捕获库存变化,或者我迷上该事件的方式是否存在问题?

3
在产品保存上创建自定义选项
每当创建产品时,我都在为我的产品自动创建自定义选项。到目前为止,我所得到的是一个在catalog_product_save_before事件上触发并运行以下代码的观察者: //check that we haven't made the option already $options = $product->getProductOptions(); foreach ($options as $option) { if ($option['title'] == 'Auto Date & Time' && $option['type'] == 'date_time' && !$option['is_delete']) { //we've already added the option return; } } $options[] = array( 'title' => $product->getDateLabel(), 'type' => 'date_time', 'is_require' => …


1
为什么我的SOAP v2 WS-I调用这么慢(每个产品更新需要7-10秒)?
我们将Magento SOAP v2 API与WS-I结合使用。 问题是,SOAP调用非常慢(每个产品7-10秒!)。我们称没有图像的catalogProductUpdate。商店本身运行良好,只是SOAP调用很慢。我们激活了Cache并降低了Index的性能,以提高性能(这在SOAP导入速度很慢时可以帮助许多其他商店)。 我将日志消息放入各种文件中,以找出错误所在。这是来自函数调用和调度事件的组合日志: 20.03.2013 14:17:43: Mage_Api_V2_SoapController 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api_v2_soap_index 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch_api 20.03.2013 14:17:43: dispatchEvent: controller_action_postdispatch 20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_before 20.03.2013 14:17:43: dispatchEvent: http_response_send_before 20.03.2013 14:17:43: dispatchEvent: controller_front_send_response_after 20.03.2013 14:17:43: Mage::run 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: dispatchEvent: resource_get_tablename 20.03.2013 14:17:51: …

5
如何在Magento 2中获取产品图片和URL?
这是我的观察者: public function execute(\Magento\Framework\Event\Observer $observer) { $orderIds = $observer->getEvent()->getOrderIds(); $order = $this->_orderRepositoryInterface->get($orderIds[0]); $items =$order->getAllVisibleItems(); $productQuantity = array(); $productPrice = array(); $productName = array(); $productIds = array(); foreach($items as $item) { $productIds[]= $item->getProductId(); $productName[]= $item->getSku(); $productPrice[] = $item->getPrice(); $productQuantity[]= floor($item->getQtyOrdered()); } } 如何从商品中获取商品图片和商品网址?

3
如何在magento 2中获取事件/观察者
在Magento 1中,我可以通过如下所示的调试dispatchEvent()方法获取事件/观察者列表Mage.php。 /** * Dispatch event * * Calls all observer callbacks registered for this event * and multiple observers matching event name pattern * * @param string $name * @param array $data * @return Mage_Core_Model_App */ public static function dispatchEvent($name, array $data = array()) { Mage::log($name,null,'Events'); Varien_Profiler::start('DISPATCH EVENT:'.$name); $result …

2
Magento尝试在前端的事件观察器中保存产品时失败?
我有一个绑定到事件观察器的函数 要求之一是,当它遍历订单项数据时,如果某个产品属性为空,则发出请求以通过单独的模型获取特定数据(正常工作)。 问题代码基本上可以归结为 foreach ($order->getAllItems() as $key => $item) { /** @var Tantor_Catalog_Model_Product $productData */ $productData = $item->getProduct(); $_item = Mage::getModel('catalog/product')->load($productData->getId()); $_item->setNetsuiteItemIid('foo'); $_item->save(); } 但是Magento抛出了一个例外 2014-03-05T21:14:14+00:00 ERR (3): exception 'Exception' with message 'Warning: Invalid argument supplied for foreach() in /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180' in /var/www/html/app/code/core/Mage/Core/functions.php:245 Stack trace: #0 /var/www/html/app/code/core/Mage/Eav/Model/Entity/Abstract.php(1180): mageCoreErrorHandler(2, …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.