Собрать один материал из нескольких по термину таксономии во views

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

Аватар пользователя Maksimus_black Maksimus_black 26 апреля 2011 в 11:47

Добрый день уважаемые форумчане!
Есть маленький вопросик:
Имеется словарь -- "ФИО" и два типа материалов -- "Новости" и "Персоны".
Оба эти типа имеют связь по термину со словарём "ФИО" (т.е. при добавление любого типа материала мы выбираем к какому термину словаря ФИО его отнести)
Материал "Новости" состоит из заголовка и содержимого.
Материал "персоны" состоит из заголовка, фото, и содержимого.
Так вот сам вопрос:
Нужно сделать такой вьювс чтобы в нём отображалось:
1. заголовок "Новости"
2. Фото из материала "Персоны"
3. Краткое собержимое материала "Персоны"
4. Краткое содержимое материала "Новости"
Т.е. по сути стоит задача, что бы при добавление новости и выводе её на главную, на главной выводилась новость с фото и краткой биографией той персоны к которой относится новость.
Заранее благодарен за конструктивную помощь Smile

Комментарии

Аватар пользователя oboroten oboroten 26 апреля 2011 в 20:25

М-м-м... Наверное cck nodereference + views + темизация.

Создаём персоны с наполнением (фото и.п.)
Создаём новость с полем нодереференсе на персоны. и при создании новости привязываем к ней персону

Затем вювс. Для начала вювс для тизера новости views attach и цепляем тизер персоны к тизеру новости (или полями - это уже по желанию)
Теперь вювс для главной просто тизеры новостей собсно всё а дальше темизация и фантазия.

Аватар пользователя Maksimus_black Maksimus_black 26 апреля 2011 в 21:31

Это-то всё да, так можно сделать.
ТОлько тут такой момент: Зачем мне нодреференс и по 2 лишних поля в одной новоти (1-ое: словарь таксономии ФИО, 2-ое: нодреференс), если у меня уже есть связь через термин этого словаря ФИО.
Неужели нет такого варианта, что бы во вьювсе связать их через термин словаря ?

Аватар пользователя oboroten oboroten 26 апреля 2011 в 22:48

темизация типа материала новости.
можно например взять этот снипет http://content-management-systems.info/drupal/snippet/596 и немного подправить что бы в итоге получить материалы типа персоны для данного термина. ну и соответственно оформить.

Аватар пользователя lastuser lastuser 28 августа 2011 в 18:31

Некропостинг, но вдруг кому пригодится мой опыт по связыванию двух типов материалов с одним и тем же термином таксономии:

Итак, есть словарь таксономии со списком стран. Есть два типа материалов - Страна и Видео, в обоих типах материалов есть поле таксономии (т.е. в материале "Страна" указывается термин, в материале "Видео" также указывается термин). Задача - подвязать к материалу с определенным термином видео с аналогичным термином.

Сперва я аналогично пошел методом nodereference && corresponding node reference, но спустя какое-то время дублирование одной и той же связи мне в разных местах меня утомило - по сути, приходится делать двойную работу. Тогда я решил организовать это средствами Views3. После некоторой возни с настройками у меня получилось примерно следующее:

Кратко объясню, что получилось:
1) я передал во Views NID (в моем случае это nid страницы страны).
2) я добавил в Relationships Содержимое: Taxonomy terms on node (чтобы получить список терминов), выставил "Require this relationship" и указал словарь таксономии.
3) Далее в Relationship я прикрутил Термин таксономии: Содержимое using Тег (в данном случае Тег - поле таксономии в типе содержимого "Видео"). На этом этапе я уже имею список материалов типа "Видео", имеющих тот же термин таксономии, что и родительская страница "Страна".
4) Теперь осталось только вытащить само видео из этого списка, поэтому в Fields я сделал выборку поля field_video из типа материала "Видео", указав в качестве Relationship Термин таксономии: Содержимое using Тег. Если не указать Relationship, то фокус не получится.

Дальше я прикрутил этот views к материалу через quick tabs, передал %1 - все заработало.

Вот, собственно, и все. Кстати, если надо будет встраивать youtube в 7-ку, то можно воспользоваться этой статьей - Embedded media field пока что на 7-ку не портирован, а вставка в лоб поля типа Multimedia asset не работает, тут понадобится особая, уличная магия, чтобы все заработало.

Аватар пользователя EfremovAV EfremovAV 14 августа 2012 в 15:53

«Итак, есть словарь таксономии со списком стран. Есть два типа материалов - Страна и Видео, в обоих типах материалов есть поле таксономии (т.е. в материале "Страна" указывается термин, в материале "Видео" также указывается термин). Задача - подвязать к материалу с определенным термином видео с аналогичным термином.»

А если сделать по другому:
1.Фильтр по матерериалу типа "Видео"
2. Поле "Материал:Название"
3. Аргумент "Таксономия: ID термина". Тип аргумента по умолчанию - PHP-код:

<?php
//Проверка, что мы находимся в материале, но не на главной странице
if (arg(0) =='node'  && is_numeric(arg(1)) && !drupal_is_front_page() )
[
//Загружаем ноду с номером из URL
$node=node_load(arg(1));
if (
$node
{
 
//Создаем массив из ID терминов таксономии, относящихся к данной ноде 
 
foreach ($node->taxonomy as $term) {$terms[]=$term->tid;}
//Возвращаем список id терминов, разделенноых '+' (если их несколько)
if (count($terms)>0) {return implode('+',$terms);}
}
}
?>

Ну и естественно ставим проверки по словарю, выбираем тип аргумента и разрешаем несколько терминов в аргументе.

Вроде как все правильно, но ничего не выводит. Что не так я делаю?

Аватар пользователя EfremovAV EfremovAV 15 августа 2012 в 12:48

Проблема возникает при использовании нескольких терминов в арагументе. Если указать, что будет 1 и убрать из кода implode, то по 1 термину все ок

<?php
//Проверка, что мы находимся в материале, но не на главной странице
if (arg(0) =='node'  && is_numeric(arg(1)) && !drupal_is_front_page() )
[
//Загружаем ноду с номером из URL
$node=node_load(arg(1));
if (
$node
{
 
//Создаем массив из ID терминов таксономии, относящихся к данной ноде 
 
foreach ($node->taxonomy as $term) {$terms[]=$term->tid;}
//Возвращаем список id терминов, разделенноых '+' (если их несколько)
if (count($terms)>0) {return $terms[1];}
}
}

?>

Получается views не может обработать несколько терминов в аргументе?