首页 > 解决方案 > 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\ 是空的。

标签: phpprestashopprestashop-1.7

解决方案


根据Prestashop DevDocs,我们不能通过将管理模板文件override放在我们模块的文件夹中来直接覆盖模板。

从模块中覆盖主题是不可能的,也永远不会。如果您需要这个,您必须查看父/子主题功能。

您可以做的一件事是您可以将template文件放在文件override夹中并将这些文件复制到 moduleinstall/reset并删除这些文件 module uninstall。为了实现这一点,我们可以调用我们的functionto copyoverride 和removeoverride 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;
}

希望这些对你有帮助!


推荐阅读