4

我正在使用 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”处理程序。但是,不会调用 sBasket 挂钩。

我怀疑我在这里混合了旧插件系统和新插件系统,并且挂钩可能必须以不同于事件的方式注册,但我在 Shopware 文档中找不到任何内容。

任何帮助表示赞赏。

4

2 回答 2

8

最后,我找到了解决方案。对于遇到同样问题的任何人:

Shopware 有很多缓存,其中之一是代理缓存。Shopware 创建包含有关已注册挂钩的信息的代理类,并且在更新插件时不会重新构建这些类。

因此,如果您添加/删除/更改挂钩注册,则必须清除代理缓存。在后端转到设置/缓存/性能/缓存/性能,选中“代理和元数据”复选框,然后单击清除按钮。

于 2017-06-15T20:41:24.790 回答
2

您可以通过以下方式清除安装/启用操作中的任何缓存:

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 ) );
}
于 2017-06-23T15:13:34.060 回答