Где находится Drupal 7 Termpath?
Использование модуля pathauto и token в Drupal 6 позволило вам создавать псевдонимы url, используя такой шаблон: [termpath-raw]/[title-raw].
Тем не менее, это не относится к Drupal 7. Я понимаю, что D7 все еще находится в альфа-версии, но бета-версия, скорее всего, скоро появится, и D6 IMO намного приятнее.
Эта функция еще не доступна?
5 ответов
В Drupal 7 слово path означает нечто очень конкретное и, очевидно, нечто иное, чем то, на что ссылается termpath, и не похоже, что были предприняты какие-либо действия для замены [*path]
токены только что (хотя это известная проблема): BIKESHED: токен для термина или элемента дерева / иерархии.
Похоже, что он не собирается превращаться в ядро и останется частью токена contrib, и даже проекты, объявленные #D7CX, до финального релиза должны завершить свои порты Drupal 7, которые, возможно, будут близки к концу. год.
Со-сопровождающий модуля токенов здесь. Здесь больше работы, потому что жетоны таксономии не совсем простые. Теперь они поля, и мы еще не написали поддержку токенов для полей D7. Это то, что мы должны сделать, хотя.
Я уже несколько месяцев ломаю голову над этой проблемой и, наконец, нашел решение, которое, кажется, работает:
Короче говоря, я создал собственный модуль, который предоставляет несколько дополнительных токенов (которые можно использовать в таких модулях, как заголовок страницы или pathauto). В выделенном фрагменте кода токены заменяются полным путем иерархической таксономии либо узла, либо термина таксономии (существуют токены, предназначенные для URL-адреса и другие, предназначенные для заголовка страницы).
Фактическая реализация может быть найдена в обсуждении на связанной странице.
Я надеюсь, что это может помочь некоторым людям с их собственными реализациями.
Вы можете использовать модуль http://drupal.org/project/taxonomy_entity_index с исправлениями из очереди выпуска. Единственное, что действительно плохо, это то, что вам нужно использовать команду Drush для построения индекса на рабочем сайте или каким-либо образом импортировать содержимое текущего сайта.
Я не помню, в каком проекте песочницы я нашел это, но это идеальное решение.
taxonomy_path_token.info
name = Taxonomy Path Token
description = Taxonomy path token creates a path of parent taxonomy terms of a node
package = Token
core = 7.x
dependencies[] = token
taxonomy_path_token.module
<?php
/**
* Implements hook_tokens().
*/
function taxonomy_path_token_tokens($type, $tokens, array $data = array(), array $options = array()) {
$replacements = array();
if (!empty($tokens['taxonomy_path']) && !empty($data['node'])) {
if(!empty($options['sanitize'])) {
$sanitize = $options['sanitize'];
} else {
$sanitize = FALSE;
}
$node = $data['node'];
$replacements[$tokens['taxonomy_path']] = $sanitize ? check_plain(taxonomy_path_token_get_parents($node)) : taxonomy_path_token_get_parents($node);
}
if ($type == 'array' && !empty($data['array'])) {
$array = $data['array'];
foreach ($tokens as $name => $original) {
switch ($name) {
case 'join-path-except-first':
module_load_include('inc', 'pathauto');
$values = array();
foreach (element_children($array) as $key) {
$value = is_array($array[$key]) ? render($array[$key]) : (string) $array[$key];
$value = pathauto_cleanstring($value);
$values[] = $value;
}
array_shift($values);
$replacements[$original] = implode('/', $values);
break;
}
}
}
return $replacements;
}
/**
* Implements hook_token_info().
*/
function taxonomy_path_token_token_info() {
$info['tokens']['node']['taxonomy_path'] = array(
'name' => t('taxonomy_path'),
'description' => t('Custom taxonomy_path token.'),
);
$info['tokens']['array']['join-path-except-first'] = array(
'name' => t('Joined path'),
'description' => t('The array values each cleaned by Pathauto and then joined with the slash into a string that resembles an URL.'),
);
return $info;
}
function taxonomy_path_token_get_parents($node) {
module_load_include('inc','pathauto','pathauto');
if(!empty($node->field_tags)){
$tid = current($node->field_tags);
$tid = $tid[0]['tid'];
}
else{
return '';
}
$parents = taxonomy_get_parents_all($tid);
$paths = array();
foreach ($parents as $parent) {
$paths[] = pathauto_cleanstring($parent->name);
}
$paths = array_reverse($paths);
array_shift($paths);
$pathauto = implode('/', $paths);
return $pathauto;
}
Затем добавьте этот "[node:taxonomy_path]/[node:title]" в паттерны патхауто.