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

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

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

сб, 11/05/2019 - 19:37

Пример добавления для форматтера text_default функционала обрезки текста:

modulename.module

/** * Implements hook_field_formatter_third_party_settings_form(). */ function modulename_field_formatter_third_party_settings_form(FormatterInterface $plugin, FieldDefinitionInterface $field_definition, $view_mode, array $form, FormStateInterface $form_state) { $element = [];   if ($plugin->getPluginId() == 'text_default') { $element['max_length'] = [ '#type' => 'number', '#title' => t('Max length'),

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

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

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

Drupal: Как сделать, чтобы определённый адрес открывался в административной теме

вс, 05/05/2019 - 17:24

Если роут ваш, то просто добавляем для него опцию _admin_route: TRUE:

modulename.routing.yml

modulename.example_route: ... options: _admin_route: TRUE

Если роут объявлен в другом модуле, то альтерим его в EventSubscriber-е:

src/EventSubscriber/ModulenameRouteSubscriber.php

<?php   namespace Drupal\modulename\EventSubscriber;   use Drupal\Core\Routing\RouteSubscriberBase; use Symfony\Component\Routing\RouteCollection;   class ModulenameRouteSubscriber extends RouteSubscriberBase {

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

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

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

Drupal: Открыть форму входа в диалоге

сб, 04/05/2019 - 01:56

Код добавляет необходимые атрибуты ссылке "Login" в "User account menu", чтобы форма входа открывалась в jQuery UI Dialog.

/** * Preprocess function for menu--account.html.twig. */ function THEMENAME_preprocess_menu__account(&$vars) { if (\Drupal::currentUser()->isAnonymous()) { $login_link_url = $vars['items']['user.logout']['url']; /** @var Url $login_link_url */ $login_link_url->mergeOptions([ 'attributes' => [ 'class' => ['use-ajax'], 'data-dialog-type' => 'modal', ], ]);

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

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

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

Drupal: Создание табличной формы с возможностью сортировки

ср, 01/05/2019 - 21:38

Пример формы для сортировки нод по полю field_weight

class ExampleDraggableForm extends FormBase {   /** * {@inheritdoc} */ public function getFormId() { return 'example_draggable_form'; }   /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form['table'] = [ '#type' => 'table', '#header' => ['Title', 'Weight'], '#empty' => 'Empty...', '#tabledrag' => [[ 'action' => 'order', 'relationship' => 'sibling', 'group' => 'node-weight',

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

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

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

Drupal: Добавить вкладку/таб/локальную-задачу/local-task для определённого типа материала

ср, 01/05/2019 - 17:52

Пример добавления вкладки для материалов типа page:

src/Controller/ModulenameController.php

class ModulenameController extends ControllerBase {   public function exampleTabContent(NodeInterface $node) { return ['#markup' => 'Tab content...']; }   public function exampleTabAccess(NodeInterface $node) { return AccessResult::allowedIf($node->bundle() === 'page'); }   }

modulename.routing.yml

entity.node.example_tab: path: '/node/{node}/example-tab' defaults:

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

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

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

Drupal: Как создать свой составной элемент формы

сб, 20/04/2019 - 21:37

Пример создания элемента формы fullname с тремя полями - Фамилия, имя, отчество.

src/Element/FullnameElement.php

<?php   namespace Drupal\modulename\Element;   use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element\FormElement;   /** * @FormElement("fullname") */ class FullnameElement extends FormElement {   /** * {@inheritDoc} */ public function getInfo() { $class = get_class($this);   return [ '#input' => TRUE, '#process' => [ [$class, 'processElement'], ],

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

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

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

Drupal: Как из Javascript выполнить ajax запрос с помощью Drupal Ajax API?

ср, 10/04/2019 - 18:25

Пример выполнения ajax запроса на внутренний адрес path/to/controller:

var ajax = new Drupal.Ajax(false, false, { url: Drupal.url('path/to/controller') }); ajax.execute();

Контроллер должен вернуть набор команд ajax-фреймворка.

Комментарии

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

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

Drupal: Динамический url ajax-ссылок

ср, 10/04/2019 - 02:28

После загрузки страницы для каждой ссылки с классом use-ajax создаётся объект Drupal.Ajax, в котором фиксируется адрес, на который по клику отправится ajax запрос. После создания этого объекта менять href ссылки уже бесполезно, надо вручную лезть в Drupal.ajax.instances и менять options.url у нужного объекта.

Ниже пример того, как можно перед отправкой ajax запроса автоматически менять его адрес на значение атрибута ссылки data-ajax-url:

(function ($, Drupal) {

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

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

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

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 файлы.

Комментарии

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

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

Страницы