Hook ini akan memungkinkan Anda untuk membuat token. Anda bisa membuat mereka dalam lingkup global atau Anda bisa menggunakan objek seperti node, atau pengguna untuk menabur nilai.
Anda juga harus menggunakan hook_token_list()untuk menjelaskan apa token Anda.
Berbeda dari modul Token, kode dalam inti Drupal memungkinkan untuk membuat konten token hanya ketika benar-benar diperlukan. Dalam Drupal 6, modul Token akan meminta modul menerapkan token semua nilai untuk token mereka menggunakan hook_token_values(); ini berarti bahwa modul dapat menghitung nilai token yang kemudian tidak diperlukan untuk token yang diganti. Di Drupal 7, pelaksanaan hook_tokens()menerima $tokens, array token harus diganti, sebagai argumen; modul ini kemudian dapat menghitung nilai token, tahu itu akan digunakan.
Fungsi yang dalam Drupal 7 digunakan untuk mengganti token dengan nilainya adalah token_replace () , yang merupakan satu-satunya fungsi yang digunakan untuk mengganti token dengan nilainya.
Perbedaan lain antara modul Token untuk Drupal 6 dan kode dalam Drupal 7 adalah:
Dalam Drupal 7, [simpul: penulis] mengembalikan nama penulis; [node: author: mail] mengembalikan alamat email yang dikaitkan dengan pembuat node, dan [node: author: url] mengembalikan URL profil pengguna untuk pembuat node. Dengan kata lain, dimungkinkan untuk menggunakan [simpul: penulis: xyz], di mana "xyz" adalah salah satu token yang dikembalikan untuk objek pengguna.
Dalam Drupal 7, tidak ada token mentah; implementasi hook_tokens()get parameter yang memberitahu hook ketika konten token perlu disanitasi; ketika nilai token tidak perlu disanitasi, konten tidak diteruskan ke fungsi check_plain()atau filter_xss().
Di Drupal 7, tidak ada fungsi yang menunjukkan daftar token yang tersedia. Jika modul perlu menunjukkan daftar token yang tersedia, itu harus membangun daftar token itu sendiri dan menunjukkannya dalam deskripsi bidang formulir; sebagai alternatif, dapat menggunakan fungsi tema yang masih tersedia dalam modul Token.
Terima kasih telah memberikan contoh. Mereka selalu membantu
iStryker
1
Jadi token akan di contoh di atas: [site:city_name]. Pastikan Anda menghapus cache atau memulai memcached jika digunakan.
kenorb
Catatan: $sanitizedalam contoh di atas tidak ditentukan, jadi Anda akan mendapatkannya Notice: Undefined variable.
kenorb
@kenorb mata yang baik, dan saya melihat jawaban ini telah diperbarui :)
WebMW
3
Untuk Drupal 8, contoh menggunakan objek simpul:
Anda dapat memasukkan token di modul Anda di mymodule.tokens.inc menggunakan hook_token_info () untuk mendaftarkannya dan hook_tokens () untuk data penggantian.
Jika Anda ingin membuat token khusus untuk jenis token yang ada, seperti untuk node, Anda harus meletakkan token Anda di dalam subarray di dalam hook_token_info (). Lihat node.tokens.inc di modul node untuk melihat apa yang Anda bangun.
// 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;}
Untuk mendapatkan nilai token dalam fungsi Anda memerlukan kode yang mirip dengan yang berikut.
$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);
Jawaban:
Di Drupal 6, Anda menggunakan
hook_token_values()
.Hook ini akan memungkinkan Anda untuk membuat token. Anda bisa membuat mereka dalam lingkup global atau Anda bisa menggunakan objek seperti node, atau pengguna untuk menabur nilai.
Anda juga harus menggunakan
hook_token_list()
untuk menjelaskan apa token Anda.The token.api dokumentasi cukup jelas.
Saya tidak akan X memposting semuanya tetapi itu akan memberi Anda ide tingkat tinggi.
sumber
Dalam Drupal 7 kode untuk menangani token adalah bagian dari modul inti Drupal.
Kait yang perlu diterapkan modul token adalah:
Modul lain dapat mengubah implementasi token yang disediakan dari modul menggunakan hook_token_info_alter () dan hook_tokens_alter () .
Berbeda dari modul Token, kode dalam inti Drupal memungkinkan untuk membuat konten token hanya ketika benar-benar diperlukan. Dalam Drupal 6, modul Token akan meminta modul menerapkan token semua nilai untuk token mereka menggunakan
hook_token_values()
; ini berarti bahwa modul dapat menghitung nilai token yang kemudian tidak diperlukan untuk token yang diganti. Di Drupal 7, pelaksanaanhook_tokens()
menerima$tokens
, array token harus diganti, sebagai argumen; modul ini kemudian dapat menghitung nilai token, tahu itu akan digunakan.Fungsi yang dalam Drupal 7 digunakan untuk mengganti token dengan nilainya adalah token_replace () , yang merupakan satu-satunya fungsi yang digunakan untuk mengganti token dengan nilainya.
Perbedaan lain antara modul Token untuk Drupal 6 dan kode dalam Drupal 7 adalah:
hook_tokens()
get parameter yang memberitahu hook ketika konten token perlu disanitasi; ketika nilai token tidak perlu disanitasi, konten tidak diteruskan ke fungsicheck_plain()
ataufilter_xss()
.sumber
Saya ingin menambahkan token baru ke bagian informasi situs token, yang disebut nama kota . Ini adalah bagaimana saya melakukannya di Drupal 7.
sumber
[site:city_name]
. Pastikan Anda menghapus cache atau memulai memcached jika digunakan.$sanitize
dalam contoh di atas tidak ditentukan, jadi Anda akan mendapatkannyaNotice: Undefined variable
.Untuk Drupal 8, contoh menggunakan objek simpul:
Anda dapat memasukkan token di modul Anda di mymodule.tokens.inc menggunakan hook_token_info () untuk mendaftarkannya dan hook_tokens () untuk data penggantian.
Jika Anda ingin membuat token khusus untuk jenis token yang ada, seperti untuk node, Anda harus meletakkan token Anda di dalam subarray di dalam hook_token_info (). Lihat node.tokens.inc di modul node untuk melihat apa yang Anda bangun.
mymodule.tokens.inc:
sumber
Untuk Drupal 8
Untuk mendapatkan nilai token dalam fungsi Anda memerlukan kode yang mirip dengan yang berikut.
sumber
new
dansimple
dalam contoh ini?