PrestaShop 1.7.4 переопределить шаблон администратора - PullRequest
0 голосов
/ 04 октября 2018

Я разрабатываю свой собственный модуль.

Как переопределить шаблон, расположенный в: \ admin \ themes \ default \ template \ controllers \ customer \ helpers \ view \ view.tpl?

Я создал файл в папке моего модуля: \ modules \ my_module_name \ override \ controllers \ admin \ templates \ Customers \ helpers \ view \ view.tpl.

Когда я устанавливаю свой модуль, папка \ override \ controllers \ admin \ templates \ пуста.

1 Ответ

0 голосов
/ 05 октября 2018

Согласно Prestashop DevDocs мы не можем переопределить шаблоны напрямую, поместив файлы шаблонов администратора в папку override нашего модуля.

Переопределение темы из модуля НЕ являетсявозможно и никогда не будет.Если вам это нужно, вы должны вместо этого взглянуть на функцию родительской / дочерней темы.

Есть одна вещь, которую вы можете сделать, - вы можете поместить template файлы в папку override и скопировать ихфайлы в модуле install/reset и удалите эти файлы в модуле uninstall.Чтобы достичь этого, мы можем вызвать наши function к copy переопределения и remove переопределения в install() и 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) Вызывается _addAdminTplOverrides() и _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;
}

Надеюсь, они будут полезны длявы!

...