Главная Новости

Поддержка токенов для своей сущности в Drupal

Опубликовано: 30.10.2017

Сегодня мы поговорим о том, как сделать поддержку токенов для своей сущности. Как и в случае с предыдущим уроком, в котором я рассказывал как связать свою сущность с Views , у нас будет два способа решения данной задачи, один - с помощью модуля Entity API , второй - самописный код.

Способ 1

Данный способ очень прост, включаем модуль Entity tokens , который входит в комплект Entity API и поддержка токенов обеспечена.

Способ 2

Первым делом имплементируем хук hook_token_info() :

/** * Implements hook_token_info(). */ function product_token_info() { // Описываем новый тип токена. $type = array( 'name' => t('Products'), // Человеко-понятное название токена. 'description' => t('Tokens related to individual products.'), // Описание токена. 'needs-data' => 'product', // Тип данных. ); // Токены для продукта. $product = array(); // id продукта. $product['id'] = array( 'name' => t('Product ID'), 'description' => t('The unique ID of the product.'), ); // Название продукта. $product['title'] = array( 'name' => t('Title'), 'description' => t('The title of the product.'), ); // Ссылка на редактирвоание продукта. $product['edit-url'] = array( 'name' => t('Edit URL'), 'description' => t('The URL of the product\'s edit page.'), ); // Дата создания продукта. $product['created'] = array( 'name' => t('Date created'), 'description' => t("The date the product was posted."), 'type' => 'date', ); // Автор продукта. $product['author'] = array( 'name' => t('Author'), 'description' => t("The author of the product."), 'type' => 'user', ); return array( 'types' => array('product' => $type), 'tokens' => array('product' => $product), ); }

Далее имплементируем хук hook_tokens() с помощью которого наполняем токены данными :

/** * Implements hook_tokens(). */ function product_tokens($type, $tokens, array $data = array(), array $options = array()) { $url_options = array('absolute' => TRUE); $sanitize = !empty($options['sanitize']); $replacements = array(); if ($type == 'product' && !empty($data['product'])) { $product = $data['product']; foreach ($tokens as $name => $original) { switch ($name) { // id продукта. case 'id': $replacements[$original] = $product->id; break; // Название продукта. case 'title': $replacements[$original] = $sanitize ? check_plain($product->title) : $product->title; break; // Ссылка на редактирвоание продукта. case 'edit-url': $replacements[$original] = url('product/' . $product->id . '/edit', $url_options); break; // Автор продукта. case 'author': $name = ($product->uid == 0) ? variable_get('anonymous', t('Anonymous')) : $product->name; $replacements[$original] = $sanitize ? filter_xss($name) : $name; break; // Дата создания продукта. case 'created': $replacements[$original] = format_date($product->created, 'medium'); break; } } // Если найдены токены с префиксом 'author', то добавляем токены, которые хранят // расширенную информацию об авторе. if ($author_tokens = token_find_with_prefix($tokens, 'author')) { $author = user_load($product->uid); $replacements += token_generate('user', $author_tokens, array('user' => $author), $options); } // Если найдены токены с префиксом 'created', то добавляем токены, которые хранят // расширенную информацию об дате создания. if ($created_tokens = token_find_with_prefix($tokens, 'created')) { $replacements += token_generate('date', $created_tokens, array('date' => $product->created), $options); } } return $replacements; }

На этом создание токенов закончено. Чистим кеш и наслаждаемся результатом.

3D стерео фильмы для 5D
rss