我正在使用5.2插件系统开发Shopware插件,而且我在将挂钩注册到sBasket模块的方法时遇到了问题。
我想要实现的目的是在从购物篮中移除文章时收到通知,以便能够自动删除其他文章(这些文章是相关的,并且它没有意义如果另一个被移除,一个在篮子里。)
到目前为止,我的插件引导程序如下所示:
class MyTestPlugin extends \Shopware\Components\Plugin {
public static function getSubscribedEvents() {
return [
'Shopware_Modules_Basket_AddArticle_Start' => 'onBasketAddArticle',
'sBasket::sDeleteArticle::after' => 'onBasketDeleteArticle'
];
}
// Handler methods declared here...
}
" AddArticle_Start"事件注册按预期工作,即" onBasketAddArticle"当我向篮子添加文章时调用handler。但是,不会调用sBasket钩子。
我怀疑我在这里混合了旧版和新版插件系统,并且钩子可能必须以不同于事件的方式注册,但我无法在Shopware文档中找到任何内容。
任何帮助表示感谢。
答案 0 :(得分:3)
最后,我找到了解决方案。对于遇到同样问题的人:
Shopware有很多缓存,其中一个是代理缓存。 Shopware创建代理类,其中包含有关已注册挂钩的信息,这些类在更新插件时不会重建。
因此,如果添加/删除/更改挂钩注册,则必须清除代理缓存。在后端转到设置/缓存/性能/缓存/性能,选中复选框"代理和元数据"然后单击清除按钮。
答案 1 :(得分:1)
您可以通过下一种方式清除安装/启用操作中的任何缓存:
public function install(Shopware\Components\Plugin\Context\InstallContext\InstallContext $context){
parent::install($context);
// Only proxy cahe
$context->scheduleClearCache( array( Shopware\Components\Plugin\Context\InstallContext\InstallContext::CACHE_TAG_PROXY ) );
}
public function activate(Shopware\Components\Plugin\Context\InstallContext\ActivateContext $context)
{
// Clear all caches
$context->scheduleClearCache( array( Shopware\Components\Plugin\Context\InstallContext\InstallContext::CACHE_LIST_ALL ) );
}