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

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

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

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

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

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

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

пн, 05/02/2018 - 00:54

Пример добавления контекстных ссылок в произвольный 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)

вт, 30/01/2018 - 03:44

Пример отключения библиотеки 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

пн, 29/01/2018 - 14:52

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

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

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

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

Drupal: Удалить реализацию определённого хука

пт, 05/01/2018 - 04:00

Пример удаления функции user_node_load():

/** * Implements hook_module_implements_alter(). */ function hook_module_implements_alter(&$implementations, $hook) { if ($hook == 'node_load' && isset($implementations['user'])) { unset($implementations['user']); } }

Комментарии

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

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

Drupal: Добавить определённому типу сущности новое свойство

ср, 03/01/2018 - 15:40

Пример добавления терминам таксономии нового текстового свойства myproperty, которое будет хранится в таблице taxonomy_term_data:

modulename.install:

/** * Implements hook_schema_alter(). */ function modulename_schema_alter(&$schema) { $entity_info = entity_get_info('taxonomy_term'); $entity_table = $entity_info['base table']; $property_name = 'myproperty';   if (!isset($schema[$entity_table]['fields'][$property_name])) { $schema[$entity_table]['fields'][$property_name] = array( 'type' => 'varchar', 'length' => 255,

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

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

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

Drupal: Программно добавить товар в корзину

сб, 16/12/2017 - 19:35

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

$product_id = 123; $quantity = 1; $combine = TRUE;   $product = commerce_product_load($product_id); $line_item = commerce_product_line_item_new($product, $quantity); $line_item = commerce_cart_product_add($GLOBALS['user']->uid, $line_item, $combine);

Комментарии

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

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

Drupal: Динамическая цена доставки типа Flat Rate

сб, 02/12/2017 - 19:44

Во всех мануалах модуля Commerce Shipping советуют создавать отдельный способ доставки (shipping service) на каждую градацию цены, например:

- доставка для заказов дешевле 5000 р.
- доставка для заказов от 5000 до 10000 р.
- ...

У каждого способа будет своя цена и свои условия в rules компоненте.

Однако можно создать один способ доставки, а цену высчитывать динамически с помощью PHP:

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

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

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

Drupal: Изменить расположение public и private директорий в инсталляционном профиле

вс, 05/11/2017 - 18:10

Задача — изменить расположение public:// и private:// директорий при инсталляции друпала из свое профиля.

Сложность — эти директории теперь прописываются только в settings.php и менять их нужно на самой ранней стадии установки друпала.

Решение — в hook_install_tasks_alter() добавляем свой таск, копируем файл настроек при необходимости, изменяем его, сбрасываем кэш:

// profilename.install   use Drupal\Component\Utility\OpCodeCache; use Drupal\Core\Site\Settings;   /** * Implements hook_install_tasks_alter(). */

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

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

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

Drupal: Установка Drupal 8 с помощью Composer и бубна

пн, 30/10/2017 - 02:53

Всё чаще стали предлагать работу на Drupal 8, а я ещё толком за него и не брался. Дай думаю для начала создам свой профиль и переведу блог на восьмёрку, благо совсем недавно вышла версия 8.4.

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

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

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

Страницы