Категория:
Опубликовано:

Представление внутри представления. Часть 2

Представление в представлении

В предыдущем посте было описано как вывести представление внутри другого представления, в шапке/подвале, а так же при отсутствии результатов в основном представлении.

Ниже будет описан способ вывода представления в качестве отдельного поля.

Может пригодится если, например, нужно вывести список категорий (терминов), и для каждой категории вывести по 5 материалов относящихся к ней.

Шаг 1. Установка модуля

Нам нужно установить и включить модуль Views Field View.

Рассмотрим работу модуля на примере приведенном выше:

Шаг 2. Создание представления материалов

Для начала создадим представление в котором будет отображаться список из 5-ти материалов связанных с категорией.

Создаем представление по материалам нужных нам типов содержимого. При необходимости добавляем сортировку, например выводим последние добавленные материалы вначале.

Страница нам не нужна, создадим только блок. Заголовок указывать не нужно.

Выбираем поля в качестве вывода содержимого. Указываем необходимое количество выводимых материалов, в нашем случае ставим 5. Постраничный навигатор не нужен.

Сохраняем и переходим к настройке представления.

Из полей сейчас выводится заголовок материала со ссылкой на его страницу. Это именно то что нам сейчас нужно. Если же нужен выввод других данных можно поиграться с дополнительными полями, или настроить вывод специального дисплея содержимого и выводить его вместо полей.

В разделе "Расширенный" добавляем контекстный фильтр "Содержимое: Имеет идентификатор термина таксономии".

Контекстный фильтр

В настройках фильтра указываем поведение при недоступности значения фильтра: "Передать значение по умолчанию" -> "ID термина таксономии из URL" и отмечаем "Загрузить фильтр по умолчанию со страницы термина".

Настройка контекстного фильтра

Сохраняем настройки фильтра и представление.

Шаг 3. Создание представления категорий

Создаем представление по терминам таксономии из нужного словаря. В качестве содержимого выводим поля. И переходим на страницу редактирования представления.

По умолчанию выводится поле с названием термина ссылающегося на его страницу, для нашей задачи это не обязательно - уберем ссылку. Это можно сделать в настройках поля, сняв галку с опции "Сделать это поле ссылкой на страницу его термина таксономии".

Теперь нужно добавить поле с ID термина (TID).

ID термина таксономии

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

Настройки поля TID

Далее добавляем поле "Глобальный: Просмотр".

Поле Глобальный Просмотр

Убираем метку.

В настройках представления выбираем созданное представление по материалам и необходимый дисплей.

В качестве значения контекстного фильтра вставляем токен в котором будет передаваться ID текущего термина. Посмотреть этот токен можно в филдсете "Подстановочные шаблоны" который находится немного ниже. В нашем случае это [!tid]

Сохраняем поле и представление.

Готово.

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.

Комментарии

По вашему образцу создал представление по "пользователю", в которое добавил поле-представление по "содержимому пользователя". Как сделать (какой и где фильтр поставить), чтоб это поле не было видно если роль текущего пользователя = admin?

Добавьте фильтр по роли в представление по пользователю.

Как сделать (какой и где фильтр поставить), чтоб это поле не было видно если роль ТЕКУЩЕГО ПОЛЬЗОВАТЕЛЯ = admin?

Попробуйте так:

  • Контекстный фильтр по роли
  • Передать значение по умолчанию - ID авторизовавшегося пользователя
  • Когда значение фильтра ДОСТУПНО или предоставлено по умолчанию - Укажите критерии проверки - Пользователь - Ограничить пользователя, в зависимости от роли - Выбираете роль
  • Действие в случае если значение фильтра недействительно - Скрыть представление

Ни чего не выходит. Во вьюс есть графа: "доступ". Там можно указать : роль - админ. Может есть модуль расширяющий эту возможность? Модуль инвертирующий результат? (роль - не админ)

Отметьте роли отличные от "Админ"

так не работает, все пользователи имеют роль "авторизованный пользователь", если я ее отмечу, то вьюс сработает и для пользователя "админ" тоже. нужно чтоб была инверсия как в модуле панели. Но не хочу его ставить..., может есть модуль расширяющий вьюс или другой способ?

Модуль расширяет возможности кеширования представлений.

Создал представление по "пользователю" (таблица: имя; активный; кол-во материалов пользователя). для последнего столба добавляю связь "Пользователь: Содержимое присвоено автору" , включаю агрегацию , добавляю поле содержимое: NID суммирую результат. Все работает если войти как админ, иначе в таблице отсутствуют пользователи не опубликовавшие материал. почему?

Проверьте, не стоит ли галка "Эта связь обязательна" в настройках связи "Пользователь: Содержимое присвоено автору".

Проверял, не стоит. А если б стояла то и для админа скрывала пользователей , не имеющих материалов.

Здравствуйте, создал представление для главной страницы сайта по вашему руководству, все получилось нормально. Решил еще создать представление для всех терминов таксономии по такой же схеме, но не получается. Когда для страницы указываю путь taxonomy/term/%, то ни title ни заголовок не появляется, и при переходе по ссылкам меню таксономии все они ведут на одну и ту же страницу. Не подскажите в чем может быть причина?

Для переопределения страницы термина нужен контекстный фильтр по tid. Посмотрите стандартное представление (taxonomy/term/%).

Так же, можно использовать специализированные модули, например: Taxonomy display

Дело в том что мне нужно выводить по несколько статей из дочерних категорий, т.е. если мы переходим на страницу авто, то там должны быть по несколько статей из всех дочерних категорий, вот так:
Страница АВТО
<strong>Легковые автомобили</strong>
Статья 1
Статья 2
Статья 3
<strong>Грузовые автомобили</strong>
Статья 1
Статья 2
Статья 2
Не подскажите как такое сделать, а то у меня получается что выводятся по несколько статей самой категории АВТО

Нужен фильтр по TID с глубиной + модификатор. Опять же, посмотрите как реализовано стандартное представление admin/structure/views/view/taxonomy_term/edit

Все делал по стандартному представлению, там только один контекстный фильтр (Содержимое: Имеет идентификатор термина таксономии). Не расскажете подробнее про фильтр с глубиной и модификатор. Буду очень вам признателен

tid_depth.pngtid_depth_set.png

Спасибо, но у меня представление создано как Термин таксономии, а не Содержимое и этих полей у меня нет

Пересоздайте/склонируйте

Клонировал представление Термин таксономии, теперь при добавлении полей нет поля Термин таксономии: ID термина

Добавьте связь с термином.

Ничего не получается. У вас в инструкции представление создается как Термин таксономии. А мне получается нужно создать представление типа Содержимое. Если вас не затруднит посмотрите сами.

К сожалению, не располагаю свободным временем.

И крайне не советую оставлять подобную информацию в открытых источниках! Ваш коммент потру.

Спасибо и на этом. Это тестовый сайт.

Доброго дня!
Подскажите пожалуйста, создал представление в виде поля представления. Как теперь можно скрыть те строки основного представления, где при фильтрации находятся значения поля(представления)?

Можно скрыть в настройках полей, которые нужно скрывать.

Скрывать глобальное поле с представлением не требуется, хотелось бы скрыть именно строку представления когда это глобальное поле имеет значение в виде представления
<a href="]]>http://prntscr.com/ke4mhb"></a>]]>

Вы имеете ввиду перезаписать это поле с представлением? но там нет пункта "перезаписать"
<a href="]]>http://prntscr.com/ke4khw"></a>]]>

У Вас таблица - это только альтерить вывод.

Помогите пожалуйста примером или ссылкой на инфу как это сделать?

Благодарю, пошёл изучать.