Questions tagged «event-observer»

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

3
如何更改事件传递的字符串?
在观察者函数中,我得到了事件传递的变量,如下所示: public function observerFunc(Varien_Event_Observer $observer) { $sth = $observer->getEvent()->getSth(); } 如果sth是一个对象,我可以通过在其上调用方法来对其进行更改。但是,sth如果它是一个简单的字符串,该如何更改?我尝试了以下操作但未成功: public function observerFunc(Varien_Event_Observer $observer) { $sth = $observer->getEvent()->getSth(); $observer->getEvent()->setSth('test'); $observer->setSth('test'); } 我刚刚了解到,某些事件还传递了一个传输对象,在该对象中可以更改字符串(感谢Alex),但是该事件page_block_html_topmenu_gethtml_after不能。那我该怎么办? 有问题的事件是这样发送的,我想更改$ html: $html = $this->_getHtml($this->_menu, $childrenWrapClass); Mage::dispatchEvent('page_block_html_topmenu_gethtml_after', array( 'menu' => $this->_menu, 'html' => $html ));

3
Magento 2:选择哪种扩展机制?
我们可以通过两种方式扩展控制器:使用首选项和使用插件。但是我不明白,哪一个是好的,以及偏好vs插件的优缺点。 <preference for="Magento\Checkout\Controller\Index\Index" type="mymodule\Helloworld\Controller\Index\Index" /> <type name="Magento\Catalog\Model\Product"> <plugin name="getname-test-module" type="mymodule\Helloworld\Model\Plugin\Product" sortOrder="10"/> </type>


3
确定customer_save_after中的顾客是否是新来的
我有希望在客户注册或保存他们的详细信息时执行的事件。为此,我正在使用两个事件:customer_register_success和customer_save_after。我遇到的问题是我最终两次运行该任务,因为customer_save_after总是在与相同的执行中被调用customer_register_success。 我试图通过检查原始数据并调用来检测客户是否是新客户isObjectNew,但两者均返回暗示该对象实际上不是新客户的数据。我如何检查客户是否只是在customer_save_after事件中注册,而没有在customer_register_success事件中在注册表中进行设置?

4
Magento观察员事件-操作顺序
我正在尝试向catalog_model_product_duplicate事件注入功能。该模块的一部分将是确保复制的产品的库存状态也被复制;目前不是。 我看到CatalogInventory观察到此事件并设置了一些标准库存信息。我能否保证在当地人之前解决核心事件?我可以依靠这里的任何操作顺序吗?

1
弃车观察员
我需要帮助!!! 我正在创建一个通过API与另一个平台集成的模块。我已经获得了用于客户注册的观察员或事件(customer_register_success),购买已完成(checkout_onepage_controller_success_action)。 我需要的帮助是如何将观察者带到废弃的购物车上?或者哪种方法是获取该信息并通过API发送信息的最佳方法。

