Попросили меня прокомментировать набор используемых мной модудей к Друпалу. А поскольку в данный момент я работаю над сайтом Русский Аппетит (уже почти закончен), то на его примере и попробую разобрать. В основном специфика сайта проявится, конечно, в разделе сторонних модулей.
Буду оперировать понятиями «материал», «пользователь», «синоним», и прочими, считая, что читатель с ними уже знаком. Если же нет, то извините. :) Обращайтесь, поясню. (Хотя, пока что текст не предполагает полной публикации)
Ядро Drupal
Никаким образом не отключаемыми являются пять модулей. Это часть ядра как такового, но тем не менее, оформлены как модули.
Дополнение: Странно, я считал, что их три. Но присмотревшись к списку, увидел, что block и filter тоже входят в ядро. Перенес их описания сюда.
- block
- Все что есть на сайте, помимо основного содержания, обычно выводится в блоках. Суть такая: тема предоставляет регионы (участки на странице сайта), модули представляют блоки, а мы в админке указываем, какой блок в каком регионе выводить. Так же можно указать, кому (по ролям) и где (на каких страницах или при каком условии). Сам этот модуль, помимо управления блоками, предоставляет возможность добавлять простые блоки с текстом (или php-кодом). Все остальные блоки от других модулей. В качестве примеров: меню, опросы, вход (логин) — все обычно блоки.
- filter
- Все содержимое хранится в базе в простом текстовом виде. Но вывести его можно по всякому. Для этого оно перед выводом проходит через фильтры, выбранные для данного материала. Точнее, при создании материала выбирается формат ввода, а он является определенным набором фильтров. Примеры фильтров: ограничение html-тегов (вырезание всех кроме доступных), автоматические ссылки из адресов в тексте, «обсфукация» email'ов, выполнение php-кода (см.ниже модуль php), перевод из BBCode или Wiki разметок в html, вставка картинок смайликов. Да мало ли чего. Ну а этот модуль обеспечивает работу фильтров в целом.
- node
- Основа всей системы Drupal — node, что на русский переведено как «материал». Все страницы, записи, и вообще почти все содержимое сайта является материалами. Они могут быть разных типов, имея разные свойства.
- system
- Я так понимаю, основная часть админки — заслуга этого модуля.
- user
- Вторая ключевая часть это пользователи, роли, права, и так далее.
Встроенные модули
К этой группе я отношу модули, поставляемые вместе с Друпалом, и вероятно, написанные его основной командой разработчиков, но свободно включаемые и выключаемые.
В ней я разделю на три подгруппы: обязательные (без которых трудно представить нормальный сайт), испытанные (которые я где-либо использовал), и неиспытанные (о которых я знаю не более чем их описание в общем списке модулей)
Обязательные встроенные модули
- contact
- Простая контактная форма сайта тем и хороша, что она простая. В админке добавляются одна или несколько категорий, каждая со своими email'ами получателей. И потом либо посетитель выбирает категорию и пишет сообщение, либо категория сразу по умолчанию выбрана. Модуль не обязателен, но включается почти всегда.
- locale
- Если бы нашим родным языком был английский, и сайт мы делали бы только для англоговорящих, этот модуль не потребовался бы. Но увы, обычно нужны сайты на русском, и потому без перевода интерфейса никак.
- menu
- Трудно представить себе нынче сайт без меню. Так или иначе, навигация по сайту всегда нужна, если только он не состоит из пары страничек. В этом и есть основная функция данного модуля — создание меню. Любое созданное меню затем оказывается в списке блоков, где его можно поставить куда надо.
- path
- Если нужны красивые URL'ы, без синонимов не обойтись. Друпал устроен так, что в нем внутри всегда работают базовые пути (например, node/1), но в ссылках и в URL можно увидеть синоним (указав, например, что node/1 имеет синоним about). По умолчанию, синонимы создаются лишь вручную (в админке или в редактировании материалов), но обычно ставится модуль pathauto, и этот процесс автоматизируется.
Испытанные встроенные модули
- blog
- Добавляет тип материала «Запись в блоге». и по странице на каждого пользователя со списком его записей. Простая, но вполне пригодная система блогов одной легкой установкой галочки.
- blogapi
- Дополнение к предыдущему. С ним появляется api для добавления записей в блоги из всяких клиентских программ, не заходя на сайт.
- book
- Представьте, что каждый материал это страница книги. Что от этого получается? Во-первых, иерархическая и порядковая организация страниц (разделы, главы, страницы, и у всего порядок). Во-вторых, оглавление. В-третьих, навигация «вперед-назад» (а так же, «вверх-вниз» по иерархии). И все это благодаря одному этому модулю.
- comment
- Какой же блог или форум без комментариев? Этот модуль позволяет разрешить комментировать определенные типы материалов и предоставляет основной модераторский функционал. Хотя, можно и на уровне конкретного материала разрешить или запретить комментарии.
- dblog
- Сохраняет ошибки и всякие иные события в базу, и дает возможность просмотреть их. Обычно включен всегда, но если сайт работает хорошо и устойчиво, и не нужны лишние нагрузки на базу, то можно выключить.
- help
- Встроенная краткая справка к страницам админки. Не помню, чтоб специально включал или выключал его, а по умолчанию включен. Не особо важен, но и не мешает.
- openid
- Позволяет привязать учетную запись на сайте к openid-аккаунту, и в дальнейшем входить на сайт по openid. Увы, не отменяет необходимость регистрации.
- php
- Фильтр для вставки куда-либо php-кода, обычно в материал или блок.
- poll
- Простенькие опросы, с выводом блока последнего опроса. Вопрос, варианты ответов, подсчет голосов — ничего сложного. Но для РусАппа пришлось его пропатчить, дабы разрешить голосовать посетителям с одинаковыми ip-адресами. Такое решение открывает больше возможностей к накрутке голосов, но в данном случае это вроде бы не столь страшно.
- profile
- Позволяет составить анкету для пользователя, добавив нужные поля для ввода при регистрации (или после нее). Поля не ограничены лишь текстовыми, набор весьма широк, и его вполне хватит на любой нужный профиль пользователя.
- search
- Индексация содержимого сайта и поиск по нему. Увы, без морфологии языков, чисто по совпадению слов. Для нормальной индексации нужно настроить крон. Не позволяет ограничить индексируемое по типам материалов, для этого пришлось поставить search_config. В целом модуль хороший, но для полноценного поиска лучше прикрутить гугль или еще что в этом роде.
- taxonomy
- Таксономия — чуть ли не самое сложное понятие в Друпале. Особенно, когда с ним сталкиваешься в первый раз. Попробую описать по простому, на своем примере. Наиболее общее применение таксономии — категоризация материалов. Создается словарь, в него добавляются несколько терминов (категорий), а затем в материалах выбирается один (или несколько) из них. И потом по термину можно получить все материалы, где он встречается. Частное применение — поле с выбором из нескольких вариантов, но причем варианты могут расширяться. Вот например пол вряд ли имеет смысл делать словарем таксономии, тут всегда два варианта: мужской и женский. А вот страны или города имеет смысл, так как их число не определено.
И еще один пример, наиболее понятный для современного интернета — теги. Да, это тоже отдельный словарь таксономии, пополняемый прямо из редактирования материалов, стоит лишь ввести новый тег.
И все же, что стоит, а что не стоит делать таксономией, это отдельная и большая тема. Это очень удобное средство, но и куда попало его совать не следует. Вот сам это ощутил, когда потребовались не только термины, но и дополнительные данные к ним. Проблему частично решил модуль term_fields, только там все равно нет такого простора, как с полями для материалов. Если термин перестает быть самодостаточным, и требует кучу полей для своего описания, стоит задуматься, не сделать ли его материалом. А в подчиненных материалах добавить ссылку на этот.
- translation
- Средство для многоязычных сайтов, позволяющее переводить содержимое. Материалы получают связи между собой, типа такого, что Материал2 является русским переводом Материала1, и наоборот, Материал1 это английский перевод Материала2. Что позволяет при запросе к любому из них выбрать нужный по текущему языку. К сожалению, модуль не обеспечивает перевод пунктов меню и некоторых других вещей, потому приходилось ставить еще i18n. (В Друпале 7 обещают этот недочет восполнить)
- update
- Проверка наличия новых версий ядра и модулей, с уведомлением об этом администратора. Полезно для тех, кому на первом месте безопасность сайта (так как наиболее часто новые версии выходят при нахождении и исправлении уязвимостей), но на большинстве хостингов весьма замедляет работу админки. Проблема в том, что хостинг часто запрещает обращения со своего сервера куда-то во внешний интернет, и в результате при запросе к обновлениям этот модуль висит, пока не наступит таймаут запроса.
- upload
- Позволяет прикреплять к материалам файлы. Обычно его успешно замещает filefield, как более настраиваемый, но для простоты и этот бывает полезен. Ближайший аналог — аттачи к постам на форумах, так что и тут его стоит включать в сходных ситуациях.
Неиспытанные встроенные модули
Из этого я сам ничем не пользовался еще, потому просто дам краткие описания.
- aggregator
- Из названия вполне ясно, с ним можно вывести на сайте данные из чужих RSS, Atom, и подобных новостных лент.
- color
- Если я верно понял, можно в рамках одной темы задать несколько вариантов цветов, и дать пользователям возможность их менять.
- forum
- Обычный форум, с использованием модулей таксономии (для разделов) и комментариев. Я видел лишь на других сайтах, внешне не особо понравился. Но полагаю, что все вполне темизуемо.
- ping
- Просто цитирую стандартное описание: «Оповещает другие сайты при обновлении вашего сайта.» Как именно он это делает, не знаю.
- statistics
- «Журнал статистики доступа к вашему сайту.»
- syslog
- «Регистрирует и записывает события в системный журнал.»
- throttle
- Вот это по идее интересная штука. Автоматически отключает некоторые модули при большой нагрузке на сайт.
- tracker
- Полагаю, это сродни подписке на тему/запись. Уведомляет пользователей об изменениях.
- trigger
- Не приходилось использовать, но тоже интересная штука. С ним можно вешать некоторые действия на некоторые события. Какие именно? Ну например, опубликовать материал в такое-то время. Отправить почту при регистрации пользователя. И иные подобные вещи.
Сторонние модули
Почти все эти модули спокойно находятся на drupal.org, и переводы к ним на drupaler.ru. Сторонними они являются лишь потому, что не входят в стандартную комплектацию.
Обязательные сторонние модули
Без этих модулей для меня уже почти немыслим ни один друпаловский сайт. Хотя данный сайт пока обходится без cck и views, на нем просто нет разнообразия контента, а для блога и страниц достаточно стандартных модулей.
И я не один так думаю. Не знаю, как про views, но cck и pathauto точно станут встроенными в седьмой версии Друпала.
- cck
- Полное название — Content Construction Kit. Да, это «Набор конструирования содержания». Модуль node хоть и позволяет создавать различные типы материалов, реально они отличаются разве что названием да парой флажков. А cck привносит в тип материала любые поля, каких угодно типов, редактируемые какими угодно виджетами. Построен он тоже по принципу модульности, сам содержит базовую часть для всего этого и некоторые основные типы данных и виджеты. А другие модули могут добавлять сюда и типы данных и виджеты. Ниже в списке есть такие модули.
В результате, в рамках модели данных сайта, тип материала превращается в класс (с набором свойств), а сами материалы в объекты-экземпляры этого класса. Попутно получаем так же форму редактирования материала, со всеми соответствующими полям виджетами.
И не удивительно, что он будет встроен в составе седьмой версии.
- pathauto
- Несмотря на то, что стандартный модуль path позволяет давать материалам (и не только) красивые пути (URL, так же оно называется синонимами, но здесь буду называть «пути»), это надо делать вручную. Что хорошо для уникальных материалов, как например эта страница, но плохо для типичных и многочисленных, например записи в блоге. Не стоит заставлять пользователя придумывать и вводить пути на сотни материалов, но красивыми их сделать нужно. А поскольку обычно все такие пути имеют некоторую общую структуру, то легко написать шаблон для них, и по нему автоматически генерировать. Что, собственно, и делает pathauto. В его настройках пишутся шаблоны по типам материалов, словарям, и для профилей пользователей, а далее все пути создаются автоматически. Данные для шаблонов берутся через модуль token, о нем смотрите ниже.
Приведу пример: записи в блог на моем сайте имеют шаблон «blogs/[user-name]/[nid]». В него вставляются имя автора и уникальный id материала (ведь пути должны соблюдать требование уникальности).
- token
- Требуется для pathauto и некоторых других модулей. Сам по себе это скорее посредник, и довольно интересный. Токен — это вот та самая строка в квадратных скобках, что была в примере шаблона. Модуль token обрабатывает шаблоны (и ему неважно, кто их дает), собрав от других модулей все, что они могут предоставить. Во встроенных нет его поддержки, и потому токены [user-name] и [nid] он сам же и предоставляет. А вот например cck дает токены для содержимого всех созданных в нем полей, чем мы и можем пользоваться в шаблонах.
- transliteration
- К сожалению, русский язык не родной для компьютеров. Правильнее сказать, они создавались без учета русского языка. Равно как и без учета всех остальных, кроме английского. В итоге мы наблюдаем случаи, когда файловые системы серверов не очень любят русские имена файлов, браузеры не очень любят русские символы в урлах, и так далее. Да и лично мне привычнее и спокойнее, когда все адреса не содержат лишних символов. Данный модуль автоматически переводит в транслит все имена закачиваемых файлов, а так же данные, вставляемые в шаблонах pathauto.
- views
- Этот модуль, в сумме с cck, составляет половину силы Друпала. На мой взгляд, конечно. Официально Views переведено как «Представления», но я про себя продолжаю называть »вид», как впервые встретил (да и короче так).
Итак, если cck — конструктор типов данных, то views — конструктор запросов к данным. Надо получить и вывести все новости? Надо выбрать самых активных пользователей? Все что можно получить из имеющихся данных, по любым фильтрам, с любой сортировкой, с указанием связей с другими данными, и вывести все таблицей, списком, без какой-либо структуры, или по своему указанному шаблону — все это можно с помощью Views. Так же пользователю можно предоставить управление постраничной навигацией, фильтрами, сортировкой. Кажется все это весьма сумбурным, но по интерфейсу все весьма просто.
Кроме того, возможность вывести полученное как блок (вставляемый затем куда угодно) или как страницу, и возможность работать полностью на ajax (обновление данных без перезагрузки всей страницы).
Рекомендуемые сторонние модули
- auto_nodetitle
- Название материала — одно из самых неотъемлемых его свойств. Даже содержание (тело) можно отключить, а название нет. Но с этим модулем можно генерировать их, на основе шаблонов от token. Можно полностью скрыть поле названия от пользователя, а можно и генерировать, только если пользователь оставил его пустым. Как видно, совсем без названия никак не обойтись, можно лишь поручить его заполнение автоматике.
- blocks404
- Не знаю, почему так устроено (не вникал), но по умолчания страница ошибки 404 выводится без каких-либо блоков вообще. Данный модуль очень мелкий, вроде бы менее одного килобайта, но исправляет этот момент, и 404 перестает выделяться из общего вида сайта.
- captcha
- Очень распространенное нынче явление, капча при отправке форм. Хоть она и не спасает полностью, но все же увеличивает порог для роботов-спамеров. Модуль предоставляет общий механизм капчи: привязка к определенным формам, проверка. Конкретные виды капчи предоставляют уже модули второго уровня. Стандартно прилагаются три вида: math, text, image. У себя я поставил только math на комментарии.
- contemplate
- Изначально я ставил этот модуль, чтобы писать шаблоны для типов материалов. В первую очередь он нужен для cck, ведь это его поля может понадобиться как-то хитро вывести, как не задашь в настройках поля. Но на РусАппе я решил попробовать стандартные файлы node-имятипа.tpl.php в папке темы, и мне этого хватило, все поля cck там так же доступны.. Потому включать модуль не было необходимости. Отличия же contemplate в том, что шаблоны могут меняться прямо в админке, без необходимости лезть к файлам темы.
- ctm
- По умолчанию, материал можно привязать (прямо при его редактировании) к любому пункту любого меню. С данным модулем на каждый тип материала можно указать, к каким меню его можно привязать. Если не пометить ни одного, то из редактирования вообще пропадет выбор меню. Удобно, если надо, чтобы не сунули случайно новость в меню или чтобы статьи могли сунуть только в правое меню. Примеры условны, конечно.
- date
- Довольно большой модуль, целиком направленный на работу с датами и временем. Состоит из нескольких частей, которые можно включать по отдельности.
1. API по работе с датами: периоды, сложение, форматирование с учетом локали, и прочее.
2. Эмуляция функций php5 для случая работы на php4.
3. Тип данных Date для cck (с виджетом ручного ввода).
4. Виджет popup-календаря (всплывающего) для cck.
5. Управление форматами дат.
- devel
- Модуль чисто для разработчиков сайта. Довольно много чего умеет, я со всем и не разбирался. Основное, что я оценил, это режим, в котором по клику на любом месте сайта можно узнать, в каких файлах и какими функциями оно срендерено, и какими функциями может быть изменено. Но это лишь малая часть модуля.
- filefield
- Тип данных File для cck, и этим все сказано. Можно настроить допустимые расширения закачиваемого файла, размеры, и папку, где они будут храниться.
- imageapi
- Есть два основных способа обработки картинок и работы с ними: GD2 и ImageMagick. Не буду заострять внимание на их особенностях, но этот модуль позволяет выбрать, с помощью чего будет работать друпал. (подменяя внутренние функции работы с графикой на свои)
- imagecache
- Если нужно автоматически провести над картинками некоторые операции перед их выводом, да еще чтобы эти операции проводились лишь один раз, то этот модуль вам пригодится. В нем можно настроить несколько пресетов, каждый пресет это набор операций над картинками - масштабирование, обрезание, разворот, и прочее. И далее, если вывод картинки привязан к определенному пресету, то она будет обработана и сохранена в кеше. В случае изменения исходной картинки, она будет обработана заново.
Обчно применяется для получения превью картинок, но операции вовсе не ограничены уменьшением.
- imagefield
- Виджет к filefield, добавляющий еще ограничения на ширину-высоту картинок и показывающий их превью.
- imagefield_crop
- Еще один виджет, расширяющий возиожности imagefield. Выглядит офигительно. :) А по сути, это ручное кадрирование. Закачиваешь большую картинку, и таскаешь по ней прямоугольник, выбирая участок под нужный кадр. По мере таскания сбоку обновляется превью. Оригинал картинки тоже сохраняется, и можно изменить кадр, не закачивая ее заново. Очень полезно для фотогалерей, где критична область картинки для превью.
- imce
- Файловый менеджер, заточенный под картинки. Хотя оперировать можно любыми файлами. Обычно вызывается по кнопке вставки картинки из текстовых редакторов.
- imce_wysiwyg
- Модуль-интегратор, добавляющий в wysiwyg кнопку вызова imce.
- jquery_update
- JQuery встроен в друпал, но обновляется чаще. А так как обычно мы следуем принципу "ничего не трогать в ядре", то на помощь приходит этот модуль. Он всегда содержит последнюю версию JQuery, и заставляет друпал брать ее вместо встроенной версии.
- menu_block
- Стандартные блоки меню включают только всё меню целиком. А часто бывает нужно только первый уровень, или только второй (зависящий от активного пункта в первом уровне), или еще какой кусок меню. Данный модуль позволяет создать такие блоки.
На примере РусАппа: есть два меню, левое и правое, и 4 блока. 1-й уровень левого (выводится в левой колонке), 1-й уровень правого (в правой колонке), и 2-е уровни обоих меню (в центре). Так как не может обычно активным пункт сразу и там и там, то в центре видим лишь один из двух блоков.
- site_map
- Создает страницу карты сайта на основе меню, подшивок book, таксономии, словом, всего того, что обычно определяет структуру сайта. В большинстве случаев вполне достаточно этого.
- wysiwyg
- Модуль для прикручивания разных редакторов, неважно, визуальных или нет. Раньше для каждого редактора был свой модуль интеграции, а теперь вот собрали все вместе в этакое Wysiwyg API. Поддерживается большое число редакторов, а сам я имел дело только с TinyMCE (на всех рабочих сайтах) и BUEditor (на своем сайте).
Специфичные сторонние модули
- ad
- conditional_styles
- content_access
- content_taxonomy
- login_security
- node_breadcrumb
- r4032login
- search_config
- term_fields
- typograf
- webform
- webformblock