从插件覆盖 Shopware 4 中的模板

Overriding Template in Shopware 4 from plugin

public function install() {
    $this->subscribeEvent(
        'Enlight_Controller_Action_PostDispatchSecure_Frontend',
        'onFrontendPostDispatch',
        0
    );

    return array('success' => true, 'invalidateCache' => array('frontend'));
}

public function onFrontendPostDispatch(\Enlight_Event_EventArgs $args)
{
    /** @var \Enlight_Controller_Action $controller */
    $controller = $args->get('subject');
    $view = $controller->View();

    $view->addTemplateDir(
        __DIR__ . '/Views'
    );
}

我曾尝试 运行 插件并覆盖模板,但 Shopware 没有看到插件中的变化。

我正在 /Views/frontend/checkout/cart_footer.tpl 插件根目录中创建新文件。

我也在插入

{extends file='parent:frontend/checkout/cart_footer.tpl'}

.tpl 文件中的行,但仍然没有成功。

有谁知道哪里出了问题吗?

这很简单

我只加一行

$view->loadTemplate('frontend/plugins/checkout/cart.tpl');

并稍微更改代码。

我正在将事件从 Enlight_Controller_Action_PostDispatchSecure_Frontend 更改为 Enlight_Controller_Action_PostDispatch_Frontend_Checkout

并添加 $view->loadTemplate('frontend/plugins/checkout/cart.tpl'); 此路径与 "/Views" 文件夹相关,该文件夹在 addTemplateDir 方法中声明。

下面是完整的代码,请尽情享受:)

public function install() {
    $this->subscribeEvent(
        'Enlight_Controller_Action_PostDispatch_Frontend_Checkout',
        'onFrontendPostDispatch'
    );

    return array('success' => true, 'invalidateCache' => array('frontend'));
}


public function onFrontendPostDispatch(\Enlight_Event_EventArgs $args)
{
    /** @var \Enlight_Controller_Action $controller */
    $controller = $args->get('subject');
    $view = $controller->View();

    $view->addTemplateDir(
        __DIR__ . '/Views'
    );

    $view->loadTemplate('frontend/plugins/checkout/cart.tpl');
}