从插件中覆盖Shopware 4中的模板

时间:2017-08-31 14:12:50

标签: templates shopware

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文件中排队,但仍然没有成功。

有人知道问题出在哪里吗?

1 个答案:

答案 0 :(得分:0)

这很容易

我只需添加一行

$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');
}