Друпалургия

Drupal: Создать свою ajax команду (8)

Пример создания ajax команды для вывода сообщений в консоль браузера.

src/Ajax/ConsoleLogCommand.php:

namespace Drupal\modulename\Ajax;   use Drupal\Core\Ajax\CommandInterface;   class ConsoleLogCommand implements CommandInterface {   protected $message;   /** * Command constructor. */ public function __construct($message) { $this->message = $message; }   /** * {@inheritDoc} */ public function render() { return [ 'command' => 'consoleLog', 'message' => $this->message, ]; }   }

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

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

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

Drupal: Создать свой ajax индикатор прогресса

Пример создания индикатора прогресса с именем toggleClass, который добавляет/удаляет класс у элемента:

(function ($, Drupal) {   /** * Create custom progress type "toggleClass". * @see Drupal.Ajax.prototype.beforeSend() */ Drupal.Ajax.prototype.setProgressIndicatorToggleclass = function () { var $progressTarget = this.progress.target ? $(this.progress.target) : $(this.element); var progressClass = this.progress.class ? this.progress.class : 'ajax-progress-animation';   // Add class $progressTarget.addClass(progressClass);

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

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

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

Красивые release notes на drupal.org

Drupal в рунете - вс, 02/02/2020 - 22:20

Задался я сегодня вопросом, как на drupal.org делают "красивые" release notes. Например https://www.drupal.org/project/jsonapi/releases/8.x-2.1

Красивость в том, что номер issue является ссылкой на issue, а имя пользователя ссылкой на пользователя. Плюс есть разделение по типу issue (bug, task, feature)

Выяснилось, что есть инструмент помогающий в этом. Это drupalorg-cli

Пример использования:

1) Переходим в каталог, где находится .git вашего модуля
2) Запускаем drupalorg rn 8.x-1.0, где 8.x-1.0 это номер ПРЕДЫДУЩЕЙ версии
3) Получаем в ответ что-то вроде

<p><em>Add a summary hereem>p>
<h3>Contributors (1)h3>
<p><a href="https://www.drupal.org/u/ivnish">ivnisha>p>
<h3>Changelogh3>
<p><strong>Issues:strong> 2 issues resolved.p>
<p>Changes since <a href="https://www.drupal.org/project/visually_impaired_module/releases/8.x-1.0">8.x-1.0a>:p>
<h4>Featureh4>
<ul>
  <li><a href="https://www.drupal.org/node/3110474">#3110474 by ivnish:">https://www.drupal.org/u/ivnish">ivnish: Allow choose image or text in the block
ul>
<h4>Taskh4>
<ul>
  <li><a href="https://www.drupal.org/node/3025823">#3025823 by ivnish:">https://www.drupal.org/u/ivnish">ivnish: Fix coding standards
ul>

4) Вставляем этот код в release notes вашего модуля на drupal.org при создании нового релиза.

