Создание сайтов в Челябинске. Продвижение. Оптимизация

Разработка сайтов, поисковая оптимизация, продвижение, техническая поддержка и обслуживание вебсайтов любой сложности. Быстро, качественно и по разумной цене.

Создание компонента "Каталог" для Joomla 3 (Часть 2)

Разработка компонета для Joomla 3 с нуляПродолжение статьи о создании компонента для Joomla 3.0. В прошлой статье Создание компонента "Каталог" для Joomla (Часть 1) мы разобрались как создавать инсталятор компонента для Joomla и подготовили файловую структуру. В данной статье будем разбираться с административной частью!

3. Шаг - загрузка компонента

Вспомнив, что за это отвечает файл catalogue.php откроем его в редакторе и вставим туда следующие строки:

<?php defined('_JEXEC') or die;

if (!JFactory::getUser()->authorise('core.manage', 'com_catalogue'))
{
  return JError::raiseWarning(404, JText::_('JERROR_ALERTNOAUTHOR'));
}

// Execute the task.
$controller  = JControllerLegacy::getInstance('Catalogue');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();

Теперь разберем по порядку каждую строчку этого файла.

1: проверка контекста запуска, Joomla определяет константу _JEXEC при инициализации приложения, таким образом файл компонента невозможно запустить отдельно от системы.

3 - 6: Проверка прав пользователя, хватает ли у пользователя прав чтобы администрировать данный компонент. Права устанавливаются в глобальных настройках.

9: Создаем экземпляр класса JControllerLegacy.

10: В значении переменной task будет храниться команда контроллеру (по умолчанию display).

11: Осуществляем редирект!

На этом все, дальше работает контроллер.

4. Шаг - Контроллер JControllerLegacy

Создадим файл controller.php и внесем в него такие строки.

<?php defined('_JEXEC') or die;
class CatalogueController extends JControllerLegacy
{
  protected $default_view = 'catalogue';  
  public function display($cachable = false, $urlparams = false)
  {
    require_once JPATH_COMPONENT.'/helpers/catalogue.php';
$view = $this->input->get('view', 'catalogue'); $layout = $this->input->get('layout', 'default'); $id = $this->input->getInt('id'); if ($view == 'item' && $layout == 'edit' && !$this->checkEditId('com_catalogue.edit.item', $id)) { $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_catalogue&view=catalogue', false)); return false; } if ($view == 'category' && $layout == 'edit' && !$this->checkEditId('com_catalogue.edit.category', $id)) { // Somehow the person just went to the form - we don't allow that. $this->setError(JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); $this->setMessage($this->getError(), 'error'); $this->setRedirect(JRoute::_('index.php?option=com_catalogue&view=categories', false)); return false; } parent::display(); return $this; } }

И опять также разбираем по строчно.

1: Запре доступа вне контекста приложения.

2: Объявляем класс CatalogueController.

3: Устанавливаем свойство default_view, оно обычно необходимо если у вас по каким то причинам отличается название стандартного view. Пока может быть не совсем понятно, но это не страшно.

5: Определяем действие контроллера по умолчанию функцию display().

7: Подключаем класс-помошник. Пока он нам не нужен, но потом мы его будем использовать почти во всех view. Так что позаботимся об этом заранее.

9 - 11: Собираем данные из формы. Если вдруг пользователь решил отредактировать какую-то запись то мы должны его перенаправить на соответствующий вид, а точнее на форму редактирования, для это нам понадобятся эти переменные. Более подробно о view и layout поговорим позже.

13 и 21: Два условия для перенаправления пользователя в зависимости от того что он хочет редактировать, запись или категорию. Тут стоит обратить внимание на функцию JController::checkEditId($context, $id) она проверяет доступность записи для редактирования это необходимо для того чтобы два пользователя не редактировали одну и туже запись.

15 - 17 и 24 - 26: Выполняют переадресацию пользователя и вывод ошибки в случае несанкционированного доступа к формам редактирования.

29: Выполняем родительский метод JController::display чтобы подгрузить соответствующий вид и показать пользователю.

30: Возвращаем ссылку на объект класса CatalogueController.

Вывод: контроллер служит пользователю своебразным переключателем между видами и моделями вашего компонента. Благодаря ему компонент может выполнять различные действия в зависимости от запроса пользователя.

Если взглянуть на картинку то станет понятно как работает контроллер, пока что она очень простая, но вскоре мы ее усложним и MVC развернется перед нами во всей красе! Обведенная область показывает то что умеет наш компонент на данный момент.

Joomla MVC

MVC паттерн на примере компонента Joomla

Пока что с контроллером закончим. И в следующей статье разберемся с представлениями (View) и моделями (Model). Знакомство с JView и JModel

Понравилась статья? Возник вопрос? Вступайте в нашу группу и смело задавайте vk.com/saity74

А еще можно обсудить на нашем форуме