Есть два типа материала - производитель авто и модель авто. Установил модуль node reference, создал ссылку из модели авто на производителя. Для каждого производителя прописываю его название в качестве синонима URL. Получается, что страница, например, Audi доступна по адресу mysite.ru/audi (вместо mysite.ru/node/12). Хочу сделать, чтобы при входе на эту страницу отображался бы список всех моделей авто данного производителя. Создал соответствующее представление (в виде блока), создал в нем критерии фильтрации: "Содержимое: Опубликовано (Да), Содержимое: Тип (= Модель авто)", настроил вывод как хотелось, оно работает. На данном этапе на странице любого производителя выводятся все модели всех производителей.
Добавляю контекстный фильтр: "Содержимое: Производитель авто". И вот тут уже не все понятно. Если в предпросмотре представления указать номер ноды производителя (12 для Audi в моем случае), то видно, что фильтр срабатывает. Но при просмотре на сайте этот номер сейчас никак не передается и вывод оказывается пустой. Я так понимаю, требуется как-то передавать этот ID через URL, чтобы получилось что-то типа: mysite.ru/audi?vendor_id=12 и тогда view получит этот аргумент, применит его и все отфильтрует. Но это получается тавтология, получается, что я дважды передаю информацию о производителе. Более того страница производителя - это же нода, значит ее номер наверняка можно как-то передать напрямую во view. Но как?
Комментарии
Жаль, что никто не ответил. А проблемка решается крайне просто. Отпишусь, вдруг кому понадобится.
Когда создается контекстный фильтр (contextual filter) в представлении (view), то для него необходимо указать источник. Для этого в настройках контекстного фильтра следует в разделе "Когда значение фильтра НЕ доступно" выбрать пункт "Предоставить значение по умолчанию" и в выпадающем списке выбрать вариант "ID материала из URL". Готово! Все замечательно работает, при этом URL не содержит в чистом виде никаких ID.
У меня тоже такая проблема. Не могли бы взглянуть вот сюда?
Решаю похожую задачу, но так как использую EVA, то сделал представление Entity Content, настроил контекстные фильтры, как надо, но на нужной ноде все связанные материалы не выводятся. Коллеги, помогите!
Телепатов тут нет. Опишите подробно, что хотите получить, какие есть сущности, как они связаны, какие настройки и т.д.
Спасибо, что отозвались!
Есть материалы типа "Населённый пункт" и "Данные переписи". При создании или редактировании населённого пункта можно делать ссылку на один или несколько материалов типа "Данные переписи" через Node Reference (Drupal 7). Мне необходимо в таблице выводить список данных переписи на странице населённого пункта. Соответственно мои настройки view:
Тип представления: Entity Content (EVA)
Формат: Таблица
Критерии фильтрации: Содержимое: Опубликовано (Да), Содержимое: Тип (= Запись СНМ 1873)
Entity content settings
Тип сущности: Материал
Связки: Населённый пункт
Аргументы: id
Отношения
Содержимое: Номер в СНМ 1873 г. (поле node reference)
С такими настройками view отображается на всех нодах типа "Населённый пункт". Если добавить контекстный аргумент по nid и использовать связь из Отношений, то view уже нигде не отображается.
Заранее спасибо, если кто попробует помочь.
Да, чуть не забыл, в Drupal 6 использовать тип представления "содержимое материала" и просто добавлял аргумент "Материал: Nid" и всё работало. Но с EVA такого не получается.
Забавно, но я с самого начала создал представление типа "Блок", ннастроил контекстные фильтры и вывел этот блок на странице. В результате вызывается действие "Поведение при отсутствии результатов". Если удалить контекстные фильтры, то отображаются все ноды "Данные переписи" на всех страницах. Если в настройках контекстных фильтров "Когда значение фильтра НЕ доступно" указать "Отобразить все результаты для указанного поля", то блок так же отображается везде.
Люди, помогите, делаю социальный проект, поддерживать буду сам, денег не беру. Нужна помощь!
Пробовал прописать PHP код для проверки контекстного фильтра:
<?php
$node = node_load(arg(1));
$rez = $node->nid;
return $rez;
?>
Но в итоге то же - вызывается действие "Поведение при отсутствии результатов".
Проблему оказалось быстрее и полезнее решить самостоятельно...
А написать как вы это сделали религия не позволила?
У меня аналогичная ситуация, но от того, что у вас это получилось самостоятельно мне не легче...
Я сам допустил ошибку по невнимательности. Мне нужно было вывести список нод, не ссылающиеся на данную, а все, на которые данная нода ссылается. Сделал через "Отношения". По решению же Вашей проблемы Technician описал всё верно. Если, конечно, Вы так же не ошиблись как и я, из-за невнимательности.
Так, похоже, никому ничего непонятно.
Распишу тогда все по пунктам для полного просветления. Пусть у нас есть Производители авто и Модели авто, и мы хотим создать страницы производителей, на которых будут перечислены все модели авто данного производителя.
1. Подключаем модули References, Views, Display Suite.
2. Создаем свои типы материалов "Производитель авто" и "Модель авто". В "Модель авто" добавляем поле "Производитель", тип поля "Ссылка на материал", в настройках указываем, что ссылаться можно на тип материала "Производитель авто".
3. Создаем представление в виде блока "Модели авто данного производителя". Выдачу информации можно настроить как угодно, любые поля (Заголовок, Изображение и т.д.) и в любом виде, это на суть не влияет. В критериях фильтрации указываем "Содержимое:Опубликовано = Да, Содержимое:Тип = Модель авто". В контекстном фильтре добавляем условие "Содержимое:Производитель авто", в его настройках указываем "Когда значение фильтра НЕ доступно"-"Предоставить значение по умолчанию" и из списка выбираем "ID материала из URL". Чтобы проверить правильность работы представления, можно внизу в поле "Предпросмотр с контекстными фильтрами ввести ID ноды производителя. Например, производитель Audi отображается по адресу /node/12. Значит, надо ввести число 12, нажать "Обновить предпросмотр" и увидим список моделей Audi.
4. Теперь блочное представление "Модели авто данного производителя" надо превратить в поле, которое можно вывести в ноде. Для этого заходим в "Структура-Display Suite-Поля" и добавляем там блочное поле "Модели авто". В настройках выбираем созданный в п.3 блок из списка и настраиваем, где будет доступно это поле и выводить ли заголовок блока.
5. В настройках типа материала "Производитель авто" в управлении отображением надо выбрать какой-нибудь макет (это поле появляется после установки Display Suite). После этого блочное поле, созданное в п.4, будет доступно в списке полей (сначала попадет в "Отключено"). Ставим это поле в нужное место макета и при входе в режиме просмотра на ноду производителя видим инфу о производителе и список его моделей.
Помогите пожалуйста с реализацией следующего:
«в контекстном фильтре добавляем условие "Содержимое:Производитель авто"»
Могу выбрать только фильтр "Содержимое:Тип" А где дальше указать этот самый тип?
Либо можно выбрать поля этого типа.
Отвечаю, тем кто вдруг может также сглупить как я)))
Нужно выбрать поле referer'а. материала Модель авто.
вместо этого создал node--[type].tpl.php
и там вывел представление программно:
<?php print views_embed_view('multimedia', 'block_9'); ?>
данные для функции можно взять из url http://site .ru/admin/structure/views/view/multimedia/edit/block_9 при редактированни этого представления, в даннов случае: Модели авто
в результате не нужно ставить модуль Display suite.
И спасибо за подробное описание, пригодилось для отображения отзывов по книгам.