Создание своего токена: [global:Array]

Главные вкладки

Аватар пользователя Епсилон Епсилон 9 октября 2014 в 14:56

Доброго дня.
Пытаюсь создать свой токен.

<?php
function misc_hook_tokens($type$tokens, array $data = array(), array $options = array()) {
    
$replacements = array();

    

$replacements['skidka-code'] = create_guid(); //функция генерирует некий код - string

    

return $replacements;
}
function 
misc_hook_token_info() {
  
$type = array(
    
'name' => t('Коды'),
    
'description' => t('Коды на скидки'),
  );
 
  
$global['skidka-code'] = array(
    
'name' => t('Код для скидки'),
    
'description' => t('Код для купона со скидкой!'),
  );

  return array(
    

'types' => array('global' => $type),
    
'tokens' => array('global' => $global),
  );
}
?>

Но в результате работы выдает Код на скидки: [global:Array]

Почему так, кто знает?

Комментарии

Аватар пользователя Епсилон Епсилон 10 октября 2014 в 14:17

"Plazik" wrote:
Очевидно, что ваш токен возвращает массив, а не строку.

Это мне было понятно изначально)
Но почему он возвращает массив?
У меня везде string используется, проверил сразу.

Аватар пользователя drupby drupby 10 октября 2014 в 14:58
/**
 * Implements hook_token_info().
 */

function misc_hook_token_info() {
  $info = array();
  // определяем новый тип токенов(можно использовать и существующие)
  $info['types']['my_custom_tokens'] = array(
    'name' => t('My custom tokens'),
    'description' => t('A token type for my custom tokens.'),
  );
  // добавляем в группу токен
  $info['tokens']['my_custom_tokens']['skidka-code'] = array(
    'name' => 'Код для скидки',
    'description' => 'Код для купона со скидкой!',
  );
  return $info;
}
/**
 * Implements hook_tokens().
 */

function misc_hook_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();

  if ($type == 'my_custom_tokens') {
    // Перебираем в цикле все токены группы my_custom_tokens
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'skidka-code':
          // определяем значение токена
          $value = create_guid();
          $replacements[$original] = $value;
          break;
      }
    }
  }

  return $replacements;
}

"Епсилон" wrote:
$replacements['skidka-code'] = create_guid();

если ты хотел добавить в global, то нужно было
$replacements['global:skidka-code'] = create_guid();

вот для global

/**
 * Implements hook_token_info().
 */

function misc_hook_token_info() {
  $info = array();
  // добавляем в группу global токен
  $info['tokens']['global']['skidka-code'] = array(
    'name' => 'Код для скидки',
    'description' => 'Код для купона со скидкой!',
  );
  return $info;
}
/**
 * Implements hook_tokens().
 */

function misc_hook_tokens($type, $tokens, array $data = array(), array $options = array()) {
  $replacements = array();
 
  if ($type == 'global') {
    // Перебираем в цикле все токены группы global
    foreach ($tokens as $name => $original) {
      switch ($name) {
        case 'skidka-code':
          // определяем значение токена
          $value = create_guid();
          $replacements[$original] = $value;
          break;
      }
    }
  }
 
  return $replacements;
}