1. Слайд.
Добрый день, меня зовут Роман Архаров, в этом докладе я расскажу о том, как
разработать модуль для Друпала, на примере разработки плагина к модулю ССК.
Доклад будет разбит на три части: сначала я расскажу об основнах модульной
системы Друпала, потом в двух словах расскажу о структуре модуля ССК и в конце
Слайд.
Друпал построен по модульному принципу: ядро — компактный набор служебных
функций для работы с БД, документами, пользователями и их правами доступа, и
расширяется функциональность Друпала при помощи модулей. Система модулей в
Друпале базируется на понятии "хук". Слайд. Хуки — это особым образом
именованные функции, которые вызываются ядром Друпала при возникновении
тех или иных событий. Каждый модуль имеет системное имя, которое должно
состоять из латинских букв, цифр, знаков подчеркивания и должно начинаться с
буквы. Имя каждого хука состоит из двух частей: имени модуля и названия
события. При возникновении любого события ядро Друпала в каждом из
установленных модулей ищет и выполняет реализацию соответствующего хука, то
есть функцию с именем навзвние_модуля_название_события. Например, при
возникновении событий связанных с учетной записью пользователя (регистрация,
авторизация, изменение роли пользователя и тому подобных) ядро Друпала
выполняет все функции реализующие хук hook_user, по этому, для того чтобы
модуль с именем example мог среагировать на это событие в нем необходимо
объявить функцию с именем example_user. Список передаваемых в эту функцию
аргументов и пример ее использования, а также информацию обо всех функциях и
хуках доступных в Друпале можно найти на странице официальной документации
http://api.drupal.org или на её русской версии: http://api.drupal.ru.
Все модули Друпала можно разделить на три группы:
• Модули ядра (core), являющиеся основой системы.
• Contributed modules — модули разработанные сообществом Друпал и
распространяемые по лицензии GNU GPL.
• Custom modules — модули разрабатываемые под конкретный проект.
Слайд.
Для программиста Друпал представляет мощный API, решающий большое
количество стандартных задач. АПИ разделен на несколько крупных блоков:
• Schema API — интерфейс абстракции от базы данных. Набор функций для
2. создания, изменения, удаления таблиц, полей и индексов (то есть только
запросы типа CREATE и ALTER TABLE, никаких инсертов и делитов).
Благодаря Схема АПИ программисту не нужно задумывться о том, как
составить запрос к той или иной базе. Программисту вообще не нужно
задумываться о том, с какой базой данных в данный момент работает
Друпал, ему достаточно сформировать массив специального вида, передать
его функциям из Схема АПИ и те сами преобразуют его в запрос к нужно
БД.
• Database API — набор функций, также как и в случае со Схема АПИ,
позволяющий обращаться к базе данных не задумываясь о том, с какой
базой Друпал работает в данный момент. Выборка данных, автоматическое
разбиение на страницы и т.д.
• Localization API — инструменты для создания многоязычных сайтов.
• Node API — Набор функций для определения собственных типов контента.
• Forms API — инструмент для разработки форм. Форма в Друпале
представляет из себя массив, в котором определены тип поля, его параметры
и функции темизации. Любой программист в своем модуле может изменить
любую форму, например, изменить внешний вид поля, удалить его или
добавить свои поля, функции валидации (проверки введенных данных) и т.д.
Кроме того через специальный хук hook_element программист может
объявить новые типы полей, которые в будущем могут использоваться
другими программистами в своих формах. Дальше я буду рассказывать о
разработке плагина для модуля ССК и мы как раз будем создавать поле
нового типа при помощи этого хука.
• Cache API
• Contributed API — кроме программных интерфесов, которые разработали
создатели Друпал, также есть несколько интерфейсов от сторонних
разработчиков. Разработчики модулей Views, CCK, Panels и некоторых
других предоставляют интерфейсы для работы со своими модулями,
причем эти модули настолько удобны и востребованы, что сейчас
невозможно представить Друпал без них.
Слайд.
CCK (Content Construction Kit) — набор инструментов для добавления в
визуальном режиме к существующим типам контента дополнительных полей.
Ядром ССК является модуль Content, реализующий API, с помощью которого
программисты могут разрабатывать свои плагины для этого модуля.
Давайте посмотрим на то как выглядит процесс добавления поля. Тут я на демо-
сайте показываю то как, после того как включен модуль CCK добавить поле к
типу контента, объясняю что такое field и widget. Теперь давайте
3. повнимательнее посмотрим на формы, которые заполняются при добавлении
нового поля. Сначала в первом комбобоксе мы выбираем тип поля (текст, файл,
число), затем мы выбираем то, как это поле будет отображаться в форме
редактирования документа (текстовое поле, комобобокс или чекбоксы) и на
последнем этапе мы определяем то, как введенные данные будут отображаться на
экране при просмотре документа. Эти три формы связаны с тремя понятиями: field,
widget И formatter.
Слайд.
Итак, каждая создаваемая модулем ССК сущность состоит из трех основных
часией:
• поля (field) — это набор служебной информации о создаваемом поле:
колонка или таблица в базе данных, в которой будут храниться вводимые в
поле данные, а также функции валидаторы и сабмиттеры.
• виджета (widget) — интерфейса, который будет выводиться пользователю в
форме создания докумета.
• форматтера (formatter) — набора функций, для вывода данных на экран.
Например, (тут нужно вернуться к демо-сайту) стандартное для модуля CCK
поле Text характеризуется колонкой в базе, виджетами textfield, combobox,
checkbox и форматерром plain text. То есть, фактически, варианты чекбокс,
комбобокс, текстфилд отличаются друг от друга только тем как будет выглядеть
для пользователя форма, в которую вводятся данные, функции проверки введенных
данных и колонка в таблице БД будет одной и той же.
Когда мы разрабатываем свое поле для ССК мы можем сделать всю работу сами, то
есть определить свой филд, свой виджет ти свои форматтеры, но, зачастую, это не
нужно, так как вокруг модуля ССК уже разработано много плагином и зачастую
работа сводится к разработке собственного виджета или форматтера, а филд
берется существующий. Ярким примером может служить модуль ФайлФилд,
который создает поле, с помощью которого можно на сервер закачть файл любого
типа. Кроме того есть модуль ИмаджФилд, который не реализует собственное поле
(field), а только реализует собственные виджеты и форматтеры.
Слайд.
Кажде поле может иметь неограниченное количество виджетов и форматтеров.
Разрабатывая свой плагин для ССК мы можем выполнить всю работу: то есть
разработать свой филд, виджет и форматтер, а можем взять существующий филд и
разработать для него свои виджет и форматтер. Примером такого симбиоза могут
4. служить модули ФайлФилд и ИмаджФилд. Файлфилд реализует инструменты для
закачки файлов на сервер и хранения информации о них в базе данных, а
ИмаджФилд добавляет к этому функционалу дополнительные проверки
закачиваемого файла (разрешение и тип изображения) и выводит в виджете
превьюшку картинки. Точно также, иногда бывает достаточно использовать филд и
виджет реализованные в других модулях и разработать только свой форматтер.
Слайд.
Для примера я покажу как создать простое текстовое поле. Мы здесь проделаем
полные цикл работ: создадам свои поле, видже, форматтер и элемент для Forms
API.
Тут описание каждого хука, которые используются для создания филда, виджета,
элесента и форматтера.