Все записи категории ‘Drupal’

Валидация полей на примере параграфа в Drupal 11 с использованием @Constraint

 1 Авг, 2026

При разработке на Drupal рутинная необходимость это — добавление кастомной валидации для полей внутри сущностей. Стандартные средства Drupal (например, валидация через hook_form_alter) не всегда подходят, особенно когда нужно, чтобы валидация работала при любом способе сохранения сущности — через форму, REST API, JSON:API или миграции. Кроме того, в hook_form_alter сложно добраться до полей вложенных сущностей, как например, параграфы, чтобы подсветить ошибку именно там, где она произошла.

В этой статье мы рассмотрим, как добавить валидацию к полю внутри параграфа с использованием системы Constraints (ограничений) Drupal 11, например, чтобы она работала при редактировании node, в которой есть поле с параграфами.

В качестве примера мы проверим, что поле field_ticketland в параграфе типа afisha содержит корректный URL на сайт ticketland.ru.

Читать далее »

Получение списка SQL-запросов через Devel: отладка в нестандартных сценариях

 22 Июл, 2026

В процессе разработки на Drupal иногда возникает необходимость проанализировать, какие SQL-запросы выполняются при обработке того или иного запроса. Стандартный интерфейс Devel (например, панель внизу страницы) отлично справляется с этой задачей для обычных HTML-страниц.

Однако, что делать, если мы имеем дело с AJAX-запросом, загрузкой файла через file_transfer() или другими нестандартными точками входа, где стандартный вывод недоступен? В этой статье мы рассмотрим программный способ получения лога запросов с помощью API модуля Devel, который работает в любом контексте.

Читать далее »

Получить список прав определенной роли

 19 Июн, 2026

Когда прав очень много, не удобно смотреть через админку, что же там выдано в роли. Особенно, если роль точечно добавляет несколько разрешений.

Читать далее »

Выполнение действий после сохранения ноды – обход стандартных ограничений

 22 Май, 2026

Поговорим о ситуациях, когда hook_node_inserthook_node_update гибки не на столько хорошо, и нужны альтернативные способы выполнения кода после полного завершения транзакций или даже после отправки ответа браузеру.

Читать далее »

C5BB 1.0.11 обновления

 11 Апр, 2026

Вышло небольшое, но полезное обновление модуля c5bb. Продолжаю заниматься поддержкой этого проекта.

Читать далее »

Хак с Form API в Drupal 7: создаём HTML5‑поля (number, email, tel) без лишних модулей

 15 Мар, 2026

Drupal 7 предлагает мощный Form API для построения форм. Однако при работе с HTML5‑атрибутами можно столкнуться с неожиданным ограничением: если вы попытаетесь задать тип поля numberemail или tel стандартным способом, Drupal проигнорирует ваше значение и оставит тип text (или тот, который определён через #type).

Читать далее »

Использование модального диалога в Drupal

 13 Янв, 2026

В комплекте Drupal включает в себя jquery dialog, который можно подключить и использовать для ваших целей на фронт-енд. Эта статья о том, как это быстро сделать и начать собственно использовать в своей теме оформления.

Читать далее »

Добавляем кнопку регистрации на форму авторизации

 23 Дек, 2025

В этой статье мы рассмотрим, как добавить кнопку «Register» в форму авторизации в Drupal, которая будет перенаправлять пользователя на страницу регистрации. Мы добавим кнопку в раздел actions формы и используем правильный подход для создания ссылки через маршруты с помощью сервиса маршрутизации.

Читать далее »

Preprocess Media Устарел В Drupal 11.3

 15 Дек, 2025

В Drupal 11.3 произошла важная, но не сразу заметная смена подхода к theming‑слою: классические процедурные preprocess‑функции вида template_preprocess_* были помечены как устаревшие. Это касается и template_preprocess_media(), который многие годы использовался для подготовки переменных в шаблоне media.html.twig.

Читать далее »

Как сформировать отдельный хидер или футер для первой страницы в mPDF на примере Drupal

 6 Дек, 2025

Когда вам нужно создать PDF-документ с использованием библиотеки mPDF, бывает необходимо сделать так, чтобы на первой странице отображался отдельный футер (или хидер), отличающийся от остальных страниц. В этом примере мы рассмотрим, как использовать селектор @page :first для задания различных футеров для первой страницы и всех остальных страниц в вашем документе. Этот подход будет полезен не только для проектов на Drupal, но и для любых других случаев, где используется mPDF.

Читать далее »