xandeadx.ru Блог музицирующего веб-девелопера

Drupal

DrupalИзменить дефолтные опции jQuery UI Dialog

Опубликовано в

Пример изменения дефолтных опций всех диалогов из своей темы:

THEMENAME.theme:

/**
 * Implements hook_library_info_alter().
 */
function THEMENAME_library_info_alter(&$libraries, $extension) {
  if ($extension == 'core') {
    $js_path = '/' . drupal_get_path('theme', 'THEMENAME') . '/js/jquery.ui.dialog.defaults.js';
    $libraries['jquery.ui.dialog']['js'][$js_path] = [];
  }
}

js/jquery.ui.dialog.defaults.js:

jQuery.extend(jQuery.ui.dialog.prototype.options, {
  'width': 'auto',
  'modal': true,
  'closeText': Drupal.t('Close')
});

DrupalThird Party Settings — интерфейс хранения дополнительных настроек сущностей и плагинов

Опубликовано в

В Drupal 8 появился унифицированный способ хранения дополнительных настроек в чужих config entities и plugins. Способ называется Third Party Settings.

DrupalИзменение свойств базовых полей

Опубликовано в

В Drupal 8 поля сущности делятся на два типа — базовые (base fields) и настраиваемые (configurable или bundle fields). Базовые поля раньше назывались свойствами (properties), они не имеют ui, прописываются в коде и изменяются тоже с помощью кода. Настраиваемые поля напротив, создаются и изменяются из админки.

Чтобы изменить настройки базового поле, нужно создать сущность типа BaseFieldOverride и подменить ею соответствующий инстанс поля (field definition).

DrupalРасширить существующий виджет своим функционалом

Опубликовано в

Пример добавления нового функционала виджету text_textarea, с помощью которого можно будет включать динамическую высоту поля в зависимости от длины текста.

Реализация состоит из двух частей:

1. Добавление опции в настройки виджета с помощью hook_field_widget_third_party_settings_form
2. Альтер формы виджета с помощью hook_field_widget_form_alter или hook_field_widget_WIDGET_TYPE_form_alter

modulename.module

/**
 * Implements hook_field_widget_third_party_settings_form().
 */

DrupalDrupalgeddon 2018

Опубликовано в

Во всех основных версиях друпала (6, 7, 8) найдена критическая уязвимость, позволяющая удалённо выполнять код любому анонимному пользователю. Дыра находится в компоненте Form API/Render API. По мнению экспертов в течении дня появится эксплоит и автоматизированные средства взлома. Крайне рекомендуется обновить друпал до последней версии.

Поддержка Drupal 6 официально прекращена, но есть свежая версия от комунити - https://github.com/d6lts/drupal/releases/tag/6.42

DrupalДобавить контекстные ссылки своему html элементу

Опубликовано в

Пример добавления контекстных ссылок в произвольный html элемент:

<div class="contextual-links-region">
  <?php
  if ($GLOBALS['user']->uid == 1) {
    $contextual_links = array(
      '#type' => 'contextual_links',
      '#links' => array(
        array(
          'title' => t('Configure'),
          'href' => 'admin/config/system/site-information',
        ),
      ),
      '#pre_render' => array(),
    );
    echo drupal_render($contextual_links);
  }
  ?>
 
  Block content...
</div>

DrupalОтключить в рантайме определённую фронтэнд-библиотеку (library)

Опубликовано в

Пример отключения библиотеки core/drupal.active-link на страницах нод:

modulename.services.yml:

services:
  modulename.subscriber:
    class: Drupal\modulename\EventSubscriber\ModulenameSubscriber
    tags:
      - { name: event_subscriber }

src/EventSubscriber/ModulenameSubscriber.php:

<?php
 
namespace Drupal\modulename\EventSubscriber;
 
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

DrupalПодключение своих js и css файлов в Drupal 8

Опубликовано в

В Drupal 8 немного усложнился процесс подключения своих стилей и скриптов. Теперь все js и css файлы должны быть объединены в так называемые libraries (библиотеки), описаны в файле *.libraries.yml и подключены одним из способов. Начнём по порядку.