Есть:
- Словарь таксономии "Словарь".
- Два типа материалов "Ctype1" и "Ctype2" (в каждом из них есть Content Taxonomy поле из "Словаря").
Нужно:
- Изменить ссылки терминов относительно типа материала (для "Ctype1" - /ctype1/tid, для "Ctype2" - /ctype2/tid).
Пробовал копаться в Taxonomy Redirect и Pathauto, но ума не приложу как достать тип материала из термина таксономии просматриваемой ноды (Pathauto автоматом обновляет всё вне зависимости от типа материала).
Единственный некошерный выход, который вижу - продублировать "Словарь" отдельно для "Ctype2". Но это сильно увесисто и неправильно.
Необходимо, чтобы при клике по термину юзер попадал на страницу сортировки материалов этого же типа.
Буду признателен за любой совет и помощь.
Комментарии
во views есть встроенная вьюшка для таксономии
Да, в курсе.
Но как передать информацию о типе материала, чтобы в этой вьюшке вывелись только ноды этого же типа?
не уверен, но посмотрите [module=http://drupal.org/project/taxonomy_filter]
Не совсем понятен вопрос.
Вы хотите изменить ссылки, которые выводятся в
или хотите темизировать вывод cck поля content taxonomy в составе материала,
если второе, то надо просто темизировать вывод cck поля, а если первое,
что более вероятно, то для этого есть стандартный хук. В который помимо всех ссылок на термины, также передается $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);
}
}
когда ваш материал будет выводится друпалом, то ссылки на термины будут указывать туда куда вы хотите определив пути в этой функции.
хук link_alter() - то, что нужно.
Мне необходимо изменить href Content Taxonomy поля.
Пихаю в сэлфмэйд модуль имплементацию хука
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;
}
}
?>
Включение модуля влечёт белый экран.
А что в php_errors при этом? в логах то есть.
в принципе может быть ситуация когда в $links
нет элемента по этому ключу 'taxonomy_term_'. $term->tid
можно проверку вставить
foreach ((object)$node->taxonomy as $term) {
$path = $node->type ."/". $term->tid;
if ($links['taxonomy_term_'. $term->tid])
{
$links['taxonomy_term_'. $term->tid]['href'] = $path;
}
}
}
Разрешил проблему с белым экраном пересозданием модуля под новым именем.
(в ошибках писалось о том, что хэдэры уже посланы "Cannot modify header information - headers already sent")
Сейчас модуль успешно включается, но подменяет только ссылки, выводимые стандартным модулем таксономии. То есть, ссылки CCK полей Content Taxonomy не изменяются.
Неужто, Content Taxonomy пихает свои ссылки в другое место массива $links? Покопался в коде Content Taxonomy, но пока не нашёл ничего.
Ну собственно вы сами ответили на свой вопрос вам надо темизировать вывод cck поля
http://www.drupal.ru/node/56150
Кошернее было бы впихнуть решение в отдельный модуль. Но поиски пока не дали желаемых результатов.
Посему решил проблему пресловутым сниппетом в content-field-my_field.tpl.php.
Всё работает.
Осталось дождаться релиза Views 3 и можно динамически изменять значения exposed filters (а то и sort criterias) относительно URL аргумента.