Помощь начинающим веб
разработчикам

Drupal 8 – создаем кастомный токен

21.08.2017

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

Как всегда, все действия проводим в кастомном модуле, в моем случае он будет называться ex_token.

Файл ex_token.info.yml

name: Example token
type: module
description: Пример создания кастомного токена в Drupal 8
core: 8.x
dependencies:
  - token

Далее, нам необходимо реализовать hook_token_info(). Данным хуком мы описываем создание нового токена, а именно тип токена и его возможные варианты.

Файл ex_token.module

<?php

/**
* Implements hook_token_info().
*/
function ex_token_token_info() {

  return array(
    # Определили тип токена
    'types' => array(
      'ex_token' => array(
        'name' => t('Ex token'),
        'description' => t('Example custom token'),
      ),
    ),
    # Добавили возможные варианты для типа токена
    'tokens' => array(
      'ex_token' => array(
        'title' => array(
          'name' => t('Title'),
          'description' => t('Ex custom token'),
        ),
      ),
    ),
  );

}

Как вы можете видеть, мы описали новый тип токена под именем Ex token, который содержит единственный вариант – title.

Хочу заметить, что все токены строятся по принципу [тип токена:вариант токена], в нашем случае наш токен будет выглядеть как – [ex_token:title]

Теперь нам необходимо определить действия для каждого из вариантов нашего типа токена – hook_tokens().

Файл ex_token.module

<?php

/**
* Implements hook_token_info().
*/
function ex_token_token_info() {

  return array(
    # Определили тип токена
    'types' => array(
      'ex_token' => array(
        'name' => t('Ex token'),
        'description' => t('Example custom token'),
      ),
    ),
    # Добавили возможные варианты для типа токена
    'tokens' => array(
      'ex_token' => array(
        'title' => array(
          'name' => t('Title'),
          'description' => t('Ex custom token'),
        ),
      ),
    ),
  );

}

/**
* Implements hook_tokens().
*/
function ex_token_tokens($type, $tokens, array $data, array $options, \Drupal\Core\Render\BubbleableMetadata $bubbleable_metadata) {

  $replacements = array();
  if ($type == 'ex_token') {
    foreach ($tokens as $name => $original) {
      # Описываем действия для вариантов типа токена
      switch ($name) {
        case 'title':
          $replacements[$original] = 'custom-example-token';
          break;
      }
    }
  }

  return $replacements;
}

Где:

  • $type – тип токена
  • $tokens – массив с вариантами типа токена
  • $data – массив с сущностью
  • $options – дополнительные параметры, например как код языка (en, ru)
  • $bubbleable_metadata - метаданные

В данном случаем, для варианта токена - title, будет использоваться вывод текста – custom-example-token. Теперь можем активировать данный модуль и проверить его работу.

В качестве примера, я буду использовать данный токен при формировании URL адреса материала.

Хочу заметить, что для создания URL адреса по шаблону используется модуль pathauto

drupal_8_custom_create_token.png

Теперь создадим материал типа «Страница» и посмотрим на его URL

drupal_8_custom_create_token_1.png

Как видим, токен у нас работает. На этом можно закончить.

Скачать модуль используемый в примере

Скачать

Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Добавить комментарий

- Оповестить о новом комментарии.
- Все комментарии
- Только мои комментарии