Este gancho permitirá que você crie tokens. Você pode criá-los no escopo global ou pode usar um objeto como um nó ou um usuário para propagar os valores.
Você também deve usar hook_token_list()para explicar quais são seus tokens.
Diferentemente do módulo Token, o código no núcleo do Drupal permite criar o conteúdo de um token somente quando estritamente necessário. No Drupal 6, o módulo Token solicitaria aos módulos que implementam tokens todos os valores para o uso de token hook_token_values(); isso significa que um módulo pode calcular o valor de um token que não é necessário para os tokens que estão sendo substituídos. No Drupal 7, a implementação de hook_tokens()recebe $tokens, uma matriz de tokens a serem substituídos, como argumento; o módulo poderá calcular o valor de um token, sabendo que ele será usado.
A função que no Drupal 7 é usada para substituir os tokens pelo seu valor é token_replace () , que é a única função usada para substituir os tokens pelos seus valores.
Outra diferença entre o módulo Token para Drupal 6 e o código no Drupal 7 é:
No Drupal 7, [nó: autor] retorna o nome do autor; [node: author: mail] retorna o endereço de email associado ao autor de um nó e [node: author: url] retorna a URL do perfil do usuário para o autor do nó. Em outras palavras, é possível usar [node: author: xyz], em que "xyz" é um dos tokens retornados para um objeto de usuário.
No Drupal 7, não há tokens brutos; a implementação de hook_tokens()get um parâmetro que informa ao gancho quando o conteúdo do token precisa ser higienizado; quando o valor do token não precisa ser higienizado, o conteúdo não é passado para as funções check_plain()ou filter_xss().
No Drupal 7, não há nenhuma função que mostre a lista dos tokens disponíveis. Se um módulo precisar mostrar a lista de tokens disponíveis, ele deverá criar a lista dos tokens e mostrá-lo na descrição de um campo de formulário; Como alternativa, ele pode usar a função de tema ainda disponível no módulo Token.
Obrigado por fornecer um exemplo. Eles são sempre úteis
iStryker
1
Portanto, o token seria no exemplo acima: [site:city_name]. Certifique-se de limpar os caches ou reiniciar o memcached, se usado.
kenorb 4/09/15
Nota: $sanitizeno exemplo acima não está definido, então você entenderá Notice: Undefined variableisso.
kenorb 4/09/15
@kenorb bom olho, e vejo que esta resposta foi atualizada :)
WebMW
3
Para o Drupal 8, exemplo usando o objeto node:
Você pode colocar tokens no seu módulo em mymodule.tokens.inc usando hook_token_info () para registrá-los e hook_tokens () para os dados de substituição.
Se você deseja criar um token personalizado para um tipo de token existente, como para nós, precisará colocá-lo dentro da sub-matriz em hook_token_info (). Consulte node.tokens.inc no módulo node para ver do que você está construindo.
// 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;}
Obter o valor dos tokens em sua função requer um código semelhante ao seguinte.
$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);
Respostas:
No Drupal 6, você usa
hook_token_values()
.Este gancho permitirá que você crie tokens. Você pode criá-los no escopo global ou pode usar um objeto como um nó ou um usuário para propagar os valores.
Você também deve usar
hook_token_list()
para explicar quais são seus tokens.A documentação do token.api é bastante clara.
Não vou publicar o X, mas isso deve lhe dar uma ideia de alto nível.
fonte
No Drupal 7, o código para manipulação de tokens faz parte do módulo principal do Drupal.
Os ganchos que os módulos de token precisam implementar são:
Outros módulos podem alterar a implementação do token fornecida a partir de um módulo usando hook_token_info_alter () e hook_tokens_alter () .
Diferentemente do módulo Token, o código no núcleo do Drupal permite criar o conteúdo de um token somente quando estritamente necessário. No Drupal 6, o módulo Token solicitaria aos módulos que implementam tokens todos os valores para o uso de token
hook_token_values()
; isso significa que um módulo pode calcular o valor de um token que não é necessário para os tokens que estão sendo substituídos. No Drupal 7, a implementação dehook_tokens()
recebe$tokens
, uma matriz de tokens a serem substituídos, como argumento; o módulo poderá calcular o valor de um token, sabendo que ele será usado.A função que no Drupal 7 é usada para substituir os tokens pelo seu valor é token_replace () , que é a única função usada para substituir os tokens pelos seus valores.
Outra diferença entre o módulo Token para Drupal 6 e o código no Drupal 7 é:
hook_tokens()
get um parâmetro que informa ao gancho quando o conteúdo do token precisa ser higienizado; quando o valor do token não precisa ser higienizado, o conteúdo não é passado para as funçõescheck_plain()
oufilter_xss()
.fonte
Eu queria adicionar um novo token à seção de informações do site de tokens, chamada nome da cidade . Foi assim que fiz no Drupal 7.
fonte
[site:city_name]
. Certifique-se de limpar os caches ou reiniciar o memcached, se usado.$sanitize
no exemplo acima não está definido, então você entenderáNotice: Undefined variable
isso.Para o Drupal 8, exemplo usando o objeto node:
Você pode colocar tokens no seu módulo em mymodule.tokens.inc usando hook_token_info () para registrá-los e hook_tokens () para os dados de substituição.
Se você deseja criar um token personalizado para um tipo de token existente, como para nós, precisará colocá-lo dentro da sub-matriz em hook_token_info (). Consulte node.tokens.inc no módulo node para ver do que você está construindo.
mymodule.tokens.inc:
fonte
Para Drupal 8
Obter o valor dos tokens em sua função requer um código semelhante ao seguinte.
fonte
new
esimple
neste exemplo?