Drupal 8 – создаем кастомный токен
Опубликовано: 11.10.2017
Все прекрасно знаю, для чего нужен токен и, в каких моментах он используется при разработке сайта. Сегодня мы рассмотрим, как программно создать кастомный токен, который будет выводить необходимую нам информацию.
Как всегда, все действия проводим в кастомном модуле, в моем случае он будет называться ex_token .
Файл ex_token.info.yml
name: Example token type: module description: Пример создания кастомного токена в Drupal 8 core: 8.x dependencies: - tokenДалее, нам необходимо реализовать hook_token_info() . Данным хуком мы описываем создание нового токена, а именно тип токена и его возможные варианты.
Урок 11 часть 2 создание блога на Друпал.mp4
Файл 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 .
3.6 - Поиск и метаданные. ЧПУ для друпал.
Хочу заметить, что все токены строятся по принципу [тип токена:вариант токена] , в нашем случае наш токен будет выглядеть как – [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; }Где: