Questions tagged «event-observer»

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

2
使用观察者创建自定义选项和奖品以将产品添加到购物车
我想使用观察者将自定义选项添加到quoteitem,该观察者具有checkoutCartProductAddAfter事件,并在产品添加到购物车后触发。 public function checkoutCartProductAddAfter(Varien_Event_Observer $observer) { $item = $observer->getQuoteItem(); $item->addOption(new Varien_Object( array( 'product' => $item->getProduct(), 'label' => 'Free Gifts', 'value' => 'Spend $50 and get gift product worth $9.99' ) )); return; } 我的观察器正在工作,但是我无法向添加的产品添加自定义选项。请提供帮助,以使用观察者将自定义选项添加到刚刚添加的产品中。

4
何时在自定义模块中调度事件?
这是关于Magento 1和Magento 2的问题。 我了解,作为一种好的做法,鼓励第三方模块开发人员在其自定义模块中调度事件,以使其更易于与其他模块一起使用。 我想知道: 开发人员应在哪里在自定义模块中调度事件? 有没有建议的地点来安排活动?例如,控制器,模型,块,助手,观察者? 调度事件如何影响性能?

2
更改分层导航的布局
我有一个分层的导航,客户想要<select/>字段而不是一长串链接。 我考虑过,如果过滤器的名称/ ID匹配,则只用观察者更改模板。 有更好的想法或建议吗?更改模板的替代方法,可能是覆盖/重写块,还是仅更改两个过滤器的块类? 什么事件用于更改模板? 然后,我遇到了与此处相同的问题/programming/14524791/magento-enable-or-disable-a-module-in-code/14529629,因为我有一个更改布局内容的观察者。这仅与主题相关。因此,在运行更新之前检查主题可能是一个好主意吗?


2
如何在magento 2中保存图像自定义属性
我需要根据条件在前端显示少量产品图像:应该检查虚拟镜像的使用情况。 <?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Dcw\Vm\Observer; use Magento\Framework\Event\ObserverInterface; class ChangeTemplateObserver extends \Magento\ProductVideo\Observer\ChangeTemplateObserver { /** * @param mixed $observer * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @return void */ public function execute(\Magento\Framework\Event\Observer $observer) { $observer->getBlock()->setTemplate('Dcw_Vm::helper/gallery.phtml'); } } 模板: <div class="admin__field field-image-vm"> …

1
购物车规则不再有效时,是否存在事件或插件位置?
当购物车价格规则不再有效时(例如,当它过期或您更改不再适用的其他产品的数量时),是否可以插入某个事件或地点?我知道它会自动从购物车中删除,但是我似乎无法在代码中找到发生这种情况的地方。 我正在编写一个模块,该模块将购物车中的免费产品添加到小计超过X金额的优惠券中。除了减少小计中X之下的购物车中的物品数量时,其他所有操作都有效。正在删除优惠券,但我的产品仍留在购物车中。 到目前为止,我已经利用以下事件来做到目前为止我需要做的事情... salesrule_validator_process checkout_cart_update_items_after sales_quote_collect_totals_before 我确实发现了Magento\Quote\Model\CouponManagement一个看起来很有希望的东西,因为它具有set()和remove()方法,但是在更新购物车时似乎没有被调用。 在checkout_cart_update_items_after看来,这似乎是我可以检查的合乎逻辑的地方,但看来规则仍然是根据$cart->getQuote()->getAppliedRuleIds() 更新:我最终为checkout_cart_save_after事件添加了一个观察者,该事件在此之后运行,collectTotals()因此知道规则是否仍在购物车中。然后,我基本上$quote->getAppliedRuleIds()与$quote->getOrigData('applied_rule_ids')进行比较,看看规则是否已删除。我觉得有一种更好的方法可以执行此操作,但是暂时可以。我仍然有优惠券过期的问题...

