Блог

Категории:  

08.06.2010

В конце 2008 года вышла в мир новая версия Joomla - версия 1.5. Новая версия существенно отличается от предыдущей — не только внешним видом, но и структурой. Во-первых, Joomla стала полноценным фреймворком, а во-вторых, в нее теперь добавлена архитектура MVC (модель-вид-контроллер).

Архитектура MVC позволяет четко разделить данные, обработку действий пользователя и вывод данных на три отдельных компонента:

  • Модель — работает напрямую с данными, будь то выборка данных из базы, обновление или удаление, обычно запускается из контроллера или вида и никогда не выводит никаких данных;
  • Вид — вставляет данные, полученные из модели, в шаблон, может выполнять промежуточные действия в зависимости от того, какой шаблон надо отобразить, какие данные брать из модели и в зависимости от слоя;
  • Контроллер — выполняет задачи (task) пользователя (например, отображает текущий вид или запуск модели для манипуляции данными). Иногда компонент не выполняет вообще никаких задач, кроме собственно отображения текущего вида (например, простой каталог, где есть только список товаров и список категорий).

 

В чем же преимущество создания компонентов посредством MVC перед работой с Joomla 1.0?

Возьмем, к примеру, компонент каталога Joomla 1.0. Компонент создавался, как два файла — catalog.php и catalog.html.php. В файле catalog.php мы делали обработку текущих задач. В зависимости от задачи, которую мы определяли оператором switch, запускалась функция, выполняющая обработку данных, и все данные для пользователя выводились уже в файле catalog.html.php. Если компонент маленький, то, в принципе, в этом нет ничего страшного, но если он вырастал до нескольких тысяч строк — тогда в этом компоненте можно было легко запутаться.

Что же мы получили с выходом Jomla 1.5? Теперь не нужно строить огромный switch, чтобы определить задачу. Чтобы функция запустилась на выполнение, достаточно сделать в контроллере имя функции таким же, как и у нашей задачи, дописав ее, например, следующим образом:

1
2
3
4
5
6
7
8
9
10
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
class CatalogueController extends JController{
function display(){
parent::display();
}
function sayHello(){
echo "Hello";
}
}

Достаточно будет обратится index.php?option=com_catalogue&task=sayHello, чтобы наш контроллер выполнил задачу sayHello.

Далее — представим, что мы допустили ошибку в запросе либо решили изменить запрос. Теперь в таком случае не нужно лазить в дебрях кода catalog.php и искать нужное действие, чтобы отредактировать в нем запрос — достаточно зайти в модель и сделать исправления в необходимом методе.

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

Если же вам нужно задать новую задачу для вашего компонента, достаточно добавить эту задачу, получить объект модели и запустить нужный метод модели (либо добавить новый метод для модели), после чего запустить его на выполнение.

 


Автор: Денеж Александр
Теги: