Этот хук позволит вам создавать токены. Вы можете создать их в глобальной области видимости или использовать объект, такой как узел, или пользователя для заполнения значений.
Вы также должны использовать, hook_token_list()чтобы объяснить, каковы ваши токены.
В отличие от модуля Token, код в ядре Drupal позволяет создавать содержимое токена только в случае крайней необходимости. В Drupal 6 модуль Token запрашивал у модулей, реализующих токены, все значения их токенов hook_token_values(); это означает, что модуль может вычислить значение для токена, которое затем не требуется для заменяемых токенов. В Drupal 7 реализация hook_tokens()receive $tokens- аргумент для замены массива токенов; Затем модуль может вычислить значение токена, зная, что он будет использован.
Функция, которая в Drupal 7 используется для замены токенов на их значения, является token_replace () , которая является единственной функцией, используемой для замены токенов на их значения.
Другое различие между модулем Token для Drupal 6 и кодом в Drupal 7:
В Drupal 7 [node: author] возвращает имя автора; [node: author: mail] возвращает адрес электронной почты, связанный с автором узла, а [node: author: url] возвращает URL-адрес профиля пользователя для автора узла. Другими словами, можно использовать [node: author: xyz], где «xyz» - это один из токенов, возвращаемых для объекта пользователя.
В Drupal 7 нет необработанных токенов; реализация hook_tokens()параметра get, который сообщает ловушке, когда необходимо очистить содержимое токена; когда значение токена не нужно очищать, содержимое не передается функциям check_plain()или filter_xss().
В Drupal 7 нет функции, которая отображала бы список доступных токенов. Если модуль должен отобразить список доступных токенов, он должен построить сам список токенов и показать его в описании поля формы; Кроме того, он может использовать функцию темы, все еще доступную в модуле Token.
Спасибо за предоставленный пример. Они всегда полезны
iStryker
1
Таким образом, маркер будет в приведенном выше примере: [site:city_name]. Убедитесь, что вы очистили кэши или перезапустите memcached, если он используется.
Кенорб
Примечание: $sanitizeв приведенном выше примере не определено, так что вы получите Notice: Undefined variableоб этом.
Кенорб
@kenorb хороший глаз, и я вижу, что этот ответ был с тех пор обновлен :)
WebMW
3
Для Drupal 8, пример использования объекта узла:
Вы можете поместить токены в свой модуль по адресу mymodule.tokens.inc, используя hook_token_info () для их регистрации и hook_tokens () для данных замены.
Если вы хотите создать собственный токен для существующего типа токена, например, для узлов, вам необходимо поместить свой токен в подмассив hook_token_info (). Обратитесь к node.tokens.inc в модуле узла, чтобы увидеть, из чего вы строите.
// We need to include the needed class for tokens.useDrupal\Core\Render\BubbleableMetadata;/**
* Implements hook_token_info().
*/function modulename_token_info(){
$info = array();// Add any new tokens.
$info['tokens']['customtokentype']['customtoken']= t('Telling drupal that you define custom token');// Return them.return $info;}/**
* Implements hook_tokens().
*/function modulename_tokens($type, $tokens, array $data, array $options,BubbleableMetadata $bubbleable_metadata){
$replacements = array();
$simple = $data["customanything"];if($type =='customtokentype'){foreach($tokens as $name => $original){// Find the desired token by nameswitch($name){case'customtoken':
$new = $simple;
$replacements[$original]= $new;break;}}}// Return the replacements.return $replacements;}
Для получения значения токенов в вашей функции необходим код, подобный следующему.
$token = \Drupal::token();
$message_html ="hello my custom token is replaced see it here [customtokentype:customtoken]";// Token data.
$data = array('customanything'=> $tosendtotokens);
$message_html = $token->replace($message_html, $data);
Ответы:
В Drupal 6 вы используете
hook_token_values()
.Этот хук позволит вам создавать токены. Вы можете создать их в глобальной области видимости или использовать объект, такой как узел, или пользователя для заполнения значений.
Вы также должны использовать,
hook_token_list()
чтобы объяснить, каковы ваши токены.Документация token.api довольно понятна.
Я не буду Х публиковать все это, но это должно дать вам идею высокого уровня.
источник
В Drupal 7 код для обработки токенов является частью основного модуля Drupal.
Крюки, которые должны реализовать модули токенов:
Другие модули могут изменять реализацию токена, предоставленную модулем, используя hook_token_info_alter () и hook_tokens_alter () .
В отличие от модуля Token, код в ядре Drupal позволяет создавать содержимое токена только в случае крайней необходимости. В Drupal 6 модуль Token запрашивал у модулей, реализующих токены, все значения их токенов
hook_token_values()
; это означает, что модуль может вычислить значение для токена, которое затем не требуется для заменяемых токенов. В Drupal 7 реализацияhook_tokens()
receive$tokens
- аргумент для замены массива токенов; Затем модуль может вычислить значение токена, зная, что он будет использован.Функция, которая в Drupal 7 используется для замены токенов на их значения, является token_replace () , которая является единственной функцией, используемой для замены токенов на их значения.
Другое различие между модулем Token для Drupal 6 и кодом в Drupal 7:
hook_tokens()
параметра get, который сообщает ловушке, когда необходимо очистить содержимое токена; когда значение токена не нужно очищать, содержимое не передается функциямcheck_plain()
илиfilter_xss()
.источник
Я хотел добавить новый токен в раздел « Информация о сайте» токенов, который называется « Название города» . Вот как я это сделал в Drupal 7.
источник
[site:city_name]
. Убедитесь, что вы очистили кэши или перезапустите memcached, если он используется.$sanitize
в приведенном выше примере не определено, так что вы получитеNotice: Undefined variable
об этом.Для Drupal 8, пример использования объекта узла:
Вы можете поместить токены в свой модуль по адресу mymodule.tokens.inc, используя hook_token_info () для их регистрации и hook_tokens () для данных замены.
Если вы хотите создать собственный токен для существующего типа токена, например, для узлов, вам необходимо поместить свой токен в подмассив hook_token_info (). Обратитесь к node.tokens.inc в модуле узла, чтобы увидеть, из чего вы строите.
mymodule.tokens.inc:
источник
Для Drupal 8
Для получения значения токенов в вашей функции необходим код, подобный следующему.
источник
new
иsimple
в этом примере?