У меня есть несколько вопросов.
1-вопрос.
Файл /system/core/controller.php
function __construct($request)
Не ясен метод подключения моделей в backende.
Примеры:
Конструктор форм (бесплатная версия) выбран для примера: $this->name = 'backendiforms' $this->root_url = 'backendiforms' # Условие не выполняется- такого файла нет -> $model_file = '/system/controllers/backendiforms/model.php' # if (cmsCore::isModelExists($this->name)){ $this->model = cmsCore::getModel($this->name); } $this->name = 'backendmycomponent' $this->root_url = 'backendmycomponent' # Условие не выполняется- такого файла нет -> $model_file = '/system/controllers/backendmycomponent/model.php' if (cmsCore::isModelExists($this->name)){ $this->model = cmsCore::getModel($this->name); } # А должно быть $model_file = '/system/controllers/mycomponent/model.php' $this->name = 'content' $this->root_url = 'content' # Условие выполняется не другим контроллером -> $model_file = '/system/controllers/content/model.php' if (cmsCore::isModelExists($this->name)){ $this->model = cmsCore::getModel($this->name); } # А должно быть $model_file = '/system/controllers/mycomponent/model.php'
не верно определяется имя директорий компонента (файл_модель.php) возвращаемые get_called_class() -
поэтому контроллер поумолчанию — content .
Поэтому в сторонних компонентах, модель вызываем в каждом экшене контроллера :
$iforms_model = cmsCore::getModel('iforms'); $my_model = cmsCore::getModel('mycomponent');
Заменив строку:
Функция get_called_class() будет возвращать имя класса backendNameComponent компонента
зачищаем вхождение backend, и определяем имя директории компонента $this->namе = NameComponent. имя файла модели текущего контроллера.
Становится доступным обращение к методам модели текущего контроллера компонента $this->model->,
в классах компонента class backendNameComponent. которое фактически и изначально заложено в функционал.
Но поскольку последний класс будет class cmsAction контроллера, то функция get_called_class() — вернет 'adminaction'
Естественно такого пути к модели нет, и контроллер подключит модель'content'
Очень хотелось что бы Контроллер компонента при инициализации обеспечил подключение файла класса модели, как в class backendNameComponent так и в классе class frontend class NameComponent, и классах cmsAction
2-вопрос.
Не ясно и при инициализации конструктора class cmsModel ,
определяем что возвращаемое имя класса, из которого был вызван метод:
По факту, имена в backende получаем так :
$this->name = 'modelIforms'
$this->name = 'modelMenu'
$this->name = 'modelContent'
$this->name = 'modelMyComponent'
Логично что вхождение строки должно быть model без нижнего подчеркивания:
$this->name = str_replace('model', '', get_called_class());
В итоге имена классов будут
$this->name = 'Iforms'
$this->name = 'MyComponent'
PS//Дописал!
Оставляю текст в таком виде.А то переписывать без конца буду.