Извиняюсь долго формулировал) Пока фурмулировал на часть вопросов сам ответил)
Компонент в который я пытаюсь понять как он работает можно скачать отсюда
https://github.com/downloads/rvsjoen/joomla-tutorials/com_helloworld-part09.zipМои соображения по контроллерам.
Уважаемый Роберт спасибо за участие. И если Вас не затруднит проверьте пожалуйста и помогите разобраться.
В этом компоненте используются два субконтроллера.
HelloWorldControllerHelloWorld
HelloWorldControllerHelloWorlds
Внимание вопрос: я догадываюсь что модели которые они используют также подтягиваются исходя из их имени. Т.е. HelloWorldControllerHelloWorld
Использует HelloWorldModelHelloWorld а HelloWorldControllerHelloWorlds
Использует HelloWorldModelHelloWorlds. Это если по умолчанию. Ну это наверное правильно просто я не нашел инфы в инете про то, какие модели использую с субконтроллеры.
У нас тут есть код чтобы контроллер HelloWorldControllerHelloWorlds использовал модель HelloWorldModelHelloWorld. Ну наверное в статье это было сделано для того чтобы продемонстрировать что так можно сделать если что.
У меня тупняк начался как раз потому, что модель HelloWorldModelHelloWorlds тут тоже есть. И она используется для представления HelloWorldViewHelloWorlds, которое вызывается по умолчанию по умолчанию если не было передано никаких задач.
Так сейчас начнутся вопросы посложнее.
В компоненте есть два представления:
HelloWorldViewHelloWorlds – используется для вывода списка приветствий с возможность выполнить над выбранным приветствие операций редактирования или удаления, и еще есть возможность добавть приветствие.
HelloWorldViewHelloWorld – используется при редактировании или создании нового приветстрия.
Представление HelloWorldViewHelloWorlds выводит список приветствий и создает тулбар с кнопками удалить редактировать и добавить. Код из HelloWorldViewHelloWorlds для создания тулбара:
protected function addToolBar()
{
JToolBarHelper::title(JText::_('COM_HELLOWORLD_MANAGER_HELLOWORLDS'), 'helloworld');
JToolBarHelper::deleteListX('', 'helloworlds.delete');
JToolBarHelper::editListX('helloworld.edit');
JToolBarHelper::addNewX('helloworld.add');
}
Я уже понял что helloworlds.delete будет вызывать HelloWorldControllerHelloWorlds->delete.
Прочитав тут
https://docs.joomla.org/JController_and_its_subclass_usage_overviewSubcontrollers will handle all CRUD tasks. For tasks such as save, delete & publish that clearly do not need a view, the subcontroller just deletes or updates records and redirects the user back to list view
Операция delete будет выполнена в представлении представление HelloWorldModelHelloWorlds с шаблоном /views/hellowolrds/tmpl/default.php. То после выполнения операции delete будет редирект в этот же default.php.
Теперь интересный вопрос.
У представления HelloWorldViewHelloWorld есть только один шаблон edit.php в папке tmpl. А в приведенном ниже коде
JToolBarHelper::editListX('helloworld.edit');
JToolBarHelper::addNewX('helloworld.add');
Создаются кнопки, которые будут выполнять операции edit и add в контроллере HelloWorldControllerHelloWorld. Операции разные а шаблон один. Почему так? Это так работает Joomla. Не нашел информации про этот закон.