जवाबों:
Drupal 6 में, आप उपयोग करते हैं hook_token_values()
।
यह हुक आपको टोकन बनाने की अनुमति देगा। आप उन्हें वैश्विक दायरे में बना सकते हैं या आप मानों को बीजने के लिए नोड, या उपयोगकर्ता जैसी किसी वस्तु का उपयोग कर सकते हैं।
आपको यह hook_token_list()
समझाने के लिए भी उपयोग करना चाहिए कि आपके टोकन क्या हैं।
Token.api प्रलेखन काफी स्पष्ट है।
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;
}
}
मैं पूरी बात पोस्ट नहीं करूंगा, लेकिन आपको एक उच्च स्तरीय विचार देना चाहिए।
Drupal 7 में टोकन से निपटने के लिए कोड Drupal कोर मॉड्यूल का हिस्सा है।
टोकन मॉड्यूल को लागू करने के लिए आवश्यक हुक हैं:
अन्य मॉड्यूल hook_token_info_alter () और hook_tokens_alter () का उपयोग करके एक मॉड्यूल से प्रदान टोकन कार्यान्वयन को बदल सकते हैं ।
टोकन मॉड्यूल से अलग, ड्रुपल कोर में कोड केवल एक टोकन की सामग्री बनाने की अनुमति देता है जब कड़ाई से आवश्यक हो। Drupal 6 में, टोकन मॉड्यूल उन मॉड्यूलों से पूछेगा जो उनके टोकन के उपयोग के लिए सभी मूल्यों को लागू करते हैं hook_token_values()
; इसका मतलब है कि एक मॉड्यूल एक टोकन के लिए मूल्य की गणना कर सकता है जो तब टोकन को प्रतिस्थापित करने के लिए आवश्यक नहीं है। Drupal 7 में, कार्यान्वयन की hook_tokens()
प्राप्त करता है $tokens
, टोकन की एक सरणी तर्क के रूप में, प्रतिस्थापित किया जा करने के लिए; मॉड्यूल तब एक टोकन के मूल्य की गणना करने में सक्षम है, यह जानते हुए कि इसका उपयोग किया जाएगा।
Drupal 7 में फ़ंक्शन का उपयोग टोकन को उनके मान के साथ बदलने के लिए किया जाता है, token_replace () है , जो टोकन को उनके मानों से बदलने के लिए उपयोग किया जाने वाला एकमात्र फ़ंक्शन है।
Drupal 6 के लिए टोकन मॉड्यूल और Drupal 7 में कोड के बीच अन्य अंतर हैं:
hook_tokens()
एक पैरामीटर प्राप्त करने का कार्यान्वयन जो हुक को बताता है जब टोकन की सामग्री को स्वच्छता की आवश्यकता होती है; जब टोकन मूल्य को सैनिटाइज करने की आवश्यकता नहीं होती है, तो सामग्री फ़ंक्शंस में पास नहीं होती है check_plain()
या नहीं filter_xss()
।मैं शहर के नाम से टोकन के साइट सूचना अनुभाग में एक नया टोकन जोड़ना चाहता था । यह मैंने ड्रुपल 7 में कैसे किया।
/**
* 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]
:। सुनिश्चित करें कि यदि आपने उपयोग किया है तो कैश साफ़ करें या फिर से शुरू करें।
$sanitize
ऊपर के उदाहरण में परिभाषित नहीं किया गया है, इसलिए आप इसके Notice: Undefined variable
बारे में जानेंगे।
Drupal 8 के लिए, नोड ऑब्जेक्ट का उपयोग करके उदाहरण:
आप प्रतिस्थापन डेटा के लिए उन्हें और hook_tokens () को पंजीकृत करने के लिए hook_token_info () का उपयोग करके mymodule.tokens.inc पर अपने मॉड्यूल में टोकन डाल सकते हैं।
यदि आप किसी मौजूदा टोकन प्रकार के लिए एक कस्टम टोकन बनाना चाहते हैं, जैसे कि नोड्स के लिए, तो आपको अपने टोकन को हुक_टोकन_इनफो () के भीतर सबर्रे के अंदर रखना होगा। नोड मॉड्यूल का संदर्भ लें। नोड मॉड्यूल में देखें कि आप क्या बना रहे हैं।
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;
}
द्रुपाल 8 के लिए
// 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;
}
अपने फ़ंक्शन में टोकन का मूल्य प्राप्त करना निम्न के समान कोड की आवश्यकता है।
$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
और simple
इस उदाहरण में?