Login / Sign Up


Enter site:
Login: 
Password: 


First time here?
 
Register [?]:
Registering allows you:
  • Purchase products from the product catalog and access them any time.
  • Ask questions to another specialists in IT
  • Publish your own Joomla extensions, soft or other products if you are developer or distributor
  • Add interesting weblinks and access them from any place
  • Watch the updates of the site and have special abilities that guests don't have
  • Watch the news of the service and new articles and get knowledge
Choose login:
Your Email:
Enter the result of operation (in digits):
17 + 2 = ? Update

Пишем компонент под Joomla 2.5 - (Часть 1) - Состав компонента PDF Print E-mail
Written by Максим   
Monday, 23 December 2013 01:45
Liked:
29


Did not like: 0

Доброго времени суток, друзья.

Наконец-то я добрался до темы написания компонентов для Joomla 2.5. Пока что мне неизвестен объем данной статьи - судя по теме адаптации меню для Joomla, та вышла довольно обширной. Как бы то ни было, я постараюсь осветить основные вопросы, необходимые для понимания того, как устроены компоненты, и мы вместе с вами пройдем по шагам процесс разработки компонента с нуля, а также посмотрим, как компоненты устроены "изнутри". Я постараюсь изложить на данных страницах свой опыт, который я приобрел при написании компонентов для CMS Joomla.

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

Состав компонента Joomla

Итак, в общем виде компонент Joomla состоит из следующих основных составляющих: это административная часть, или админка (Backend) и публичная, или пользовательская часть (Frontend). Первая предназначена исключительно для разработчика или администратора сайта и невидима для основных посетителей сайта. Она нужна для настройки параметров компонента. Если Вы зайдете в административную панель Joomla, то в выпадающем меню "Компоненты" Вы как раз видите административные части (backend-ы) компонентов. Вторая часть, или frontend, видна и доступна всем пользователям и является "лицом" компонента, поскольку именно она отображается посетителю сайта. В большинстве шаблонов публичной части компонента отводится вся центральная часть, где отображается основная информация сайта. Например, в Joomla один из самых популярных и используемых стандартных компонентов - это com_content, который управляет отображением материалов и статей Joomla и выводит их по центру шаблона в виде текста статьи.

В свою очередь, как административная, так и пользовательская части каждая состоит из более мелких составляющих: это модель (model), представление (view) и контроллер (controller). Они тесно взаимодействуют между собой и образуют так называемую парадигму MVC (model-view-controller).

Я нарисовал небольшое схематичное изображение основных составляющих компонента:

Как видно из рисунка, каждая из частей компонента - как backend, так и frontend могут состоять из множества моделей, представлений и контроллеров. В самом простейшем случае каждая часть желательно должна содержать один контроллер, одну модель и одно представление, но об этом подробнее я расскажу позже. Сейчас попробую объяснить, что представляют собой только что описанные понятия.

Контроллер (controller) - это "сердце" компонента, если так можно выразиться. Контроллер - это специальный PHP-класс, который "принимает" входящий HTTP-запрос пользователя и отвечает за его дальнейшую маршрутизацию к другим частям компонента. Если представлять компонент как чёрный ящик, то контроллер - это вход в компонент. Грубо говоря, когда мы переходим по страницам сайта Joomla, ходим по меню, разделам и т.д. первой частью компонента, с которым мы работаем в данный момент, всегда будет контроллер. Контроллер как бы "доводит" запрос пользователя до более глубинных частей компонента, таких как модель. Контроллер может в какой-то степени являться и выходом из компонента. Поскольку мы можем поместить в контроллер логику, например по проверке каких-то входных данных. Если данные оказываются неверными, компонент может перенаправить свое выполнение представлению (см. далее), отображающему ошибку посетителю сайта.

Модель (model) - это та часть компонента, которая предназначена как правило для получения данных из какого-либо источника (обычно из базы данных), для обработки этих данных и передачи обработанных данных на "выход" - т.е. для отображения пользователю сайта. Таким образом, модель как бы представляет собой промежуточный слой между базой данных и представлением, т.е. той частью компонента, которая отображает данные пользователю. Модель помимо обработки и получения данных может содержать в себе определенную структуру данных, характерную для конкретного компонента. Например, если наш компонент - представляет собой интернет-магазин, у нас могла бы быть модель Товар, которая хранила бы в себе информацию о цене товара, названии товара, категории товара и т.д.

