Синоним термина таксономии как аргумент Views D7

Вывод материалов содержащих термин таксономии с помощью Views, когда в качестве аргумента задается синоним (алиас) термина таксономии.

Потратил некоторое время на поиски решения, но явного ответа не нашел.
Поделюсь, может кому-то пригодится.

Имеем термин таксономии:

имя термина – “Масштабные модели”
синоним URL, созданный Pathauto – ”masshtabnie-modeli”
системный путь – “taxonomy/term/10”

Есть представление для вывода материалов, содержащих термин таксономии. Путь представления /mv.
В представлении есть контекстный фильтр “Содержимое: Имеет идентификатор термина таксономии (с глубиной)”.
По умолчанию критерий проверки аргумента стоит “Термин таксономии”.

Если в качестве значения фильтра указать “ID термина”, то нужные материалы выводятся по адресу:

mysite.com/mv/10

Если в качестве значения фильтра указать “Название термина”, то нужные материалы выводятся по адресу:

mysite.com/mv/масштабные%20модели

А хотелось бы, что бы материалы выводились по адресу:

mysite.com/mv/masshtabnie-modeli

Проблема в том, что в D7 отсутствует проверка аргумента ”Термин таксономии” по синониму (алиасу).
Решение подсказал этот топик http://www.drupal.ru/node/26975.

Выбираем в качестве критерия проверки ”PHP-код”. И прописываем, собственно, код для проверки:

// ищем системный путь для синонима термина
//
$url = drupal_lookup_path('source', $argument);

if ($url != false)
{
// если путь найден, проверяем, что это путь к термину таксономии
//
$term_base_path = 'taxonomy/term/';

if (strncmp($term_base_path, $url, strlen($term_base_path)) == 0)
{
// вырезаем префикс 'taxonomy/term/', оставшееся значение преобразуем в число
// и заменяем аргумент вьюса на полученный ID термина таксономии
//
$handler->argument = intval(str_replace($term_base_path, '', $url));
}
}
return TRUE;

?>

Категория: 
The code is not tested and may not work

Add new comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.