Ten hak pozwoli ci tworzyć tokeny. Możesz utworzyć je w zasięgu globalnym lub użyć obiektu takiego jak węzeł lub użytkownik do zapoczątkowania wartości.
Powinieneś także użyć, hook_token_list()aby wyjaśnić, jakie są twoje tokeny.
W odróżnieniu od modułu Token, kod w rdzeniu Drupala pozwala tworzyć zawartość tokena tylko wtedy, gdy jest to absolutnie konieczne. W Drupal 6 moduł Tokenów poprosiłby moduły implementujące tokeny o podanie wszystkich wartości ich tokena hook_token_values(); oznacza to, że moduł może obliczyć wartość tokena, który nie jest wówczas wymagany do wymiany tokena. W Drupal 7, implementacja hook_tokens()otrzymuje $tokens, tablicę tokenów do zastąpienia, jako argument; moduł jest wówczas w stanie obliczyć wartość tokena, wiedząc, że zostanie użyty.
Funkcja, która w Drupal 7 jest używana do zamiany tokenów na ich wartość, to token_replace () , która jest jedyną funkcją używaną do zamiany tokenów na ich wartości.
Inne różnice między modułem Token dla Drupala 6 a kodem w Drupal 7 to:
W Drupal 7 [węzeł: autor] zwraca nazwisko autora; [node: autor: mail] zwraca adres e-mail powiązany z autorem węzła, a [node: autor: url] zwraca adres URL profilu użytkownika dla autora węzła. Innymi słowy, można użyć [node: autor: xyz], gdzie „xyz” jest jednym z tokenów zwróconych dla obiektu użytkownika.
W Drupal 7 nie ma surowych żetonów; implementacja hook_tokens()parametru get, który informuje hak, kiedy zawartość tokena wymaga dezynfekcji; gdy wartość tokena nie wymaga dezynfekcji, zawartość nie jest przekazywana do funkcji check_plain()lub filter_xss().
W Drupal 7 nie ma żadnej funkcji, która wyświetla listę dostępnych tokenów. Jeśli moduł musi wyświetlić listę dostępnych tokenów, musi zbudować listę samych tokenów i pokazać ją w opisie pola formularza; alternatywnie może użyć funkcji motywu dostępnej w module Token.
Dziękujemy za podanie przykładu. Są zawsze pomocni
iStryker
1
Więc token będzie w powyższym przykładzie: [site:city_name]. Upewnij się, że wyczyściłeś pamięć podręczną lub uruchom ponownie pamięć memcached, jeśli jest używana.
kenorb
Uwaga: $sanitizew powyższym przykładzie nie jest zdefiniowany, więc o tym poradzisz Notice: Undefined variable.
kenorb
@kenorb dobre oko i widzę, że ta odpowiedź została zaktualizowana :)
WebMW
3
W przypadku Drupal 8 przykład użycia obiektu węzła:
Możesz umieścić tokeny w module na mymodule.tokens.inc za pomocą hook_token_info (), aby je zarejestrować i hook_tokens () dla danych zastępczych.
Jeśli chcesz utworzyć niestandardowy token dla istniejącego typu tokenu, na przykład dla węzłów, musisz umieścić token w podtablicy w hook_token_info (). Przejdź do node.tokens.inc w module węzłów, aby zobaczyć, z czego budujesz.
// 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;}
Uzyskanie wartości tokenów w funkcji wymaga kodu podobnego do następującego.
$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);
Odpowiedzi:
W Drupal 6 używasz
hook_token_values()
.Ten hak pozwoli ci tworzyć tokeny. Możesz utworzyć je w zasięgu globalnym lub użyć obiektu takiego jak węzeł lub użytkownik do zapoczątkowania wartości.
Powinieneś także użyć,
hook_token_list()
aby wyjaśnić, jakie są twoje tokeny.Dokumentacja token.api jest dość przejrzysta.
Nie opublikuję całego X, ale to powinno dać ci pomysł na wysokim poziomie.
źródło
W Drupal 7 kod do obsługi tokenów jest częścią modułu podstawowego Drupal.
Haki, które moduły tokenu muszą zaimplementować, to:
Inne moduły mogą zmieniać implementację tokena dostarczoną z modułu za pomocą hook_token_info_alter () i hook_tokens_alter () .
W odróżnieniu od modułu Token, kod w rdzeniu Drupala pozwala tworzyć zawartość tokena tylko wtedy, gdy jest to absolutnie konieczne. W Drupal 6 moduł Tokenów poprosiłby moduły implementujące tokeny o podanie wszystkich wartości ich tokena
hook_token_values()
; oznacza to, że moduł może obliczyć wartość tokena, który nie jest wówczas wymagany do wymiany tokena. W Drupal 7, implementacjahook_tokens()
otrzymuje$tokens
, tablicę tokenów do zastąpienia, jako argument; moduł jest wówczas w stanie obliczyć wartość tokena, wiedząc, że zostanie użyty.Funkcja, która w Drupal 7 jest używana do zamiany tokenów na ich wartość, to token_replace () , która jest jedyną funkcją używaną do zamiany tokenów na ich wartości.
Inne różnice między modułem Token dla Drupala 6 a kodem w Drupal 7 to:
hook_tokens()
parametru get, który informuje hak, kiedy zawartość tokena wymaga dezynfekcji; gdy wartość tokena nie wymaga dezynfekcji, zawartość nie jest przekazywana do funkcjicheck_plain()
lubfilter_xss()
.źródło
Chciałem dodać nowy token do sekcji informacji o tokenach o nazwie Nazwa miasta . Tak właśnie zrobiłem w Drupal 7.
źródło
[site:city_name]
. Upewnij się, że wyczyściłeś pamięć podręczną lub uruchom ponownie pamięć memcached, jeśli jest używana.$sanitize
w powyższym przykładzie nie jest zdefiniowany, więc o tym poradziszNotice: Undefined variable
.W przypadku Drupal 8 przykład użycia obiektu węzła:
Możesz umieścić tokeny w module na mymodule.tokens.inc za pomocą hook_token_info (), aby je zarejestrować i hook_tokens () dla danych zastępczych.
Jeśli chcesz utworzyć niestandardowy token dla istniejącego typu tokenu, na przykład dla węzłów, musisz umieścić token w podtablicy w hook_token_info (). Przejdź do node.tokens.inc w module węzłów, aby zobaczyć, z czego budujesz.
mymodule.tokens.inc:
źródło
Dla Drupala 8
Uzyskanie wartości tokenów w funkcji wymaga kodu podobnego do następującego.
źródło
new
iwsimple
tym przykładzie jest?