В Drupal, как изменить значения, передаваемые в Pathauto? - PullRequest
4 голосов
/ 10 мая 2010

У меня есть Pathauto, настроенный для создания псевдонима на основе заголовка узла для определенного типа контента. Проблема в том, что я хочу внести небольшие изменения в этот заголовок, прежде чем Pathauto использует его для генерации псевдонима.

Первый комментарий в этой записи предлагает использовать hook_token_values, но я не мог понять, как его использовать, даже после прочтения документов . В моих тестах, когда я реализую этот хук, сгенерированный псевдоним всегда является «массивом», что означает, что я что-то упускаю.

Любая помощь? Спасибо.

Ответы [ 2 ]

5 голосов
/ 10 мая 2010

Возможно, вы также пропустили реализацию hook_token_list. Предоставление нового токена выполняется в два этапа:

  1. Реализуйте hook_token_list, чтобы объявить токены, которые вы собираетесь предоставить. Это будет просто имя токена, а также краткое объяснение и информация о том, к какому типу объектов будут применяться токены (например, узел, пользователь, таксономия, ...)
  2. Реализация 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(), так что это место для вставки вашей собственной логики.

1 голос
/ 07 апреля 2012

В Drupal 7 функциональность токена перенесена в ядро.Токены реализуются методами hook_tokens и hook_token_info .Для примеров использования перейдите по предоставленным ссылкам и найдите ссылки на функции, которые реализуют hook_tokens и hook_token_info… Я обнаружил, что функции statistics_tokens и statistics_token_info полезны для понимания того, как работает этот хук.

Вероятно, также стоит отметить, что этот хук должен быть реализован модулем ... моя первая попытка - я бросил свои тестовые функции в файл template.php, только чтобы ничего не происходило: -p

...