Search
Write a publication
Pull to refresh

Создаем собственный компонент в CMS Joomla 1.5 — Часть 1

Предисловие (читать не обязательно =) ).
Я далеко не гуру Joomla, но в качестве веб-мастера неплохо в ней разбираюсь. И так уж вышло, что среди всех четырех с половиной тысяч расширений для Joomla, опубликованных на их официальном сайте, я не нашел того, который бы в полной мере соответствовал необходимой функциональности разрабатываемого мною сайта. Хотя я и не исключаю, что просто плохо искал.
Ну что поделать, нет, так нет, придется разбираться и писать самому.

Что мне помогло и чем я хочу поделиться с вами.
Для начала немного о том, что можно нарыть в гугле на эту тему:
  1. http://www.webflasher.net/ru/webmasteru/joomla-1-5.html — статья в 4х уроках о том, как создать собственный компонент в Joomla 1.5. Судя по всему, автор особо не заморачивался, взял вот это http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1 загнал текст в промпт и разместил на вышеуказанной странице. И, честно говоря, мне не доставило особого удовольствия, сидеть и разбираться в непонятно как написанном тексте. Уж лучше тогда читать и разбираться с оригиналом на docs.joomla.org. Но все же, хоть какая то информация на родном мне языке была мне полезна на начальном этапе.
  2. Потом мне на глаза попалась вот такая статья — http://kjoomla.com/lessons/35-lessons/45-lesson1.html Чтение и разбор которой был для меня очень и очень полезным. Все достаточно грамотно описано, буквально разжевано. Респект автору. Хотя, в качестве примера взят все тот же, тестовый компонент hello.


Постановка задачи.
Кратко опишу какие задачи я перед собой ставил при создании собственного компонента. Хотя, по ряду причин, они, конечно, будут немного отличатся от реальных. ;)

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

Пример: Допустим у пользователя не заводится автомобиль. Он заходит на сайт, чтобы получить какие-нибудь рекомендации, переходит в эту систему. Далее он видит несколько предложенных вариантов для выбора:
  • ваша машина не заводится,
  • ваша машина заводится, но при трогании с места глохнет,
  • ваша машина заводится, но при движении иногда глохнет.


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


Здесь пользователь опять выбирает наиболее подходящий для него пункт, и таким образом «спускается по дереву» до тех пор, пока не получит конкретную рекомендацию, к примеру — «проверьте, заряжен ли у вас аккумулятор».

Описание нашего компонента.
  1. в базе данных должны быть созданы соответствующие таблицы, хранящие в себе необходимые данные для диагностики проблемы автомобиля,
  2. компонент должен иметь логику по обработке действий пользователя и выборке из БД необходимых данных,
  3. компонент должен иметь шаблон по отображению на странице данных, выбранных из БД.


Как видно по описанию, компонент на самом деле очень простой, но все-таки чуть по сложнее и по интереснее описываемого всеми компонента hello.

Наш компонент мы назовем — UserHelp.

Инструментальные средства.
Начинающим очень рекомендую использовать компонент — EasyCreator. В структуре разрабатываемого вами компонента сразу многое станет понятнее, да и сама разработка будет проще. На рабочий сайт EasyCreator ставить не имеет смысла. По мне, так его стоит использовать только на локале для создания и тестирования своего компонента.
Данный компонент позволяет создавать собственные расширения. Считайте это IDE в веб-интерфейсе. Он вам сразу и все необходимые каталоги создаст и файлы контроллера, и модели, и представления, причем со всем базовым набором кода. Да и сам код будете писать в приятном редакторе. В общем крайне вкусный компонентик, правда бажный немного…
Ну да ладно, не об этом компоненте речь.

Необходимая информация.
Итак, что же есть такого интересного в Joomla 1.5, что нам необходимо знать, чтобы создать собственный компонент.
И это, конечно же, известная всем архитектура Joomla 1.5 — MVC — Model-View-Controller, что в переводе на русский означает — Модель-Представление-Контроллер.
Вообще говоря, когда я в полной мере осознал что это такое, я понял, что на Joomla 1.0 я не вернусь больше никогда.
Итак, что же из себя представляет эта MVC.
Модель, это часть компонента, которая оперирует данными и передает результат в Представление.
Представление, это часть компонента, которая отвечает за вывод данных, который получает из модели.
Контроллер, это часть компонента, которая отвечает за управление всем, реагирует на события, запускаемые пользователем, запускает нужные модели и обрабатывает полученные данные для представления.

Тем, кто читает это все в первый раз, наверное, будет не все понятно. Но на самом деле, все очень просто и удобно.

Хотя, некоторые моменты мне и самому до сих пор не совсем понятны. К примеру, куда лучше помещать логику — в Контроллер или в Модель? Кстати, если кто-нибудь мне сможет однозначно и обоснованно ответить на этот вопрос, буду очень благодарен. =)

Начнем.
Ну что, начнем создавать наш компонент.
Для нашего компонента в каталоге components создадим подкаталог com_userhelp.
В нем будут содержаться следующие файлы и каталоги:
  • userhelp.php — точка входа в компонент, этот файл вызывается самым первым.
  • controller.php — контроллер.
  • userhelp.xml — XML-файл, необходимый для установки компонента.
  • models/userhelp.php — модель.
  • views/userhelp/view.html.php — представление, получающее данные из модели или контроллера передающая их в шаблон.
  • views/userhelp/tmpl/default.php — файл стандартного шаблона, запускаемый автоматически при отображении данных.
  • css/userhelp.css — CSS-файл для стилизации отображения.


Собственно, все эти файлы (за исключением css) будут созданы автоматически, если в описанном мною выше компоненте EasyCreator, вы создадите новый проект, с соответствующим названием — UserHelp.

Надеюсь, что кто-нибудь из хабрачанов будет так любезен и подарит мне инвайт =), ибо очень хочется в своих последующих 2-х или 3-х частях полностью описать процесс создания данного компонента (в одну часть все не уместить). В следующих частях планирую рассказать, как используя Joomla API можно легко работать с БД и XML. А так же, еще в одной части расскажу о том как прикрутить AJAX к своему компоненту, и покажу это так же на примере рассматриваемого компонента UserHelp.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.