Сниппеты

Получение минимального и максимального значения поля таблицы базы данных

Иногда бывает нужно получить минимальное и максимальное значение какого-нибудь поля. Для примера возьмем поле с ценой field_data_commerce_price, прикрепленное к товару. Соответственно получим минимальную и максимальную цену товара.

Вывод формы в модальном окне (Dialog | jQuery UI) в Drupal 8

Создадим простенькую форму в Drupal 8 и затем будем выводить ее в модальном окне.
Форма будет выводиться по клику на ссылке, которая будет располагаться на созданной программно странице с урлом /custom-page.

Программное добавление региона в тему в коде модуля

Наверняка все знают , как добавлять новые регионы в .info файле темы.
Для этого добавляем в файл строку:


regions[new_region] = Region name

Но иногда бывает необходимость создания региона для темы в своем модуле.
При этом вне зависимости от темы этот регион будет инициализирован.

Изменяем отображение views в зависимости от его количества результатов

Переопределить настройки отображения модулем views результатов выборки можно используя hook_views_pre_render.
Он вызывается после формирования вьюсом запроса к базе данных , но перед тем как результаты отрендерились.

Рассмотрим пример представления, которое выводит ноды с помощью формата строк (row plugin) "Готовая к выводу сущность".

Удаление всех таблиц из базы данных

Удалить все таблицы из базы данных друпал установки, не удаляя саму базу данных, можно двумя способами : нативными mysql командами и с помощью drush.

Это может понадобиться, если у mysql пользователя нету прав на создание и удаление баз данных.
Хотя чаще бывает, что права на удаление бд имеются, а вот на создание новой прав нету.

Расширяем .gitignore файл для друпал 7

Стандартный файл .gitignore, который находится в корневом каталоге друпал 7, игнорирует только каталоги files и private , в которых хранятся файлы, и файлы settings*.php.

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

Использование регулярных выражений для #states в Form API

В друпал 7 в Form API появилось новое свойство #states. Оно делает возможным изменять состоянии элементов форм (unchecked, visible, enabled и т.д.) в зависимости от состояния других элементов.

Это позволяет обходится без написания кастомного javascript кода. Можно в зависимости от конкретного значения поля изменить состояние другого. Но #states не умеет работать с регулярными выражениями.

С помощью небольшого js файла сделаем возможность в качестве значения поля выбирать regex.

Отмена валидации для ajax сабмита

При добавлении ajax для submit кнопки формы , после нажатия на нее выполняется submit и validation функции . При этом потребуется вводить все обязательные поля во избежании появления ошибок .Для тестирования ajax функционала на время разработки можно временно убрать выполнение валидации. Для этого достаточно в параметр #limit_validation_errors записать пустой массив . Также пустой массив запишем и в параметр #submit:

Обновление формы с помощью AJAX button в Drupal 8

Для обновления всей формы в Drupal 8 нужно:

  • Описать класс , расширяющий базовый класс FormBase для создания форм .
  • В методе getFormId() нужно вернуть id формы , в методе buildForm() описать саму форму создаваемую.
  • В параметре #ajax для кнопки указать имя callback функции , которая является публичным методом описанным в этом же классе .
  • В callback методе вернуть форму.

Очищаем данные полей из удаляемого сообщения (Private Message)

По умолчанию данные полей , ассоциируемые с приватными сообщениями , сохраняются в базе данных и после удаления самого сообщения.

Если есть необходимость удалить эти данные (включая и прикрепленные файлы ) , нужно имплементировать hook_privatemsg_message_flush() ,
которому в качестве входного параметра передается объект удаляемого сообщения.