Применение системы контроля версий к проектам на Drupal

Drupal очень многое позволяет делать из админки. Создание типов публикаций, представлений, настройка модулей и многое другое. Это сильная сторона и одновременно проклятие проектов на Drupal.

Многие разработчики, особенно когда речь идет о работе над проектом в команде, используют системы контроля версий. Для меня это, к примеру, GIT.

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

Синхронизация мета-данных

В базе хранится разнообразная информация. Бóльшую часть этих данных обычно отслеживать не нужно — это пользовательские данные, публикации, контент сайта, кеши, ревизии и т.п..

Потому применим подход, когда до очередного коммита создаётся сравнительный скрипт изменений структуры и данных в таблицах, отвечающих за структуру сайта. А при деплое изменений — этот скрипт выполняется (например, как часть какого то модуля MyModule.install).

Этот подход вполне успешен и применяется. Какие ещё есть варианты?

Использование одной базы

Иногда используют для dev и production версии сайта одну и ту же базу данных.

Очень спорный подход, позволяет решить сложности с переносом конструктивных изменений сайта, которые хранятся в базе. Но эволюция изменений остаётся за бортом GIT.

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

Модуль Features

И ещё несколько десятков модулей, которые поддерживают концепцию features :)

Идея заключается в том, чтобы генерировать PHP код структурных изменений в виде отдельных модулей. Формируется код не на SQL, а на PHP с использованием разных Drupal-core и contributed APIs.

Как оказывается, многие модули поддерживают Features намеренно или «случайно», работая с базовыми Drupal API. Вы также можете написать свои «мосты» для Features, если разрабатываете что то совсем кастомное и не укладывающееся в типичные структуры данных CMS.

Для чего можно использовать подход, реализуемый модулем Features:

  • Конструктор публикаций, типы публикаций, поля;
  • Коллекции полей;
  • Представления (модуль views);
  • Словари (таксономия);
  • Переменные (выборочные данные таблицы variable);
  • Меню, пункты меню;
  • Настройки модуля context;
  • Настройки модуля node_queue;
  • Права и роли пользователей;
  • Стили изображений;
  • Контент (избранные публикации вместе со всеми данными — картинками, текстами и т.д.)
  • и многое другое.

Вот пример набора доступных компонентов в одном из проектов для создания модуля через feature:

Какие то связи features распознаёт сам. К примеру, достаточно указать тип публикации — и в создаваемый модуль будет добавлены описания полей. Если какие то описания полей уже объявлены в другой «фиче», то создаваемый модуль получит от него зависимость. Другие же связи можно добавлять вручную, выбирая их из списка.

Мало букафф? Читайте есчо !

Rutube: интегрируем как oembed provider source в Drupal

Февраль 28, 2025 г.

Задача - добавить rutube как oembed провайдера в медиа библиотеку, чтобы можно было создать медиа тип Rutube, где будет поле для ввода ссылки. Медиа поля ...

Читать

Корзина не пуста - изменим стиль пункта меню

Август 2, 2023 г.

Использую Drupal Commerce, и в меню у меня есть пункт "Корзина", со ссылкой на корзину пользователя. Хочется, чтобы стиль пункта меню менялся, если корзина не пуста. Я буду использовать hook_preprocess_menu темы, чтобы изменить нужный пункт меню ...

Читать

Модификация тела письма перед отправкой в Drupal

Июнь 9, 2023 г.

Рассмотрим два варианта, как зацепиться к отправляемым письмам и внести туда свои изменения. Первый вариант заключается в прямом изменении тела письма перед отправкой. Для этого мы реализуем hook_mail_alter(&message). MAIL ALTER хук Переменная ...

Читать

Быстро чистим таксономии в Drupal

Апрель 24, 2025 г.

Чтобы через админку почистить длинные словари, нужно много времени, даже если вы используете bulk операции. Потому будем чистить их через код. Разберем пример кода: [crayon-6a611c8d2324f986296789/] Эти две команды удаляют все термины из словаря ...

Читать
 

Комментарии к «Применение системы контроля версий к проектам на Drupal»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: