В Drupal, как изменить значения, переданные в Pathauto?

StackOverflow https://stackoverflow.com/questions/2804781

  •  25-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Возможно, вы пропустили реализацию 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 будет «пользователем», а также $object будет объектом пользователя и так далее для других типов). То, что он делает, это создает массив значений, вынужденные по имени токена, с заменой для этого токена в качестве значения. Оригинальный код от Token_node.inc просто запускает заголовок через check_plain(), Так что это было бы место для вставки собственной логики.

Другие советы

В Drupal 7 функциональность токена была перемещена в ядру. Токены реализуются Took_tokens. а также Cook_token_info. методы. Для примеров использования следуйте прилагаемым ссылкам и ищите ссылки на функции, которые реализуют Hook_Tokens и Cook_Token_info ... Я нашел Статистика_токенс а также Статистика_Token_info. Функции полезны в понимании того, как работает этот крючок.

Вероятно, также стоит отметить, что этот крюк должен быть реализован модулем ... Моя первая попытка я бросил свои тестовые функции в Themplate Theme.php, только чтобы ничего не произойти вообще :-P

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top