05 - Создание административной части компонента joomla 3.x
Административная часть компонента не менее важна чем часть сайта. В ней можно вывести все настройки компонента, которые вам нужны. По сути часть сайта и админки похожи, но для админки есть уже масса готовых структур, таких как сохранить, применить, удалить, сортировка, редактор, постраничная навигация, эти классы нужно только вызвать и подключить. Начнём с точки входа и контроллера, они мало чем отличаются от части сайта. Правда в точке входа мы подключим файл helper.
Стоит отметить что создание и управление админкой стало намного проще. Структура и код остались почти такими же, но зато пользоваться админкой и разбивать структуру вывода данных стало удобнее. Впрочем это можно оценить если сделать большую структуру, мы создадим полноценный функционал, у вас будет всё что есть и в стандартных компонентах joomla 3.x
Откройте файл административной части mycomponents.php и внесите в него следующий код. Код прокомментирован что бы легче было разобраться.
<?php /*Это точка входа в компонент, отсюда начинается старт, и запускается всё остальное, а именно контроллер который в дальнейшем вызывает модель, вид, и шаблон.*/ //Запрет прямого доступа к файлу/странице defined('_JEXEC') or die; //Проверка доступа к компоненту, авторизован пользователь или нет if (!JFactory::getUser()->authorise('core.manage', 'com_mycomponents')) { return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR')); } //Получить экземпляр контроллер с префиксом $controller = JControllerLegacy::getInstance('Mycomponents'); //Выполнение задачи task $controller->execute(JFactory::getApplication()->input->get('task')); //Редирект контроллера, если установленно контроллером $controller->redirect();
Теперь нужно создать контроллер. Он вызовит нам главную страницу нашего компонента mycomponent код прокомментирован. Откройте файл административной части controller.php
<?php // Запрет к прямому доступу. Если кто то попытается обратиться к файлу напрямую, //joomla выдаст пустую страницу. defined('_JEXEC') or die; /** * Главный контроллер компонента mycomponent. Данный * контроллер вызовет из папки controllers файл mycomponents * он то и вызовет всё остальное модель вид. */ class MycomponentsController extends JControllerLegacy { //Возвращение способа отображения, кешируемый или нет public function display($cachable = false, $urlparams = false) { //Добавление файла помощи и пунктов навигации, /helpers/priceleafs.php //что бы пользователь мог перемещаться по страницам компонента, всё меню будет выводиться //в файле helpers. require_once JPATH_COMPONENT.'/helpers/mycomponents.php'; $view = $this->input->get('view', 'mycomponents'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); // Проверка формы редактирования if ( $view == 'mycomponent' && $layout == 'edit' && !$this->checkEditId('com_mycomponents.edit.mycomponent', $id) ) { $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect( JRoute::_('index.php?option=com_mycomponents&view=mycomponents', false) ); return false; } // Отображаем представление parent::display(); //Вернуть значение return $this; } }