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

Подписка на Лента Блог музицирующего веб-девелопера
URL-адрес: http://xandeadx.ru
Обновлено: 1 час 46 мин. назад

Drupal: Автоматическое удаление файлов после удаления сущности

ср, 05/12/2018 - 07:31

В восьмёрке по умолчанию после удаления сущности не удаляются файлы, залитые в поля типа File. Они не удаляются ни сразу, ни по крону, так как статус файла в таблице file_managed остаётся 1. В версии 8.4 появилась опция make_unused_managed_files_temporary, при включении которой файлы помечаются как временные и удаляются по прошествии 6 часов, однако отредактировать эту опцию из админки нельзя. Включить можно либо с помощью drush:

vendor/bin/drush config-set file.settings make_unused_managed_files_temporary 1 -y

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Отключить автоматический аплоад файлов у определённого поля

сб, 01/12/2018 - 19:58

Способ отключить автозагрузку файлов с помощью js на примере поля field_file:

(function ($, Drupal) { Drupal.behaviors.modulename = { attach: function attach(context, settings) { $('.field--name-field-file .js-form-file', context) .removeOnce('auto-file-upload') .off('.autoFileUpload'); } }; })(jQuery, Drupal);

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Отсылка на сервер дополнительных данных в системном автокомплите

пн, 26/11/2018 - 00:07

Системный автокомплит умеет отправлять на сервер только введённый текст. Послать вместе с текстом какие-то данные, например значение поля или js-переменной, нельзя.

Решение с подменой функции Drupal.ACDB.prototype.search:

autocomplete-fix.js

