Shopware 5.2.20。无法通过插件扩展模板
Shopware 5.2.20. Cannot extend template via plugin
我正在尝试通过自己的插件扩展模板 frontend/home/index.tpl
。
这是我的根文件:
<?php
namespace TdevExtend;
use Shopware\Components\Plugin;
class TdevExtend extends Plugin
{
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin' =>
'onDetailPostDispatch'
];
}
public function onDetailPostDispatch(\Enlight_Event_EventArgs $args)
{
$this->container->get('template')->addTemplateDir(
$this->getPath() . '/Resources/views/'
);
return __DIR__ . '/Controllers/Frontend/MyPlugin.php';
}
}
?>
这是我的控制器 MyPlugin.php 在目录 Controllers\Frontend
中
public function preDispatch()
{
/** @var \Shopware\Components\Plugin $plugin */
$plugin = $this->get('kernel')->getPlugins()['TdevProductTab'];
$this->get('template')->addTemplateDir($plugin->getPath() . '/Resources/views/');
}
文件夹中的模板 Resources\views\frontend\home\
{extends file="parent:frontend/home/index.tpl"}
{block name='frontend_index_content'}
<div class="">Hello world!</div>
{$smarty.block.parent}
{/block}
我已阅读official documentation and researched plugins examples plugins examples
installing/reinstalling 插件在后端创建缓存并删除 var/cache
中的手动文件夹。但是没有任何帮助。
您可能希望在 getSubscribedEvents 中使用事件 Enlight_Controller_Action_PostDispatchSecure_Frontend_Index
而不是 Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin
。
您正在使用活动 Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin
。在寻找控制器 MyPlugin
时,Shopware 将创建此事件。所以在使用这个事件的时候需要自己写Controller。但我猜你想要的是上面提到的事件。其实你不需要写控制器。
<?php
namespace TdevExtend;
use Shopware\Components\Plugin;
class TdevExtend extends Plugin
{
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Index' =>
'onPostDispatch'
];
}
public function onPostDispatch(\Enlight_Event_EventArgs $args)
{
$this->container->get('Template')->addTemplateDir(
$this->getPath() . '/Resources/views/'
);
}
}
?>
我正在尝试通过自己的插件扩展模板 frontend/home/index.tpl
。
这是我的根文件:
<?php
namespace TdevExtend;
use Shopware\Components\Plugin;
class TdevExtend extends Plugin
{
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin' =>
'onDetailPostDispatch'
];
}
public function onDetailPostDispatch(\Enlight_Event_EventArgs $args)
{
$this->container->get('template')->addTemplateDir(
$this->getPath() . '/Resources/views/'
);
return __DIR__ . '/Controllers/Frontend/MyPlugin.php';
}
}
?>
这是我的控制器 MyPlugin.php 在目录 Controllers\Frontend
中public function preDispatch()
{
/** @var \Shopware\Components\Plugin $plugin */
$plugin = $this->get('kernel')->getPlugins()['TdevProductTab'];
$this->get('template')->addTemplateDir($plugin->getPath() . '/Resources/views/');
}
文件夹中的模板 Resources\views\frontend\home\
{extends file="parent:frontend/home/index.tpl"}
{block name='frontend_index_content'}
<div class="">Hello world!</div>
{$smarty.block.parent}
{/block}
我已阅读official documentation and researched plugins examples plugins examples
installing/reinstalling 插件在后端创建缓存并删除 var/cache
中的手动文件夹。但是没有任何帮助。
您可能希望在 getSubscribedEvents 中使用事件 Enlight_Controller_Action_PostDispatchSecure_Frontend_Index
而不是 Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin
。
您正在使用活动 Enlight_Controller_Dispatcher_ControllerPath_Frontend_MyPlugin
。在寻找控制器 MyPlugin
时,Shopware 将创建此事件。所以在使用这个事件的时候需要自己写Controller。但我猜你想要的是上面提到的事件。其实你不需要写控制器。
<?php
namespace TdevExtend;
use Shopware\Components\Plugin;
class TdevExtend extends Plugin
{
public static function getSubscribedEvents(){
return [
'Enlight_Controller_Action_PostDispatchSecure_Frontend_Index' =>
'onPostDispatch'
];
}
public function onPostDispatch(\Enlight_Event_EventArgs $args)
{
$this->container->get('Template')->addTemplateDir(
$this->getPath() . '/Resources/views/'
);
}
}
?>