Drupal 8+

Создание DisplayExtender плагина для Views

Пример создания простейшего Display Extender плагина для Views.

Шаг 1. Создаем класс плагина в src/Plugin/views/display_extender/ExampleDisplayExtender.php:

<?php

namespace Drupal\MODULENAME\Plugin\views\display_extender;

use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\display_extender\DisplayExtenderPluginBase;

/**
 * Example display extender plugin.
 *
 * @ViewsDisplayExtender(
 *   id = "example_display_extender",
 *   title = @Translation("Example display extender"),
 *   help = @Translation("Example display extender description."),
 *   no_ui =...
Benya

Отправка асинхронных http запросов

Пример кода, который отправляет несколько асинхронных http запросов и обрабатывает результаты когда все ответы получены:

<?php

namespace Drupal\example\DataProvider;

use Drupal\Component\Serialization\Json;
use GuzzleHttp\ClientInterface;
use LogicException;
use function GuzzleHttp\Promise\settle;

/**
 * Receives a data from the API.
 */
class ApiDataProvider {

  /**
   * The HTTP client.
   *
   * @var \GuzzleHttp\Client
   */
  protected $httpClient;

  /**
   * ApiDataProvider constructor.
   *
   * @param \GuzzleHttp\ClientInterface $http_client
   *   The HTTP client...
Benya

QueueWorker. Перемещение обработанных задач в конец очереди

В Drupal 8 имеется инструмент для автоматической обработки очередей по крону. Имя ему QueueWorker. Более подробно о нем можно узнать здесь.

Я же расскажу о том, как сделать так, что бы обработанные задачи перемещались в конец очереди для повторной обработки. Причины для такого поведения могут быть самые разные. Например, ноды определенного типа должны синхронизироваться с внешними сервисами до тех пор, пока эти ноды не будут удалены. Для этого мы при создании ноды создаем 1 раз задачу на синхронизацию, а затем QueueWorker будет их помещать в конец очереди для повторной обработки (...

Benya

Программно выполнить Drush команды

Пример программного вызова Drush команд:

<?php

namespace Drupal\example\Commands;

use Consolidation\SiteAlias\SiteAliasManagerAwareInterface;
use Consolidation\SiteAlias\SiteAliasManagerAwareTrait;
use Drush\Drush;

/**
 * Drush command to install and configure website using "minimal" profile.
 */
class ExampeCommands extends DrushCommands implements SiteAliasManagerAwareInterface {

  use SiteAliasManagerAwareTrait;

  /**
   * Install and configure Drupal.
   *
   * @command example:site:install
   *
   * @aliases example:si
   */
  public function install() {
    $this->...
Benya