Как переопределить шаблон покупателей из своего модуля?

Как для адреса:

dispatch=profiles.manage&user_type=C

переопределить стандартный шаблон, который находится здесь:

\design\backend\templates\views\profiles\manage.tpl

Пытаюсь в своем модуле изменить вид, по адресу:

\design\backend\templates\addons\MY_ADDON\views\profiles\manage.override.tpl

пытался еще так:

\design\backend\templates\addons\MY_ADDON\overrides\views\profiles\manage.tpl

нет никаких изменений, кеш чистил

хочу сделать так, чтобы не было ссылок на редактирование профиля при определенных условиях, просто выводился общий список, без ссылок на редактирование профилей

Второй вариант похож на правильный.
Вероятнее всего вы не очистили кеш.

во 1х включено автоочистка кеша, во 2х я его чистил с админ панели, в 3х еще удалял папку кеша руками

Возможно Ваш модуль отключен либо же шаблон уже переопределён более приоритетным модулем

Первый вариант работать не будет, но второй должен. Попробуйте еще папку var/cache вручную удалить, а не через админку

о_О действительно кеш… но блин… я же очищал)

1 лайк

можете помочь еще с подключением классов? что то туплю…
вот есть у меня в модуле папка, допустим с именем lib
в ней лежит MyAdditionalClass.php :

namespace MyAdditionalClass;
class MyAdditionalClass {
    public static function methodName(){
        return 'Test Name';
    }
}

в init.php перед fn_register_hooks(…): модуля я пишу:

Registry::get(‘class_loader’)->add(‘lib’, Registry::get(‘config.dir.addons’) . ‘my_module’);

как в func.php я могу использовать свой класс, таким способом?

MyAdditionalClass::methodName();

простая фигня, но мне выдает ошибку, что класс не найден… в func.php пытался добавить конструкцию use MyAdditionalClass;
растолкуйте плз

читаю вот этот раздел https://www.cs-cart.ru/docs/4.9.x/developer_guide/core/coding_standards/php.html#id27 , но что то делаю не так

сделал подпапку в папке lib, назвал Test, перенес в нее файл с классом, и добавил файл autoload.php с содержимым:

spl_autoload_register(function ($class) {
$customBaseDir = ‘’;
$baseDir = $customBaseDir ?: DIR . ‘/’;

$file = rtrim($baseDir, '/') . '/' . str_replace('\\', '/', $class) . '.php';

if (file_exists($file)) {
    require $file;
}

});

в init.php соответственно изменил:

Registry::get('class_loader')->add('Test', Registry::get('config.dir.addons') . 'my_module/lib');

namespace в классе тоже изменил, добавил Test\MyAdditionalClass но что то ничего не изменилось

ооо разобрался, но что то не до конца, как подключить больше чем один класс… хм…

пробовали сделать по примерам других модулей? в том гайде приводится пример модуля Form Builder, и тамже структура указана, кстати не та что у вас

У меня получилось подключить класс

\lib\Test\MyAdditionalClass.php

но т.к. он у меня абстрактный, то получается что

\lib\Test\AMyAdditionalClass.php

namespace Test;

abstract class AMyAdditionalClass {
    public $var_one = null;
    private function __construct(){
         $this->var_one = 'test var one';
    }       

    public static function create($class){
        $profile = class_exists($class) ? new $class() : null;
        return $profile;
    }
}
  • Он подключается, также у меня есть еще один класс, который наследует этот абстрактный:

\lib\Test\MyAdditionalClassOne.php

namespace Test;

use Test\AMyAdditionalClass;

class MyAdditionalClassOne extends AMyAdditionalClass {}

с ним проблема - его не видит… .

т.е. когда я хочу в func.php вызывать:

$profile = MyAdditionalClass::create('MyAdditionalClassOne');
или
$profile_one = new MyAdditionalClassOne();
возвращается null

  • если напрямую вызывать - то ошибка: Error: Class ‘MyAdditionalClassOne’ not found
  • также пробовал в файл \lib\Test\MyAdditionalClass.php после Namespace Добавлять use Test\MyAdditionalClassOne;

я думаю что проблема в autoload.php
когда я комментирую вызов:

Registry::get(‘class_loader’)->add(‘Test’, Registry::get(‘config.dir.addons’) . ‘my_module/lib’);

и делаю так:

require_once 'lib/Test/autoload.php';

внутри этого файла:

spl_autoload_register(function ($class) {
    $prefix = 'Test\\';
    $customBaseDir = '';
    $baseDir = $customBaseDir ?: __DIR__ . '/';
    $len = strlen($prefix);

    $relativeClass = $class == $prefix . 'AMyAdditionalClass' ? substr($class, $len) : $class;
    $file = rtrim($baseDir, '/') . '/' . str_replace('\\', '/', $relativeClass) . '.php';

    if (file_exists($file)) {
        require_once $file;
    }
});

то $file у меня такой:
/path/to/site/app/addons/my_module/lib/Test/AMyAdditionalClass.php
/path/to/site/app/addons/my_module/lib/Test/MyAdditionalClassOne.php

по идее всё верно - пути правильные, но второй файл не видит

ой… туплю…
$profile = class_exists($class) ? new $class() : null;
надо же
class_exists('\Test\\'.$class)