(function ($) { // Override Drupal.ACDB.prototype.search Drupal.ACDB.prototype.search = function (searchString) { var db = this; this.searchString = searchString;   searchString = searchString.replace(/^\s+|\.{2,}\/|\s+$/g, '');

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Анатомия блоков

вт, 20/11/2018 - 04:37

Block API в восьмёрке подверглось значительным изменениям и усложнениям. Теперь, помимо функционала в ядре, есть три модуля для работы с блоками:

  1. block — основа для программного создания блоков и вывода их на странице
  2. block_content — позволяет из админки управлять пользовательскими блоками, их типами и полями
  3. block_place (скрытый модуль) — расширенный интерфейс управления блоками в духе Panels

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Подменить административное меню для определённой роли

чт, 28/06/2018 - 17:12

Код для роли rid=4 подменяет административное меню management на menu-example:

/** * Implements hook_admin_menu_output_alter(). */ function MODULENAME_admin_menu_output_alter(&$content) { if (user_has_role(4)) { // Remove old links $content['menu'] = array_diff_key($content['menu'], array_flip(element_children($content['menu']))); // Add new links $content['menu'] += admin_menu_links_menu(admin_menu_tree('menu-example')); } }

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Разрешаем открывать в Colorbox инлайновый картинки в тексте ноды

ср, 13/06/2018 - 16:33

В седьмом друпале в настройках Colorbox была опция "Enable Colorbox load", позволяющая ссылкам с классом colorbox-load открываться в колорбоксе. В восьмой версии эту опцию удалили, но её достаточно просто вернуть с помощью кода:

/** * Preprocess variables for page.html.twig. */ function THEMENAME_preprocess_page(&$variables) { \Drupal::service('colorbox.attachment')->attach($variables); }

Сбрасываем кэш.

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Добавить в хлебные крошки заголовок текущей страницы

вт, 12/06/2018 - 21:18

Код добавляет в хлебные крошки заголовок текущей страницы:

/** * Preprocess function for breadcrumb.html.twig. */ function psdhtmlcss_preprocess_breadcrumb(&$variables) { if ($variables['breadcrumb']) { $request = \Drupal::request(); $route_match = \Drupal::routeMatch(); $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject())ж   if ($page_title) { $variables['breadcrumb'][] = [ 'text' => $page_title ]; } } }

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Получить текущий заголовок страницы

вт, 12/06/2018 - 21:14
$request = \Drupal::request(); $route_match = \Drupal::routeMatch(); $page_title = \Drupal::service('title_resolver')->getTitle($request, $route_match->getRouteObject());

Есть ещё такой вариант, более старый:

$request = \Drupal::request(); $route = $request->attributes->get(\Symfony\Cmf\Component\Routing\RouteObjectInterface::ROUTE_OBJECT); $page_title = \Drupal::service('title_resolver')->getTitle($request, $route);

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Рендеринг дерева с помощью Twig

вс, 10/06/2018 - 00:02

Есть twig шаблон, который принимает на вход переменную tree в формате:

$tree = [ 0 => [ 'data' => 'Item 1', 'childrens' => [ 0 => [ 'data' => 'Item 1.1', ], 1 => [ 'data' => 'Item 1.2', ], ], ], 1 => [...] ];

Нужно вывести эту переменную в виде дерева из вложенных списков ul/li.

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Новая критическая уязвимость в Drupal 7 и 8 — SA-CORE-2018-004

ср, 25/04/2018 - 23:13

Сегодня, как и было обещано, вышли свежие версии Drupal 7 и 8 с закрытой критической уязвимостью SA-CORE-2018-004. Уязвимость позволяет выполнять произвольный код на атакуемой системе. Рекомендуется как можно скорее обновить друпал до 7.59 или 8.5.3. На данный момент публичных способов эксплуатации уязвимости нет.

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Программно получить подпункты определённого пункта меню

вс, 08/04/2018 - 20:43

Пример получения подпунктов пункта меню с uuid cc9519f7-66d5-4031-acd9-c6a4a0b00a39:

$menu_tree_builder = \Drupal::menuTree(); $menu_tree_parameters = (new MenuTreeParameters()) ->setRoot('menu_link_content:cc9519f7-66d5-4031-acd9-c6a4a0b00a39') ->excludeRoot() ->setMaxDepth(1); $menu_tree_elements = $menu_tree_builder->load('main', $menu_tree_parameters);

Будет работать как с пользовательскими пунктами меню, так и добавленными через yml файлы.

Комментарии

Похожие записи:

Категории: Друпалургия

CSS: Прозрачный треугольный вырез в элементе

пт, 06/04/2018 - 19:07

Для создания любых вырезов в css есть свойство clip-path, позволяющее ограничить область элемента любой геометрической фигурой или полигоном. Работает во всех современных браузеров кроме IE (caniuse). Пример треугольного выреза в активном пункте меню:

<ul class="menu"> <li class="menu__item">Item One</li> <li class="menu__item menu__item--active">Item Two</li> <li class="menu__item">Item Three</li> </ul>

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Изменить тип всех кнопок с <input type="submit"> на <button type="submit">

ср, 04/04/2018 - 16:39

Часто по дизайну вместо кнопок типа <input type="submit" value="Submit" /> нужны кнопки типа <button type="submit">Submit</button>. Сменить тип достаточно просто:

В папке темы создаём файл input--submit.twig.html:

<button{{ attributes }}>{{ attributes.value }}</button> {{ children }}

Сбрасываем кэш.

Комментарии

Похожие записи:

Категории: Друпалургия

Drupal: Получить экземпляр класса BlockContent по машинному имени его инстанса

ср, 04/04/2018 - 03:45

Дано — машинное имя инстанса контентного блока, добавленного на странице admin/structure/block.

Задача — получить id контентного блока и его экземпляр класса BlockContent.

Решение на примере инстанса блока с именем page_header:

/** @var BlockInterface $block */ $block = Block::load('page_header'); /** @var BlockPluginInterface $block_plugin */ $block_plugin = $block->getPlugin(); $block_content_uuid = $block_plugin->getDerivativeId(); $block_content_id = \Drupal::service('block_content.uuid_lookup')->get($block_content_uuid);

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Отправить контактную форму с помощью AJAX

вт, 03/04/2018 - 23:07

AJAXификация всех контактных форм с поддержкой валидации:

/** * Implements hook_form_BASE_FORM_ID_alter(): contact_message_form. */ function modulename_form_contact_message_form_alter(&$form, FormStateInterface $form_state, $form_id) { $form['actions']['submit']['#ajax'] = [ 'wrapper' => $form['#id'], 'callback' => 'modulename_form_contact_message_form_ajax', 'event' => 'click', ]; }   /** * Contact form ajax submit callback. */ function modulename_form_contact_message_form_ajax(&$form, FormStateInterface $form_state) {

Читать дальше →

Похожие записи:

Категории: Друпалургия

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

вт, 03/04/2018 - 00:09

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

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 });

Комментарии

Похожие записи:

Категории: Друпалургия

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

вс, 01/04/2018 - 01:05

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

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

Читать дальше →

Похожие записи:

Категории: Друпалургия

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

сб, 31/03/2018 - 03:43

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

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

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

/** * Implements hook_field_widget_third_party_settings_form(). */

Читать дальше →

Похожие записи:

Категории: Друпалургия

Drupal: Drupalgeddon 2018

чт, 29/03/2018 - 03:22

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

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

Читать дальше →

Похожие записи:

Категории: Друпалургия

Страницы