Созонов Алексей

Веб-разработчик

Создать свой token Drupal 7

09.08.2015

Пример 0

<?php
/**
 * Implements hook_token_info().
 */
function tokentest_token_info() {
// you will find this in the node section in path auto replacement pattrens
// then you could use [node:relatedtype]/[node:title] as a url pattern
  $info['tokens']['node']['relatedtype'] = array(
    'name' => t('Related Content type'),
    'description' => t('Related content type LLLLLLLLLLLLLOOOOOOOOOOOOOOOKKKKKKKKKKKKKKKKKK'), // this is so you see it in the big list
  );
  return $info;
}

/**
 * Implements hook_tokens().
 */

function tokentest_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
    $sanitize = !empty($options['sanitize']);
    if ($type == 'node' && !empty($data['node'])) {
        $node = $data['node'];

        foreach ($tokens as $name => $original) {
            switch ($name) {
                    case 'relatedtype':
                    $toreplace = tokentest_set_mytoken();
                    $replacements[$original] = $toreplace;
                    break;
            }
        }
    }
    return $replacements;
}

// however we will need to call this function from our code or see above
function tokentest_set_mytoken() {
    // query to set the url path of allready created node by the user

global $user;
$uid = $user->uid;

$type = "page"; /// change to your content type

$q = "SELECT * FROM {node} WHERE uid = :uid AND type = :type LIMIT 1";
$result = db_query($q, array(':uid' => $uid , ':type'=>$type));

foreach ($result as $row) {
  if(isset($row->nid)){
$nid = $row->nid;
  }else{
    $nid = false;
  }
}

if($nid ==false){
    // could not find one wtf.
    drupal_set_message(t("Please create a 'page' first "), 'error');
    return false;
}else{
// get the path of that "page"
    $path = drupal_get_path_alias("node/".$nid);
return $path;
}

}

Пример 1

<?php
/**
 * Implements hook_token_info(). This hook will register tow token lname and fname.
 */
function myhook_token_info() {
  $info['tokens']['custom']['fname'] = array(
    'name' => t('First name'),
    'description' => t('First name re placer for fname '),
  );
  $info['tokens']['custom']['lname'] = array(
    'name' => t('Last name'),
    'description' => t('Last name re placer for lname '),
  );
  return $info;
}

/**
 * Implements hook_tokens(). This hook will operate the token and replace it with it's value.
 */
function myhook_tokens($type, $tokens, array $data = array(), array $options = array()) {
    $replacements = array();
    $sanitize = !empty($options['sanitize']);
    if ($type == 'custom') {
        foreach ($tokens as $name => $original) {
              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 myhook_myfunction() {
    $custom = array();
    $custom['fname'] = 'Rajat';
    $custom['lname'] = 'Gusain';
    $data = $custom;
    $temp = "Full name : [custom:fname] [custom:lname]";
    $temp = token_replace($temp, $data);
// After token replacement $temp variable will contain " Full name : Rajat Gusain"
}

Пример 2

<?php
/**
 * @file
 * Provides special token to use with pathauto.
 *
 * @see httx://drupal.org/node/1308488
 */

/**
 * Provide information about our custom placeholder/token.
 *
 * @see httx://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_token_info/7
 * @see httx://api.lullabot.com/token_example_token_info/7
 * @return array
 *   An associative array of available tokens and token types.
 */
function MODULE_NAME_token_info() {
    $info['tokens']['node']['pathauto'] = array(
        'name' => t('Pathauto'),
        'description' => t('Title ready for use with pathauto.'),
    );
    return $info;
}

/**
 * Provide replacement values for placeholder tokens.
 *
 * @see httx://api.drupal.org/api/drupal/modules--system--system.api.php/function/hook_tokens/7
 * @see httx://api.lullabot.com/token_example_tokens/7
 * @param string $type
 *   The machine-readable name of the type (group) of token being replaced, such
 *   as 'node', 'user', or another type defined by a hook_token_info()
 *   implementation.
 * @param array $tokens
 *   An array of tokens to be replaced. The keys are the machine-readable token
 *   names, and the values are the raw [type:token] strings that appeared in the
 *   original text.
 * @param array $data (optional)
 *   An associative array of data objects to be used when generating replacement
 *   values, as supplied in the $data parameter to token_replace().
 * @param array $options (optional)
 *   An associative array of options for token replacement; see token_replace()
 *   for possible values.
 * @return array
 *   An associative array of replacement values, keyed by the raw [type:token]
 *   strings from the original text.
 */
function MODULE_NAME_tokens($type, $tokens, array $data = array(), array $options = array()) {
    $replacements = array();
    $sanitize = !empty($options['sanitize']);

    if ($type == 'node' && !empty($data['node'])) {
        $node = $data['node'];

        foreach ($tokens as $name => $original) {
            switch ($name) {
                case 'pathauto':
                    $replacements[$original] = str_replace(
                            array('&amp;', '&'),
                            'and',
                            $sanitize ? filter_xss($node->title) : $node->title
                    );
                    break;
            }
        }
    }

    return $replacements;
}
?>

Оригинал

#Drupal