Представление (view) - это часть компонента, отвечающая за отображение данных пользователю, т.е. посетителю сайта. Представление активно работает с соответствующей ему моделью, поскольку для того, чтобы пользователю было что отображать - это что-то нужно откуда-то взять. Откуда взять - это как правило база данных, файл на сервере или другие источники данных. У каждого представления есть связанная с ним модель - чтобы представление могло посредством модели получить данные из базы данных и отобразить их пользователю.

Взаимодействие модели, представления и контроллера

Чтобы лучше объяснить взаимодействие перечисленных выше составляющих компонента между собой, я нарисовал такую схему:

Цифрами я обозначил логическую последовательность действий, происходящих "за кулисами" выполнения компонента Joomla. Давайте представим, что у нас есть компонент с названием Megashop, который добавляет к Joomla функциональность интернет-магазина, и разберем по шагам, что же происходит на примере работы с backend-ом этого компонента. (для frontend части взаимодействие происходит ровно по такой же схеме):

1. Пользователь отправляет запрос контроллеру. Например админ зашел в админку Joomla и выбрал меню "Компоненты" -> "Megashop" -> "Товары". В этот момент контроллер "Товары" получает управление с задачей по умолчанию "отобразить список всех товаров".

2. Контроллер, поняв, какая именно задача от него требуется (отобразить список всех товаров), передает управление соответствующему представлению "Товары". Задача контроллера на этом выполнена - он понял, что ему делать и куда маршрутизировать запрос (а именно к какому представлению).

3. Представление само по себе умеет лишь отображать данные пользователю, но оно не знает, как и откуда их взять.  Для этой цели существует связанная с данным представлением модель "Товары". На шаге 3 представление обращается к модели с "просьбой помочь" - достать данные по товарам из базы данных.

4. Модель "Товары", получив "просьбу от представления" делает свою задачу - получить данные из базы данных, обработать их (если нужно) и вернуть представлению. На шаге 4 выполняется запрос к базе данных Joomla для получения информации о доступных товарах.

5. На этом шаге запрос в базу данных выполнился и результаты возвращаются в модель. После того, как товары получены из базы данных, они возвращаются в виде PHP-массива в модель.

6. Модель возвращает данные представлению. Выполнив свою основную задачу - т.е. получив данные, модель передает их на уровень выше - представлению.

7. Представление формирует страницу для вывода обработанных данных пользователю и возвращает их ему в виде страницы сайта. В результате формирования страницы мы можем получить, например таблицу с перечнем товаров, их названий, характеристик и цены. Поскольку в данном примере мы рассматриваем взаимодействие частей backend-а, то на финальном шаге администратор сайта увидит сформированную представлением таблицу товаров, с возможностью удалить товар, добавить товар и т.д.

Мы рассмотрели взаимодействие составных частей компонента Joomla между собой, в продолжении статьи мы продолжим знакомство с компонентами, а именно с файловой структурой компонента Joomla. Посмотрим что из себя физически представляют модель, контроллер, представление.

В следующей части статьи, мы с Вами познакомимся со структурой каталогов компонента, т.е. как именно располагаются файлы компонента на диске до и после установки компонента на сайт.

Читать продолжение >>

 




Last Updated on Sunday, 02 March 2014 19:09
 
Автор статьи: Damascus
Всего статей: 62
Рейтинг: 3111
Страница Google+: Google

Found Error?

Система Orphus

Site Statistics

Яндекс.Метрика

Our Pages


Allineed.Ru © 2009-2012 - Allineed.Ru - ответы на IT вопросы, статьи о разработке, IT и программном обеспечении. При использовании материалов сайта ссылка обязательна. Использование данного сайта и любой его части означает принятие условий Пользовательского Соглашения.
Allineed.Ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters. The Joomla! name and logo is used under a limited license granted by Open Source Matters the trademark holder in the United States and other countries.