Tokens provides an input filter that replaces tokens with content. All tokens are binded to its function that returns content as a value for that token. Token can contain parameters that will be passed to its function.
To create custom token, three token api functions are used:
- hook_token_info, is used to declare any custom tokens.
- hook_tokens($type, $tokens, array $data = array(), array $options = array()), is used to give defined token some content
- token_replace($text, array $data = array(), array $options = array()), Replaces all tokens in a given string with appropriate values.
/** * Implements hook_token_info(). */ function MYMODULE_token_info() { // Define a new token type. $types['custom'] = array( 'name' => t("Custom Tokens"), 'description' => t("Tokens that are custom."), ); // Define any new tokens. $tokens['fname'] = array( 'name' => t("First name"), 'description' => t("First name token"), ); $tokens['lname'] = array( 'name' => t("Last name"), 'description' => t("Last name token"), ); return array( 'types' => $types, 'tokens' => array( 'tn' => $tokens, ), ); }
We are creating custom token type here. Get a list of the existing tokens and types by calling token_get_info() to add token to existing types.
/** * Implements hook_tokens(). This hook will operate the token and replace it with it's value. */ function MYMODULE_tokens($type, $tokens, array $data = array(), array $options = array()) { $replacements = array(); if ($type == 'custom') { // Loop through each of the available tokens. foreach ($tokens as $name => $original) { // Find our custom tokens by name. switch ($name) { case 'fname': // Work out the value of our token. $value = 'Deepali'; // Give our token it's value! $replacements[$original] = $value; break case 'lname': // Work out the value of our token. $value = 'Agarwal'; // Give our token it's value! $replacements[$original] = $value; break; } } } return $replacements; }
Custom created token will now be available in the list of tokens. You can use Token Insert module to insert tokens into a textarea (plain text and wysiwyg textareas).
ARGUMENTS
You can pass additional contextual data to token_replace() function which is then passed to implementations of hook_tokens(). You can also use below code to pass the values of token dynamically.
/** * Implements hook_tokens(). This hook will operate the token and replace it with it's value. */ function MYMODULE_tokens($type, $tokens, array $data = array(), array $options = array()) { $replacements = array(); if ($type == 'custom') { // Loop through each of the available tokens. foreach ($tokens as $name => $original) { // Replace token with desired values if (array_key_exists($name, $data)) { $replacements[$original] = $data[$name]; } } } return $replacements; } /** * Here we will use the token_replace() function to get the actual content after replacement. */ function MYMODULE_MYFUNCTION(&$variables) { $data = array(); $data['fname'] = 'Deepali'; $data['lname'] = 'Agarwal'; $temp = "Full name : [custom:fname] [custom:lname]"; $temp = token_replace($temp, $data); echo $temp; // After token replacement $temp variable will contain "Full name : Deepali Agarwal" }
The $data parameter can contain either the $user object or the $node object required to calculate the appropriate values.
Feel free to share your valuable inputs/feedbacks. #letstalksolution and need more assistance regarding Drupal Web Development contact us now.