2
Magento 2:事件观察者异常不在屏幕上显示
在自定义扩展中,我这样创建观察者。 app\code\Vendor\Extension\etc\frontend\events.xml <?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="sales_quote_remove_item"> <observer name="sales_quote_remove_item_handler" instance="Vendor\Extension\Observer\RemovecartbeforeObserver" shared="false" /> </event> </config> 和我的观察者: app\code\Vendor\Extension\Observer\RemovecartbeforeObserver.php use Magento\Framework\Event\ObserverInterface; class RemovecartbeforeObserver implements ObserverInterface { public function execute(\Magento\Framework\Event\Observer $observer) { // HERE IS MY CODE $message = "THIS IS CUSTOM ERROR MESSAGE"; throw new \Magento\Framework\Exception\LocalizedException(__($message)); return; } } 调用了我的Observer函数,但是它没有在页面上显示自定义错误。对此,它会在exception.log文件中显示我的消息。 main.CRITICAL: …


3
Magento 1:为什么有些观察者方法调用getEvent()而有些却不呢?
我最近发现了一些东西,对此感到很好奇。 例1:使用 getEvent() 在Mage_Core_Model_Locale在setLocale()方法中,分派事件: Mage::dispatchEvent('core_locale_set_locale', array('locale'=>$this)); 此事件的观察者bindLocale()来自Mage_Adminhtml_Model_Observer public function bindLocale($observer) { if ($locale=$observer->getEvent()->getLocale()) { if ($choosedLocale = Mage::getSingleton('adminhtml/session')->getLocale()) { $locale->setLocaleCode($choosedLocale); } } return $this; } 如您所见,要检索语言环境,我们首先调用getEvent()观察者。 示例2:不 getEvent() 在Mage_Wishlist_Block_Customer_Wishlist_Item_Options在__construct()方法中,分派事件: Mage::dispatchEvent('product_option_renderer_init', array('block' => $this)); 因此,我们同意示例1和2使用相同的语法。 但是,第二个示例的观察者initOptionRenderer()来自Mage_Bundle_Model_Observer public function initOptionRenderer(Varien_Event_Observer $observer) { $block = $observer->getBlock(); $block->addOptionsRenderCfg('bundle', 'bundle/catalog_product_configuration'); return $this; } 如您所见,要检索块,我们不会调用getEvent()观察者 题 …

2
catalog_product_save_after和catalog_product_save_commit_after之间的区别?
任何人都可以解释这些事件之间的区别。请快速而肮脏。谢谢。 我有一个类似的Observer方法: public function detectProductChanges($observer) { $product = $observer->getProduct(); $old = $product->getOrigData(); $new = $product->getData(); if ($product->hasDataChanges() && $old['status'] == 1 && $new['status'] == 2) { $this->_sendStatusMail($product); } } 没到 sendStatusMail() 我很喜欢这个事件: <events> <catalog_product_save_after> <observers> <productchange> <type>singleton</type> <class>A_ProductNotification_Model_Observer</class> <method>detectProductChanges</method> </productchange> </observers> </catalog_product_save_after> </events> 我应该使用: catalog_product_save_commit_after 目标: 禁用产品后发送电子邮件。 private function _sendStatusMail($product) …



4
如何防止使用_save_before事件保存模型数据
我创建了一个具有自己的数据库表的模型。对于自定义,我需要触发save_before该模型的事件。 如果一个字段值不匹配,则不应保存数据。 我的主要目标是防止使用“保存前”事件保存数据 我的config.xml代码: <?xml version="1.0" ?> <config> <modules> <Amit_Custommodule> <version>1.0.0</version> </Amit_Custommodule> </modules> <global> <models> <custommodule> <class>Amit_Custommodule_Model</class> <resourceModel>custommodule_resource</resourceModel> </custommodule> <custommodule_resource> <class>Amit_Custommodule_Model_Resource</class> <entities> <custommodule> <table>custommodule</table> </custommodule> </entities> </custommodule_resource> </models> <resources> <custommodule_setup> <setup> <module>Amit_Custommodule</module> </setup> <connection> <use>core_setup</use> </connection> </custommodule_setup> <custommoule_read> <connection> <use>core_read</use> </connection> </custommoule_read> <custommodule_write> <connection> <use>core_write</use> </connection> </custommodule_write> </resources> <events> <custommodule_save_before> …

2
将商品添加到购物车时是否修改其自定义选项?
我正在侦听sales_quote_save_before事件,以通知何时将商品添加到购物车。一旦触发,我将遍历以下项目选项: $quote = $observer->getEvent()->getQuote(); foreach ($quote->getAllItems() as $item) { $options = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct()); foreach($options['options'] as $option) { if($option['label'] == 'myOptionA') { // Here I want to change the selected value for the option } } } 如您所见,一旦到达某个选项(示例中为myOptionA),我想更改所选选项。因此,可以说myOptionA是一个下拉列表,它有4个可能的值。如果选择了值1,我想为该项目设置值4。因此,当购物车完成加载时,myOptionA的值应为4。不仅是它的名字,还有它的价格。我该怎么办?

2
使用Magento观察器功能将数据保存到会话
是否可以使用观察者功能将数据存储在Magento会话或注册表中,请执行以下操作: Mage::getSingleton('core/session')->setFoo('bar'); //Or 'customer/session', 'admin/session' 要么 Mage::register('foo', 'bar'); 我尝试添加 sesson_write_close(); 但是只能设法读取会话数据。

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.