Возможно, вы также пропустили реализацию hook_token_list
. Предоставление нового токена выполняется в два этапа:
- Реализуйте
hook_token_list
, чтобы объявить токены, которые вы собираетесь предоставить. Это будет просто имя токена, а также краткое объяснение и информация о том, к какому типу объектов будут применяться токены (например, узел, пользователь, таксономия, ...)
- Реализация
hook_token_value
для фактического создания содержимого токенов. Это будет вызвано, когда токены должны быть заменены содержанием, которое они должны обозначать.
Поскольку вы просто хотите предоставить альтернативную версию токена заголовка, уже предоставленного модулем токена, вероятно, лучше всего просто скопировать соответствующие части из token_node.inc, урезать до соответствующих случаев и настроить для использования в другой модуль:
/**
* Implementation of hook_token_list().
*/
function yourModule_token_list($type = 'all') {
if ($type == 'node' || $type == 'all') {
$tokens['node']['yourModule-title'] = t('Node title (customized version by yourModule)');
return $tokens;
}
}
Это просто говорит о том, что yourModule
предоставляет токен для объектов узла с именем yourModule-title
вместе с кратким описанием. Основная работа выполняется в другом хуке:
/**
* Implementation of hook_token_values().
*/
function yourModule_token_values($type, $object = NULL, $options = array()) {
$values = array();
switch ($type) {
case 'node':
$node = $object;
// TODO: Replace the check_plain() call with your own token value creation logic!
$values['yourModule-title'] = check_plain($node->title);
break;
}
return $values;
}
Это будет вызываться всякий раз, когда нужны токены для объектов узлов, при этом рассматриваемый узел передается в качестве параметра $object
(для токена пользователя $type
будет 'user', а $object
будет быть объектом пользователя и т. д. для других типов). То, что он делает, - это создание массива значений с ключом имени токена с заменой этого токена в качестве значения. Исходный код из token_node.inc просто пропускает заголовок через check_plain()
, так что это место для вставки вашей собственной логики.