[РЕШЕНО]URI термина таксономии относительно типа материала

Главные вкладки

Аватар пользователя CASHMAR CASHMAR 15 июня 2011 в 18:29

Есть:

  • Словарь таксономии "Словарь".
  • Два типа материалов "Ctype1" и "Ctype2" (в каждом из них есть Content Taxonomy поле из "Словаря").

Нужно:

  • Изменить ссылки терминов относительно типа материала (для "Ctype1" - /ctype1/tid, для "Ctype2" - /ctype2/tid).

Пробовал копаться в Taxonomy Redirect и Pathauto, но ума не приложу как достать тип материала из термина таксономии просматриваемой ноды (Pathauto автоматом обновляет всё вне зависимости от типа материала).
Единственный некошерный выход, который вижу - продублировать "Словарь" отдельно для "Ctype2". Но это сильно увесисто и неправильно.

Необходимо, чтобы при клике по термину юзер попадал на страницу сортировки материалов этого же типа.

Буду признателен за любой совет и помощь.

Комментарии

Аватар пользователя CASHMAR CASHMAR 15 июня 2011 в 22:05

Да, в курсе.
Но как передать информацию о типе материала, чтобы в этой вьюшке вывелись только ноды этого же типа?

Аватар пользователя CASHMAR CASHMAR 15 июня 2011 в 23:39

"q2_faith" wrote:
не уверен, но посмотрите  http://drupal.org/project/taxonomy_filter[/quote]
В молоко. =[

Сейчас копаю в сторону template_preprocess_node(). Идея в том, чтобы изменять ссылки терминов в момент рендера страницы (если не ошибаюсь, Content Taxonomy пихает свои данные в $variables['terms']). Покопался в сети, но так и не понял как это реализовать.
Подскажите что писать в препроцессе?

Аватар пользователя Xermit Xermit 16 июня 2011 в 2:04

Не совсем понятен вопрос.
Вы хотите изменить ссылки, которые выводятся в

на ваши
или хотите темизировать вывод cck поля content taxonomy в составе материала,
если второе, то надо просто темизировать вывод cck поля, а если первое,
что более вероятно, то для этого есть стандартный хук. В который помимо всех ссылок на термины, также передается $node, которая содержит материал для которого эти термины выводятся, если они был назначены для данного материала ранее.
Для этой цели есть стандартный хук, придется разместить его в своем модуле.
function ваш_модуль_link_alter(&$links, $node)
{
  foreach ((object)$node->taxonomy as $term)
  {
    $path = array();

    $path[] = explode('/', $links['taxonomy_term_'. $term->tid]['href']);
    //удалить те части пути которые не надо из $path
    ....
    //вставить новые части пути
    $path[] = $node->type;

    //установить новый путь
    $links['taxonomy_term_'. $term->tid]['href'] = implode('/', $path);      
  }
}

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

Аватар пользователя CASHMAR CASHMAR 17 июня 2011 в 17:20

хук link_alter() - то, что нужно.
Мне необходимо изменить href Content Taxonomy поля.

Пихаю в сэлфмэйд модуль имплементацию хука

<?php
function termlinks_ovrd_link_alter(&$links, $node) {
  foreach ((object)$node->taxonomy as $term) {
    $path = $node->type ."/". $term->tid;
    $links['taxonomy_term_'. $term->tid]['href'] = $path;
  }
}
?>

Включение модуля влечёт белый экран.

Аватар пользователя Xermit Xermit 17 июня 2011 в 19:18

А что в php_errors при этом? в логах то есть.
в принципе может быть ситуация когда в $links
нет элемента по этому ключу 'taxonomy_term_'. $term->tid
можно проверку вставить

function termlinks_ovrd_link_alter(&$links, $node) {
  foreach ((object)$node->taxonomy as $term) {
    $path = $node->type ."/". $term->tid;
    if ($links['taxonomy_term_'. $term->tid])
    {
      $links['taxonomy_term_'. $term->tid]['href'] = $path;
    }
  }
}
Аватар пользователя CASHMAR CASHMAR 17 июня 2011 в 19:45

Разрешил проблему с белым экраном пересозданием модуля под новым именем.
(в ошибках писалось о том, что хэдэры уже посланы "Cannot modify header information - headers already sent")

Сейчас модуль успешно включается, но подменяет только ссылки, выводимые стандартным модулем таксономии. То есть, ссылки CCK полей Content Taxonomy не изменяются.

Неужто, Content Taxonomy пихает свои ссылки в другое место массива $links? Покопался в коде Content Taxonomy, но пока не нашёл ничего.

Аватар пользователя CASHMAR CASHMAR 19 июня 2011 в 0:42

Кошернее было бы впихнуть решение в отдельный модуль. Но поиски пока не дали желаемых результатов.
Посему решил проблему пресловутым сниппетом в content-field-my_field.tpl.php.
Всё работает.
Осталось дождаться релиза Views 3 и можно динамически изменять значения exposed filters (а то и sort criterias) относительно URL аргумента.