Серия [статей] по разработке расширения Joomla 3.0: начинаем разработку
Для того, чтобы получить какой-либо хороший рабочий образец для этой серии уроков по разработке компонента на Joomla 3.0, я решил пройтись по самому процессу написания некоторого расширения. Этот компонент будет иметься [в распоряжении] для просмотра и скачивания на сопровождающем [эти уроки] сайте, на который [я] буду ссылаться в этом и будущих уроках данной серии. Моя цель - написать довольно солидный компонент, выходящий [за пределы] простого компонента "Привет мир!" и полностью продемонстрировать ключевые в фактической разработке компонента моменты.
- Автор: Давид Хюрли (David Hurley) 1
- Переводчик: Александр Смирнов
Нулевой шаг: готовим кофе
Опять же, Вам важно начать свой день и проект правильно. Выработайте привычку, некоторый ритм, и когда Вы вскоре будете садиться за работу, Вы обнаружите, что Ваши навыки креативности, концентрирования и написания кода [находятся] наготове. Когда Вы начинаете работать, не пренебрегайте важностью пребывания в правильном умственном настрое.
Первый шаг: напишите начальный план компонента для нужных файлов
Первое, что нужно проделать, это создать грубый обзор данных файлов, папок, таблиц базы данных и связанных [с ними] полей. Для нашего компонента мы будет создавать следующую систему.
Подробные данные компонента
Название: Lendr
Название компонента: com_lendr
Описание: Lendr - это компонент на Boostrap 3.0, который позволяет пользователю создать какой-либо профиль, добавить свои книги в свою библиотечную коллекцию, просмотреть библиотеки других пользователей, востребовать какую-либо книгу в заем, добавить книги в список желаемых книг и зарегистрироваться для того, чтобы попасть в список ожидающих [в очереди на] некоторую определенную книгу.
Начальные функции
Этот новый компонент Lendr предоставит набор следующих возможностей:
- Учетные записи пользователей/начальные профили
- Книги/Библиотеки для пользователей
- Список желаемых книг
- Аренда/Заем какой-либо книги
- Заявка на заем какой-либо книги
- Список ожидания уже арендованной книги
Теперь мы должны записать нашу начальную структуру нужных файлов. Это список не будет полным и будет [скорее всего] определенно изменен по мере нашего продвижения через этот процесс. Наличие некоторого начального плана однако поможет нам поддерживать все в некотором порядке. Вот начальная схема ключевых файлов, необходимых для Lendr.
Начальные файлы
Контроллеры | Модели | Виды | Таблицы | Прочее |
Save | ||||
List | Book | |||
Add | Default | Book | ||
Edit | Library | Wishlist | Book | |
Lend | Profile | Library | Wishlist | Install |
Delete | Review | Profile | Library | Router |
Wish | Waitlist | Waitlist | Waitlist | XML |
Review | Wishlist | Review | Review | |
Request | ||||
Default |
Теперь, поскольку мы записали это и создали [такой некий] грубый план, мы начинаем создавать эти файлы в нашей структуре папок.
Второй шаг: напишите файлы таблиц данных
Мы начинаем с создания файлов таблиц базы данных. Мы храним их в папке "tables" лицевой части нашего компонента. Для того чтобы освежить в своей памяти как должна быть настроена Ваша местная среда [разработчика], обратитесь, пожалуйста, к нашей первой статье этой серии. Мы создаем каждый их тех описанных в нашем начальном плане файлов. Ниже следует один из этих файлов:
/joomla_root/components/com_lendr/site/tables/book.php
В нашем случае этот файл таблицы содержит единственную функцию "construct". Эта функция предоставляет определенное название таблицы, связанное с этим файлом "JTable" и также определяет в этом файле поле первичного ключа, - ID номер книги "book_id".
Во время создания этих таблиц базы данных будет подобающим начать процесс создания скрипта install.mysql.sql, который будет использован [во время] установки этого компонента в административной панели Joomla. Начало этого файла следует ниже:
/joomla_root/administrator/components/com_lendr/admin/install.mysql.sql
На протяжении процесса создания наших таблиц, мы продолжим добавлять в этот файл. Добавление этих таблиц по мере нашего их создания облегчит процесс компиляции этого компонента для [его] установки.
Третий шаг: начните папку компонента и создание файла
После создания этих таблиц базы данных, мы настраиваем файловую структуру для всего этого компонента. Ниже следует начальная структура папок.
com_lendr/
admin/
controllers/
models/
views/
index.html
install.mysql.sql
lendr.php
site/
assets/
controllers/
helpers/
language/
models/
tables/
views/
index.html
lendr.php
router.php
install.php
lendr.xml
Каждый из этих файлов и папок важен, хотя не все из них обязательны. Мы начнем работать с каждым из этих файлов и содержащимися в них функциями. По ходу мы объясним цель каждого [из них].
Четвертый шаг: напишите файлы установки, корневой файл, контроллеры и контроллеры видов
На этом шаге мы собираемся добавить в несколько файлов [некоторое] содержимое. Сначала мы взглянем на эти файлы установки, затем мы поработаем с некоторыми контроллерами и в заключение мы добавим наши контроллеры видов.
Установочные файлы
Данные файлы корневого уровня - это файлы, используемые [системой] Joomla во время процесса установки [этого компонента]. В папке Вашего компонента они находятся вне папок "site" и "admin". Существует некоторый XML файл, который используется для определения данных компонента и всех связанных [с ним] файлов, меню и языков; и также существует файл install.php. Этот файл install.php содержит некоторое число функций, которые исполняются во время установки. Это название не специфично, но оно должно быть правильно включено в файл XML. Задействовать эти функции не обязательно и даже их присутствие не обязательно, но они могут быть использованы для исполнения дополнительных действий во время установки компонента.
Демонстрационные файлы
2 Этот первый блок кода определяет информацию данного компонента. Эта информация отображается в Вашем менеджере расширений Joomla! и также хранится в таблице данного расширения.
2 Этот блок кода говорит системе Joomla! где находятся SQL файлы данного компонента. Он обрабатывается системой Joomla! во время процесса установки компонента для создания необходимых таблиц базы данных. Заметьте, что Вы можете назначить здесь используемые Вами кодировку знаков и тип драйвера базы данных.
Вы также можете [занести сюда] блок деинсталлирования со схожей структурой для определения какого-либо SQL файла, который будет исполняться во время деинсталлирования.
2 Этот блок определяет директории, которые будут установлены в лицевой части Вашего веб-сайта на Joomla!, в папке /components/ лицевой части компонента. Перечислять все файлы не обязательно, - лишь директории и любые файлы корневого уровня.
2 Это файл скрипта, который определяет набор функций, которые исполняются во время процесса установки. В нашем случае мы назвали такой файл install.php.
2 Этот языковый раздел определяет необходимые языковые файлы. Они будут установлены в языковую папку в корне Joomla! сайта с надлежащим языковым тегом. Здесь мы имеем два языковых файла, один из которых - системный языковый файл этого компонента. Этот языковый файл используется во время установочного процесса и [также] каждый раз, когда где-либо вне этого компонента (например, в менеджере расширений) показывается информация по этому Вашему компоненту.
2 Этот следующий блок определяет данные административной части, - как административное меню, так и файлы административного раздела этого компонента. Для пунктов меню можно ссылаться на изображения. Пути к изображениям относятся к административной части компонента.
Заметьте, что подменю может быть определено, но оно не обязательно.
2 Также внутри администраторского тега находятся как определение файлов и папок, устанавливаемых в административную часть, так и определение устанавливаемых в нее языковых файлов. В нашем примере мы добавили в эти элементы тег директории "admin", чтобы сказать [системе] Joomla! на какую папку в пакете установки следует для этого ссылаться. Название может быть любым, на Ваш выбор. Этот (второй) системный языковый файл [подробнее] объяснен при прохождении по следующему файлу и его описанию.
install.php
2 В этом первом кодовом блоке мы определяем класс установки и вспомогательный [класс], которые мы желаем импортировать для помощи находящимся в этом файле установочным функциям.
2 Функция "install" исполняется после завершения установки и обычно может включать сообщение об успешной установке. Текст должен использовать языковые строки, определенные в разделе административных языковых папок в файле XX-XX.com_lendr.sys.ini
2 Функция "update" исполняется когда метод установки определен как "update". Это может быть отличным местом для исполнения некоторых функций, относящихся к дополнительным добавляемым в существующие таблицы колонкам SQL.
2 Названия функций "pre-flight" и "post-flight" говорят сами за себя. Здесь Вы можете определить конкретные функции, которые Вы желаете исполнить либо перед началом установки, либо после ее завершения. Если Вы желаете предоставить другой набор файлов для другой версии [компонента], то обновленные пути на те файлы Вы можете указать в функции "pre-flight". Она может быть использована для исполнения кода SQL, который уникален для находящихся в Вашем компоненте данных (вместо структуры таблиц самого компонента).
Корневой файл (lendr.php)
Находящийся в корневой папке нашего сайта файл lendr.php является первым файлом, распознаваемым и считываемым [системой] Joomla. Этот файл управляет переадресацией заданий другим контроллерам, загрузкой файлов "helper", стилей, JavaScript, плагинов библиотек и других главных частей, необходимых на протяжении всего компонента. Он будет расширен в будущих уроках этой серии.
Этот файл загрузит связанные с этим компонентом таблицы; импортирует любые существующие в группе "lendr" плагины; определит запрошенный конкретным пользователем конкретный контроллер и затем на основании этого запроса исполнит надлежащий контроллер.
Контроллеры
В компоненте [системы] Joomla 3 контроллеры создаются как какой-либо класс с какой-либо отдельной функцией. Обычно название контроллера определеяет задание для этого контроллера. Это - отступление от предыдущих версий Joomla, где какой-либо контроллер был выделен какому-то разнообразию задач, относящихся к какой-либо определенной части компонента. Создание контроллеров с одной исполнительной функцией предоставляет лучшую возможность для связывания контроллеров вместе в единую цепь и формирования пути, действие и ошибки которого легко отслеживать. Ниже находится один из конкретных контроллеров, который мы определим для Lendr, а следом за ним - наш контроллер по умолчанию для некоторого начального функционала.
Демонстрационные файлы
edit.php:
default.php:
Контроллеры вида
В том как работают виды Joomla немного уникальна. Joomla использует некоторый вторичный контроллер для помощи с исполнительным аспектом данных и назначением переменных, используемых в макетах видов. Этот вторичный контроллер находится в папке "views" данного компонента и его часто называют схоже с типом желаемого исполнения (например, html.php для исполнения html, phtml.php для исполнения какой-либо части шаблона, raw.php - для исполнения необработанных данных и так далее). Ниже следует один из контроллеров вида, используемый [нашим компонентом] Lendr.
Демонстрационные файлы
html.php:
2 Этот контроллер вида получает данные определенной книги, основанные на ее ID номере. Функция модели getBook() будет определена на следующем шаге. Заметьте что используемые в макете переменные назначаются непосредственно в текущем объекте. Контроллеры вида могут содержать очень мало логики или очень много логики, в завивимости от обстоятельств. Этот конкретный - минимален [в этом отношении].
raw.php
Этот контроллер вида получает "сырые" (необработанные) данные определенной книги, основанные на ее ID номере.
Пятый шаг: создайте модели
Модели [системы] Joomla работают как большинство систем [с архитектурой] MVC и управляют основной массой манипулирования данных и извлечения данных. Модели [компонента] Lendr будут пристально рассмотрены на следующем уроке, так что здесь мы взглянем только на [их] общую структуру.
Демонстрационные файлы
book.php
2 Опять же, ради простоты, в этом уроке мы оставили в стороне подробности по каждой функции и обратимся к ним на следующем уроке. Важно заметить, что в этом случае мы снова применяем наш собственный класс "default". Этим самым мы можем добавлять в отдельную модель распространенные и общие функции и использовать их в каждой модели.
default.php
2 В нашем контроллере по умолчанию мы осуществляем две вещи. Во-первых, мы предоставляем конкретный контроллер для операции "default", что обычно есть операция, запускаемая в случае, когда не определена никакая другая. При этом все еще выполняется методика Joomla! относительно одного отдельного задания на один котроллер. Этот контроллер по умолчанию будет принимать определенный вид, находить подобающий файл вида, загружать соответствующую модель и получать этот вид. Joomla 3 требует, чтобы какая-либо модель загружалась при каждой загрузке файла вида и выполняя необходимое наименование между видами и моделями мы можем связывать их и назначать их без какого-либо дополнительного кода. Если по какой-либо причине определенная модель не существует, то мы загружаем модель по умолчанию.
Достойно внимания что представляет собой SplPriorityQueue. В PHP - это массив, который является применением специального "heap"-а и который основываясь на приоритете сортирует определенные данные.
Эти модели Joomla являются только двумя [файлами] из [всех] файлов, которые будут созданы для системы компонента Lendr. Другие модели схожи по своей природе и структуре, но они будут подробно написаны на следующем уроке.
Подводя итог началу разработки
Теперь, поскольку мы создали начальную структуру этого компонента, написали таблицы данной базы данных, файлы установки, контроллеры, контроллеры видов и модели, наш компонент должен быть готов к установке. Конечно, хотя [в этом компоненте] еще нет [функционала] и он создает всего лишь пустую оболочку, создание устанавливаемого компонента действительно предоставляет некоторое чувство удовлетворения. Удостоверьтесь в том, что Вы исследовали наш репозиторий на GitHub и просмотрели другие, еще не написанные здесь таблицы базы данных, контроллеры, контроллеры видов и модели.
Просмотрите урок полностью с кодом по ссылке http://lendr.websparkinc.com.
2 Скачайте получившийся в результате этого урока компонент.
На следующем уроке мы углубимся в сам функционал, написанный в разных моделях.
Данная статья - второй урок из пяти в данной серии уроков Давида Хюрли (David Hurley) по разработке компонента Joomla. Пропустили первый урок "Настраиваем сцену"? Познакомтесь с ним по ссылке https://magazine.joomla.org/international-stories-all/articles-in-russian-all/joomla-30-extension-development-series-setting-the-stage-ru
1 Оригинальный текст этой статьи автора Давида Хюрли (David Hurley) на английском языке: https://magazine.joomla.org/issues/issue-feb-2013/item/1062-joomla-30-extension-development-series-beginning-development
2 Данный текст отсутствует в оригинальной статье автора, опубликованной в журнале "Joomla Community Magazine", однако присутствует в тексте этого урока на веб-сайте автора.
Some articles published on the Joomla Community Magazine represent the personal opinion or experience of the Author on the specific topic and might not be aligned to the official position of the Joomla Project
By accepting you will be accessing a service provided by a third-party external to https://magazine.joomla.org/
Comments