3
Magento2-如何阻止以编程方式将产品添加到购物车?
我想做的是,如果在引号中设置了我的自定义属性,那么我不想在购物车中添加任何产品。我的自定义属性已正确设置。 为了阻止产品添加到购物车,我编写了一个观察该事件的观察者 controller_action_predispatch_checkout_cart_add 我的观察者文件代码: public function execute(\Magento\Framework\Event\Observer $observer) { $addedItemId = $observer->getRequest()->getParam('product'); $quote = $this->_cart->getQuote(); if(!empty($quote)) { $customAttribute = $quote->getData('custom_attribute'); if(!empty($customAttribute)) { $controller = $observer->getControllerAction(); $storeId = $this->_objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId(); $product = $this->_productRepository->getById($addedItemId, false, $storeId); $observer->getRequest()->setParam('product', null); $this->_messageManager->addError(__('This product cannot be added to your cart.')); echo false; $this->_actionFlag->set('', \Magento\Framework\App\Action\Action::FLAG_NO_DISPATCH, true); $this->redirect->redirect($controller->getResponse(), 'checkout/cart/index'); …



3
在Magento 2成功订购后要使用哪个观察者?
我正在开发此Magento 2扩展程序,部分功能是使用Web服务将有关订单的信息推送到外部应用程序。在结帐单中下订单后,我需要推送此信息。 目前,我正在使用checkout_onepage_controller_success_action触发该方法在外部应用程序中创建订单的事件。我将此活动放置在中/etc/frontend/events.xml。 到目前为止,这是可行的,但是我发现订单状态存在问题。有时,订单仍处于pending状态,而另一些时间,订单仍在processing。其原因是因为付款方式首先将订单初始化为待处理,并且在批准付款后,订单更改为处理中。我只想下processing订单。似乎有时该事件checkout_onepage_controller_success_action在授权付款之前运行,这导致了问题。 任何想法如何解决这个问题?如何在运行代码之前确保付款处理已运行checkout_onepage_controller_success_action? 按照我的代码: events.xml <?xml version="1.0"?> <!-- /** * Copyright © 2017 companyname.com */ --> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd"> <event name="checkout_onepage_controller_success_action"> <observer name="companyname_order_success" instance="Companyname\Shipping\Observer\CreateCompanynameOrderObserver" /> </event> </config> CreateCompanynameOrderObserver.php /** * Create an order in Companyname when order status match the statuses in the backend * * @param EventObserver …

4
观看添加到购物车事件-报价项目ID为空
我正在尝试捕获将商品添加到购物车后触发的事件。我目前正在观看以下事件:checkout_cart_product_add_after 根据magento消息来源,在对Quote进行所有操作后,将触发此事件。但是当我访问购物车ID和报价ID时,这些值为空: $quoteItem = $observer->getQuoteItem(); $quote_item_id = $quoteItem->getItemId(); $cart = Mage::getSingleton('checkout/session'); $quote_id= $cart->getQuoteId(); 如果购物车中没有商品,则上面的两个ID均返回空白,如果购物车中已有商品,则该商品ID具有值,但quote_item_id没有。 注意,此问题以前曾被问过,但问题从未得到解决,因此讨论最终偏离了这个问题。我需要quote_item_id。

2
在将内容发送到浏览器之前调度的最后一个事件是什么?
我需要设置或更新cookie,但是我想确保所有(或尽可能多的)请求处理都在我的cookie生成代码运行之前发生。例如,如果用户登录,我想确保在我的代码运行之前已经进行了登录处理,或者如果用户向其购物车中添加了一些东西,我想知道所有购物车处理都首先完成。 在将响应发送到浏览器之前是否立即调度任何事件?

1
从第三方扩展中删除观察者
我已经在我的Magento 2平台上安装了一个博客模块。该博客模块具有一个观察者,该观察者自动将新菜单项添加到主导航中。我想停止这一点。 该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="page_block_html_topmenu_gethtml_before"> <observer name="aw_blog_add_topmenu_items" instance="Aheadworks\Blog\Observer\AddBlogToTopmenuItemsObserver" /> </event> </config> 如您所见,它引用了将链接添加到主导航中的观察者。删除events.xml解决了我的问题,但是我正在寻找一种不涉及修改核心模块文件的方法。

2
Magento事件,用于在自定义选项文本字段更改时计算价格
我正在尝试创建具有两个自定义文本字段的产品:“长度”和“宽度”。当用户同时输入长度和宽度时,价格需要通过自定义公式进行计算。 我正在尝试找到将观察者连接到的正确事件-有人知道这可能是什么吗? 这是我所知道并尝试过的 1)产品视图中的自定义字段文本框有一个onchange事件,我还没有想出如何通过观察者事件来使用它-“ opConfig.reloadPrice() 2)如果我在事件sales_quote_add_item上构建了一个观察者,则可以在添加到购物车时通过公式更改价格。使用这种方法,我仍然需要一种在将产品添加到购物车之前在产品视图中对其进行更改的方法。 3)我还尝试了事件catalog_product_get_final_price,但这似乎仅在加载产品页面时才会触发,因此在添加了产品长度或宽度之后,它不会重新触发。 任何想法将不胜感激!


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.