Аналог variable_set в Drupal 9

Опубликовано 2023.02.17 в разделе Drupal.

Функция variable_set() использовалась в Drupal 7 для установки или обновления постоянной переменной. В Drupal 8 и 9 эта функция была удалена и заменена API конфигурации.

Чтобы установить или обновить постоянную переменную в Drupal 9, вы можете использовать функцию config() для доступа к системе конфигурации. Вот пример того, как использовать API конфигурации для установки постоянной переменной:

Colorbox node + Webform + Redirect

Опубликовано 2016.09.18 в разделе Drupal.

Если поставить модули colorbox, colorbox_node и webform - то можно чудесным образом выводить форму в модульном окне. Для этого создавайте вебформу, ставьте чекбокс "Доступен как блок" Затем в нужном месте прописывайте ссылку
  1. <a class="link colorbox-node" href="/node/304?width=420&height=150" >Закажи звонок!</a>
Такая ссылка откроет вебформу(nid=304) в колорбоксе размерами 420х150 пикселей. Однако, если этой форме добавить редирект после сабмита - то он не сработает. Для этого добавьте get параметр destination

Panels + Statistics + Drupal 8

Опубликовано 2016.09.14 в разделе Drupal.

Модуль статистики(тот что в ядре) ""цепляется за ноды в hook_ENTITY_TYPE_view. Если вы выводите ноды через панели(Pages) - то этот хук соответственно не будет работать. Разрулить проблему можно если самому подрубить библиотеку модуля statistics к страницам материалов. Я сделаю это в hook_page_attachments. Код хука
  1. /**
  2.  * Implements hook_page_attachments().
  3.  */
  4. function module_page_attachments(array &$page) {
  5. $request = \Drupal::request()->getRequestUri();
  6. $nid = NULL;
  7. if (substr($request, 0, 6) == '/node/') {
  8. $nid = substr($request, 6);
  9. } else {

Views добавить group by для одного поля

Опубликовано 2016.01.11 в разделе Drupal.

В админке вьюсов группировка(называется агрегацией) отвратительная. Группирует все поля, а толку ноль. Уникализация выборки тоже не работает. Классическая ситуация. Вывод нескольких материалов(например блог) и одного приаттаченного материала к каждому блогу(через entity reference). И если к блогу привязано например 3 материала - то благодаря join в запросе это блог будет выведен трижды. Чтобы это побороть - нужно поальтерить запрос: /** * Implements hook_query_alter(). */ function mymodule_query_alter(QueryAlterableInterface $query) {

Создание своего Token`а

Опубликовано 2014.08.01 в разделе Drupal.

Расширить стандартный набор токенов очень просто. Это необходимо, если вам нужно как-то необычно формировать алиас материала. Для начала создайте модуль. Для начала в нём необходимо объявить hook_token_info. Он будет возвращать названия токенов, их описания и машинное имя токена.
  1. function my_module_token_info() {
  2. $info['tokens']['node']['my_new_token'] = array(
  3. 'name' => t('My node token'),
  4. 'description' => t('New custome node token'),
  5. );
  6. return $info;
  7. }

Программное создание node_reference поля

Опубликовано 2014.08.01 в разделе Drupal.

Добавить такое поле очень просто. Для этого подойдёт стандартный hook_form_alter. Для создания поля типа Node reference нужно создать обыкновенное текстовое поле. А чтобы текстовое поле стало с автокомплитом - в него нужно добавить путь, по которому друпал будет аяксом дергать список подходящих значений. Выглядит это так:
  1. $form['my_author'] = array(
  2. '#type' => 'textfield',
  3. '#title' => 'Автор фото',
  4. '#autocomplete_path' => 'node_reference/autocomplete/node/node_gallery_item/field_coll_photo_author',
  5. );

Создание своего скина для jCarousel

Опубликовано 2014.03.30 в разделе Drupal.

В продолжении статьи о программном выводе jCarousel я расскажу как создать свой скин. Это посложнее, чем поправить css в скине Default, но это Друпалвейное решение, так что используйте его. Для начала нужно создать свой модуль. Подробнее об этом тут и тут Далее объявить в нём hook_jcarousel_skin_info
  1. function mymodule_jcarousel_skin_info() {
  2. $skins = array();

Программный вывод jCarousel

Опубликовано 2014.03.30 в разделе Drupal.

Есть один замечательный модуль для вывода карусели из нод. Называется jCarousel. Этот модуль расширяет Views, позволяя выводить материалы каруселью. Но его можно использовать и отдельно, пользуясь его API. Вызов карусели происходит через темизирующую функцию:
  1. theme('jcarousel', array('items' => $images, 'options' => $options));

Отделение представления от кода

Опубликовано 2012.07.04 в разделе Drupal.

Зачастую в Drupal 7 при написании собственных модулей необходимо отделить логику от представления. Перейдем сразу к практике и напишем простой модуль, который будет выводить три фиктивные ссылки на странице /mymodule. В CMS Drupal логика работы скриптов очень хорошо отделена от представления. Повсеместно используются .tpl.php шаблоны. Например для тех же страниц,блоков,нод и т.д.

Data Base API

Опубликовано 2012.04.14 в разделе Drupal.

API для работы с БД в Drupal 7. На мой взгляд – это самое лучшее API. Поначалу оно может показаться сложным и непонятным. Для работы с БД вы должны понимать, что такое SQL запросы и уметь их писать.  Drupal 7 понимает как обыкновенные SQL запросы(как в Drupal 6), так и построенные с помощью API.

Вы также можете почитать на эту тему статью, описывающую работу с БД в Drupal 7.

Начнем с простого select.

Извлечём nid всех нод с типом page.