Yanıtlar:
Drupal 6'da kullanıyorsunuz hook_token_values()
.
Bu kanca, belirteçleri oluşturmanıza olanak sağlar. Onları global kapsamda oluşturabilir veya değerleri sıralamak için düğüm gibi bir nesneyi veya bir kullanıcıyı kullanabilirsiniz.
hook_token_list()
Jetonlarınızın ne olduğunu açıklamak için da kullanmalısınız .
Token.api dokümantasyon oldukça açıktır.
function my_user_token_values($type, $object = NULL, $options = array()) {
if ($type == 'user') {
$user = $object;
$tokens['name'] = $user->name;
$tokens['mail'] = $user->mail;
return $tokens;
}
}
Her şeyi X postalamayacağım ama bu size yüksek bir fikir vermeli.
Drupal 7'de belirteçleri kullanma kodu Drupal çekirdek modülünün bir parçasıdır.
Token modüllerinin uygulanması gereken kancalar:
Diğer modüller hook_token_info_alter () ve hook_tokens_alter () kullanarak bir modülden sağlanan belirteç uygulamasını değiştirebilir .
Token modülünden farklı olarak, Drupal çekirdeğindeki kod, yalnızca tam olarak gerekli olduğunda bir token içeriğinin oluşturulmasına izin verir. Drupal 6'da, Token modülü, belirteçleri kullanmak için tüm değerleri belirteçleri uygulayan modüllere sorar hook_token_values()
; bu, bir modülün bir token için değeri hesaplayabilmesi anlamına gelir; bu daha sonra değiştirilen tokenler için gerekli değildir. Siteye 7'de, uygulanması hook_tokens()
alır $tokens
, jeton, bir dizi değişken olarak, değiştirilmesi; modül daha sonra kullanılacağını bilerek, bir jetonun değerini hesaplayabilir.
Drupal 7'de belirteçleri değerleriyle değiştirmek için kullanılan işlev, belirteçleri değerleriyle değiştirmek için kullanılan tek işlev olan token_replace () 'dir.
Drupal 6 için Token modülü ile Drupal 7'deki kod arasındaki diğer fark:
hook_tokens()
belirtecin içeriğinin sterilize edilmesi gerektiğinde çengele söyleyen bir parametrenin uygulanması ; belirteç değerinin sterilize edilmesi gerekmediğinde, içerik işlevlere check_plain()
geçilmez filter_xss()
.Şehir adı adlı belirteçlerin Site bilgisi bölümüne yeni bir belirteç eklemek istedim . Drupal 7’de böyle yaptım.
/**
* Implements hook_token_info().
*/
function my_module_token_info() {
// Add tokens.
$site['city_name'] = array(
'name' => t('Token Name'),
'description' => t('Token Description'),
);
return array(
'tokens' => array(
'site' => $site,
),
);
}
/**
* Implements hook_tokens().
*/
function my_module_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
if ($type == 'site') {
foreach ($tokens as $name => $original) {
switch ($name) {
case 'city_name':
$city_name = variable_get('city_name');
$replacements[$original] = $sanitize ? check_plain($city_name) : $city_name;
break;
}
}
}
// Return the replacements.
return $replacements;
}
[site:city_name]
. Önbellekleri temizlediğinizden veya kullanılıyorsa memcached uygulamasını yeniden başlattığınızdan emin olun.
$sanitize
Yukarıdaki örnekte tanımlanmadı, bu yüzden bunu anlayacaksınız Notice: Undefined variable
.
Drupal 8 için, düğüm nesnesini kullanarak örnek:
Onları kaydetmek için hook_token_info () ve değiştirme verileri için hook_tokens () kullanarak mymodule.tokens.inc adresindeki belirteçleri koyabilirsiniz.
Düğümler gibi mevcut bir belirteç türü için özel bir belirteç oluşturmak istiyorsanız, belirtecinizi hook_token_info () içindeki alt dizinin içine yerleştirmeniz gerekir. Neyin inşa ettiğini görmek için düğüm modülündeki node.tokens.inc dosyasına bakın.
mymodule.tokens.inc:
<?php
use Drupal\Core\Render\BubbleableMetadata;
use Drupal\image\Entity\ImageStyle;
/**
* Implements hook_token_info().
*/
function mymodule_token_info() {
$info = array();
$info['tokens']['node']['custom_title'] = [
'name' => t("Custom Title"),
'description' => t("a custom node title token"),
];
// Return them.
return $info;
}
/**
* Implements hook_tokens().
*/
function mymodule_tokens($type, $tokens, array $data, array $options, BubbleableMetadata $bubbleable_metadata) {
$replacements = array();
if ($type == 'node') {
foreach ($tokens as $name => $original) {
// Find the desired token by name
switch ($name) {
case '$data['node']':
$node = $data['node'];
$replacements[$original] = $node->label();
break;
}
}
}
// Return the replacements.
return $replacements;
}
Drupal 8 için
// We need to include the needed class for tokens.
use Drupal\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 name
switch ($name) {
case 'customtoken':
$new = $simple;
$replacements[$original] = $new;
break;
}
}
}
// Return the replacements.
return $replacements;
}
İşlevinizde belirteçlerin değerini almak, aşağıdakine benzer bir kod gerektirir.
$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);
new
ve nedir simple
?