Выглядит это примерно вот так

  • Drupal 8
  • Drupal 7
  • Разработчикам Автор ivnish Разработка, поддержка и лечение сайтов после заражения
    Категории: Друпалургия

    Drupal: Отправить уведомление о новом заказе в Commerce 2

    Во втором комерце практически все хуки заменили на события, поэтому теперь вместо реализации hook_commerce_checkout_complete() надо подписаться на событие commerce_order.place.post_transition:

    src/EventSubscriber/ModulenameEventSubscriber.php:

    namespace Drupal\modulename\EventSubscriber;   use Drupal\commerce_order\Entity\OrderInterface; use Drupal\state_machine\Event\WorkflowTransitionEvent; use Symfony\Component\EventDispatcher\EventSubscriberInterface;   class ModulenameEventSubscriber implements EventSubscriberInterface {   /**

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

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

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

    Drupal: Функции для работы с адресами в twig

    Функция file_url($uri)

    Возвращает относительный адрес к файлу по его uri. Умеет работать с путями без схемы.

    {{ file_url('public://images/example.jpg') }} {# /sites/default/files/images/example.jpg #} {{ file_url('/images/example.jpg') }} {# /images/example.jpg #} {{ file_url('images/example.jpg') }} {# /images/example.jpg #}

    Функция path($name, $parameters, $options)

    Возвращает относительный адрес по роуту.

    {{ path('entity.node.canonical', {'node':123}) }} {# /node/123 #}

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

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

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

    Drupal: Добавить в основные настройки сайта свою опцию

    Пример добавления в основные настройки сайта поля для ввода телефона:

    1. MODULENAME.module:

    /** * Implements hook_form_FORM_ID_alter(): system_site_information_settings. */ function MODULENAME_form_system_site_information_settings_alter(array &$form, FormStateInterface $form_state) { $form['site_information']['site_phone'] = [ '#type' => 'textfield', '#title' => t('Phone'),

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

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

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

    С девятнадцаткой! Дру!

    Drupal в рунете - ср, 15/01/2020 - 21:17

    С днем рождения, капелька! Ты все лучшеешь. Совершенствуешься.

    Не останавливайся!
    А мы - прикроем.

    Какоой же славныый паа-арень! Та-тара-та-там-там... Друпал.

    ЗЫ - Дрисовы поздравления тут: https://dri.es/happy-nineteenth-birthday-drupal

  • Есть вопрос
  • Статьи и публикации
  • Категории: Друпалургия

    Drupal: Как сделать чтобы все письма отправлялись в html формате (8)

    1. Скачиваем модуль Swift Mailer — composer require drupal/swiftmailer

    2. Включаем — vendor/bin/drush en swiftmailer

    3. На странице admin/config/swiftmailer/messages выбираем формат сообщений HTML и убираем галочку с опции Respect provided e-mail format:

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

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

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

    Обновление drupal.ru до Drupal 8

    Drupal в рунете - вс, 12/01/2020 - 18:02

    Всем привет!

    Мы наконец-то закончили с подготовительными операциями и начали активную стадию по обновлению нашего любимого сайта на Drupal 8. Да, многие уже и не верили, что это когда-нибудь произойдет. Также многие говорили, что "вот когда будет Drupal 8, вот тогда я и буду помогать". Вот и настал этот день

    Итак, что будет представлять из себя новый drupal.ru?

    В сообществе неоднократно обсуждалось, что сейчас всё свалено в кучу. И вопросы новичков (которые почему-то называются "запись в блог"), и вакансии, и публикации. Координатор совместно с активными разработчиками приняли решение, что новый раздел вопросов drupal.ru будет не форумом, а в стиле "вопросов и ответов", взяв всё лучшее от StackOverflow и российского "тостера".

    Очень вовремя к команде присоединился Мирослав Ли взяв на себя разработку основного функционала "вопросов и ответов". Было решено разработать контрибный модуль (мы назвали его "Your own Stack Overflow"), чтобы и у других разработчиков со всего мира была возможность внести вклад в развитие drupal.ru (многоходовочка ). Модуль уже в виде альфа-версии, но работы еще очень много.

    Поэтому я приглашаю всех, у кого есть время и желание, а также навыки разработки модулей для Drupal 8, оказать помощь нашему общему делу. Тестируйте, пробуйте, пишите issues

  • Drupal8
  • Drupal7
  • Есть вопрос
  • Сайт и проект Drupal.ru
  • Категории: Друпалургия

    Drupal: Программно наполнить меню ссылками на термины таксономии

    Пример программного наполнения меню main ссылками на категории из словаря category (повторение функционала модуля Taxonomy Menu).

    src/Plugin/Derivative/TermLinks.php:

    class TermLinks extends DeriverBase {   /** * {@inheritDoc} */ public function getDerivativeDefinitions($base_plugin_definition) { /** @var TermStorageInterface $term_storage */ $term_storage = \Drupal::entityTypeManager()->getStorage('taxonomy_term');

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

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

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

    Drupal: Добавить в меню динамическую ссылку

    Пример добавления в меню main ссылки с динамическим заголовком и адресом. В ней для залогинённых пользователей будем выводить имя пользователя с ссылкой на профиль, а для анонимов ссылку на страницу регистрации.

    src/Plugin/Menu/MyDynamicMenuLink.php:

    class MyDynamicMenuLink extends MenuLinkDefault {   /** * {@inheritDoc} */ public function getTitle() { $current_user = \Drupal::currentUser(); return $current_user->isAuthenticated() ? $current_user->getAccountName() : t('Registration'); }   /** * {@inheritDoc} */

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

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

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

    Drupal: Программная реализация ЧПУ

    Задача — из адреса в формате /catalog/notebooks?price_from=xxx&price_to=yyy, в котором /catalog/notebooks это синоним термина, а ?price_from=xxx&price_to=yyy динамические параметры, сделать человекопонятный адрес в формате /catalog/notebooks/price-xxx-yyy.

    Теория есть у niklan'a, поэтому сразу к коду.

    Для решения надо создать сервис с двумя методами:
    processOutbound() — изменяет исходящие адреса в новый формат

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

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

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

    Drupal: Модуль EAV Field — хранение большого числа характеристик сущности в одном поле

    Несколько лет назад я описывал способы реализации каталога с большим количеством атрибутов товара и одним из способов было использование модели EAV, когда все значения атрибутов хранятся в одной колонке таблицы (в простейшем случае). Есть несколько модулей разной свежести, пытающиеся реализовать это в друпале, но меня ни один не устроил, поэтому родился EAV Field.

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

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

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

    Drupal: Как расширить функционал фильтр-плагина Views? (добавляем возможность фильтровать числовые поля по нескольким значениям)

    Пример добавления возможности фильтровать числовые поля по нескольким значениями (добавления оператора "in").

    1. В папке своего модуля src/Plugin/views/filter создаём класс и наследуем его от класса, который нужно расширить. В этом классе переопределяем нужные методы и по необходимости добавляем свои. Аннотацию плагина добавлять не нужно.

    class ExtendedNumericFilter extends NumericFilter {   /** * {@inheritDoc} */ public function operators() { $operators = parent::operators();   $operators['in'] = [ 'title' => $this->t('Is one of'),

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

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

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

    Drupal: AJAX добавление товара в корзину в Commerce 2

    /** * Implements hook_form_BASE_FORM_ID_alter(): commerce_order_item_add_to_cart_form(). */ function MODULENAME_form_commerce_order_item_add_to_cart_form_alter(array &$form, FormStateInterface $form_state) { $product = $form_state->get('product'); /** @var ProductInterface $product */   $form['actions']['submit']['#id'] = 'add-to-cart-button-' . $product->id(); $form['actions']['submit']['#ajax'] = [ 'callback' => 'MODULENAME_add_to_cart_ajax', 'event' => 'click', 'selector' => ':input[data-drupal-selector="add-to-cart-button-' . $product->id() . '"]',

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

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

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

    Drupal: Выполнить очередь с помощью Batch API

    Пример выполнения очереди products_import с помощью Batch API:

    class ProductsImportForm extends FormBase {   /** * {@inheritDoc} */ public function getFormId() { return 'products_import_form'; }   /** * {@inheritDoc} */ public function buildForm(array $form, FormStateInterface $form_state) { $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Start'), ];   return $form; }   /** * {@inheritDoc} */ public function submitForm(array &$form, FormStateInterface $form_state) {

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

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

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

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

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

    modulename.module

    /** * Implements hook_entity_base_field_info(). */ function modulename_entity_base_field_info(EntityTypeInterface $entity_type) { if ($entity_type->id() == 'taxonomy_term') { $fields = [];   $fields['stored_depth'] = BaseFieldDefinition::create('integer') ->setLabel(t('Depth')) ->setSetting('unsigned', TRUE) ->setDefaultValue(0);   return $fields; } }

    modulename.install

    /**

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

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

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

    Черная пятница — время скидок от TemplateMonster

    Drupal в рунете - сб, 23/11/2019 - 01:29

    В TemplateMonster не могли пропустить главный день скидок! В честь Черной пятницы получите скидку 50% на все шаблоны для дизайна сайтов. С ними вам не нужно быть профессиональным разработчиком, ведь интуитивный интерфейс позволит создать страницы с собственным видением и стилем. Это отличный шанс выбрать тему для своего ресурса по лучшей цене и вывести его в ТОП.

    Получить скидку 50%

    Не медлите, предложение действует с 21 ноября по 3 декабря.

  • Предлагаю решение
  • Сайт и проект Drupal.ru
  • 0 Thanks
    Категории: Друпалургия

    Drupal: Запретить анонимам ставить флаги чаще одного раза в день с одного ip

    1. В админке добавляем флагу текстовое поле field_ip.

    2. Пишем код:

    /** * Implements hook_ENTITY_TYPE_presave(): flagging. */ function modulename_flagging_presave(FlaggingInterface $flagging) { if ($flagging->hasField('field_ip')) { $flagging->set('field_ip', \Drupal::request()->getClientIp()); }   if ($flagging->getFlagId() == 'my_flag' && \Drupal::currentUser()->isAnonymous()) { $flagging_count = \Drupal::entityQuery('flagging') ->condition('flag_id', $flagging->getFlagId())

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

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

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

    Страницы

    Подписка на Друпалургия сбор новостей - Друпалургия