使用5.2插件系统注册Shopware挂钩

时间:2017-06-15 19:08:46

标签: shopware

我正在使用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文档中找到任何内容。

任何帮助表示感谢。

2 个答案:

答案 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 ) );
}