Друпалургия

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: Программно наполнить меню ссылками на термины таксономии

    Пример программного наполнения меню 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())

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

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

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

    Страницы

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