php - PrestaShop 1.7.4 覆盖管理模板
问题描述
我正在开发自己的模块。
如何覆盖位于:\admin\themes\default\template\controllers\customers\helpers\view\view.tpl 的模板?
我在我的模块文件夹中创建了文件: \modules\my_module_name\override\controllers\admin\templates\customers\helpers\view\view.tpl 。
当我安装我的模块时,文件夹 \override\controllers\admin\templates\ 是空的。
解决方案
根据Prestashop DevDocs,我们不能通过将管理模板文件override
放在我们模块的文件夹中来直接覆盖模板。
从模块中覆盖主题是不可能的,也永远不会。如果您需要这个,您必须查看父/子主题功能。
您可以做的一件事是您可以将template
文件放在文件override
夹中并将这些文件复制到 moduleinstall/reset
并删除这些文件 module uninstall
。为了实现这一点,我们可以调用我们的function
to copy
override 和remove
override ininstall()
以及uninstall()
Prestashop 中默认提供的函数。
您需要在模块中执行以下提到的步骤来覆盖管理模板。
1) 添加需要在模块__construct()
方法中覆盖的模板文件列表
__construct() 方法
public function __construct()
{
// ..... your other code here ....
// list of template(s) file that needs to be override
$this->admin_tpl_overrides = array(
implode(DIRECTORY_SEPARATOR, array('override', 'controllers', 'admin', 'templates', 'customers', 'helpers', 'view', 'view.tpl'))
);
}
2)view.tpl
在下面路径的模块覆盖文件夹中添加要覆盖的文件。确保已在此文件中完成更改。
modules\{YOUR_MODULE_NAME}\override\controllers\admin\templates\customers\helpers\view
3)修改模块类文件中的install()
和uninstall()
方法。
安装方法
public function install()
{
$addAdminTplOverrides = $this->_addAdminTplOverrides();
return parent::install() && $addAdminTplOverrides /** Other hook you need to register + Method you need to call on install **/;
}
卸载() 方法
public function uninstall()
{
$removeAdminTplOverrides = $this->_removeAdminTplOverrides();
return parent::uninstall() && $removeAdminTplOverrides /** Other hook you need to un-register + Method you need to call on uninstall **/;
}
4)分别在and中调用_addAdminTplOverrides()
and_removeAdminTplOverrides()
方法;在卸载方法之后添加这些功能。install()
uninstall()
private function _addAdminTplOverrides()
{
$module_override_path = $this->getLocalPath().DIRECTORY_SEPARATOR;
$result = true;
foreach ($this->admin_tpl_overrides as $admin_tpl_path) {
$override_file_path = $module_override_path.$admin_tpl_path;
$dest_override_file_path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$admin_tpl_path;
if(file_exists($override_file_path)) {
if (!copy($override_file_path, $dest_override_file_path)) {
$result &= false;
}
} else {
$result &= false;
}
}
return $result;
}
private function _removeAdminTplOverrides()
{
$module_override_path = $this->getLocalPath().DIRECTORY_SEPARATOR;
$result = true;
foreach ($this->admin_tpl_overrides as $admin_tpl_path) {
$dest_override_file_path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$admin_tpl_path;
if(file_exists($dest_override_file_path)) {
if (!unlink($dest_override_file_path)) {
$result &= false;
}
}
}
return $result;
}
5)现在install/reset
你的模块;你可以看到管理模板现在被覆盖了。
从步骤 1 到 5 的完整代码在这里
public function __construct()
{
// ..... your other code here ....
// list of template(s) file that needs to be override
$this->admin_tpl_overrides = array(
implode(DIRECTORY_SEPARATOR, array('override', 'controllers', 'admin', 'templates', 'customers', 'helpers', 'view', 'view.tpl'))
);
}
public function install()
{
$addAdminTplOverrides = $this->_addAdminTplOverrides();
return parent::install() && $addAdminTplOverrides /** Other hook you need to register + Method you need to call on install **/;
}
public function uninstall()
{
$removeAdminTplOverrides = $this->_removeAdminTplOverrides();
return parent::uninstall() && $removeAdminTplOverrides /** Other hook you need to un-register + Method you need to call on uninstall **/;
}
private function _addAdminTplOverrides()
{
$module_override_path = $this->getLocalPath().DIRECTORY_SEPARATOR;
$result = true;
foreach ($this->admin_tpl_overrides as $admin_tpl_path) {
$override_file_path = $module_override_path.$admin_tpl_path;
$dest_override_file_path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$admin_tpl_path;
if(file_exists($override_file_path)) {
if (!copy($override_file_path, $dest_override_file_path)) {
$result &= false;
}
} else {
$result &= false;
}
}
return $result;
}
private function _removeAdminTplOverrides()
{
$module_override_path = $this->getLocalPath().DIRECTORY_SEPARATOR;
$result = true;
foreach ($this->admin_tpl_overrides as $admin_tpl_path) {
$dest_override_file_path = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.$admin_tpl_path;
if(file_exists($dest_override_file_path)) {
if (!unlink($dest_override_file_path)) {
$result &= false;
}
}
}
return $result;
}
希望这些对你有帮助!
推荐阅读
- ios - 让我的 Firemonkey 应用程序 (Tokyo R3) 部署到我的测试设备
- c++ - 在 C++ 中在全局范围内运行代码(是否有更现代的方法)?
- reactjs - 在 React 中在哪里声明我的函数和变量
- flutter - 实现导航器时出现异常。使用不包含 Navigator 的上下文请求的 Navigator 操作
- python - python request.post的语法错误
- types - Ada:子类型转换或调用'Base
- javascript - Selenium WebDriver 网页点击事件不起作用
- html - 样式未应用于角度组件
- css - 动画方向反转时更改 CSS 属性
- c++ - 将 shared_ptr 返回到 C++ 中的基类