Drupal → Модуль Views attach — вывод представления как часть материала

30.07.2010

Модуль Views attach позволяет вывести представление как часть материала или профиля пользователя. Работает вместе с модулем Node Reference из состава CCK.

Таблица, выведенная с помощью Views attach

Для примера создадим простенький каталог товаров и магазинов. При добавлении товара нужно будет выбрать магазин, в котором он продаётся. При просмотре магазина, будут выводится ассортимент магазина — товары, которые продаются в этом магазине.

Используемые модули: Views, Views attach, CCK, Node Reference (входит в состав CCK).

  1. Создаём тип содержимого Магазин (shop) без дополнительных полей.

  2. Создаём тип содержимого Товар (product) с CCK полями Цена (Numeric) и Магазин (Node Reference):

    Список полей материала типа 'Товар'

    Настройки поля Магазин:

    — Тип виджета: Флажки/радио кнопки
    — Количество значений: Не ограничено
    — Типы содержимого, на которые можно ссылаться: Магазин

    Настройки поля 'Товар'

  3. Добавляем несколько магазинов.

  4. Добавляем несколько товаров, выбирая в каких магазинах есть этот товар:

    Форма добавления товара

  5. Создаём представление product_in_some_shop

    — Название: Ассортимент
    — Стиль: Таблица
    — Заголовок: <h3>Ассортимент</h3> (Full HTML)
    — Поля: Заголовок материала, Цена
    — Фильтр: Тип материала = Товар
    — Аргументы: Магазин (field_shop)

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

  6. Добавляем вид Содержимое материала (Node content)

    Добавление вида 'Содержимое материала'

    В блоке Node content settings изменяем настройки:

    — Типы материалов: Магазин
    — Место вывода: Материал полностью

    Настройки вида 'Содержимое материала' (Ассортимент)

  7. Сохраняем все изменения.

После этих манипуляций, у каждого магазина появится список продающихся товаров, как на картинке в начале поста.

Видео-урок на английском:

Под Drupal 7 есть родственный модуль Entity Views Attachment.

Написанное актуально для
Views 6.x-2.x, Views attach 6.x-2.2
Похожие записи

Комментарии

Андрей
02.03.2011, 20:03

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

добавьте к магазину поле node reference

Андрей
02.03.2011, 20:56

Что даст, то, что я в магазине сделаю нод референс? тогда в товаре будут выводится поля с магазина, а в самом магазине появится ссылка на ноду с товаром, а мне надо что выводилось так же, как из этого урока, только выбор товаров был при добавлении магазина... уже долго мучаюсь и создаётся ощущение, что это невозможно :(

Что даст, то, что я в магазине сделаю нод референс?

можно будет выбирать товары при добавлении/редактировании магазина

тогда в товаре будут выводится поля с магазина, а в самом магазине появится ссылка на ноду с товаром

отображение полей - исключить

Андрей
02.03.2011, 21:13

в таком случае ничего не выводится и самое главное - не выводится нода с товаром

не выводится нода с товаром

куда она должна выводится?

Андрей
02.03.2011, 21:18

не правильно выразился, не выводятся нужные поля из ноды с товаром в ноду с магазином

ну дак для этого есть модуль views attach

Андрей
02.03.2011, 21:54

я почти сделал как надо, только не хватает маленькой мелочи :) при выборе товаров из магазина - товары выводятся, но выводятся все! И галочка нод референс при редактировании/добавлении роли уже не играет... я что то не так сделал?..

в аргументах представления что?

1. добавляете взаимосвязь по вашему полю node reference
2. добавляете аргумент node:nid без указания взаимосвязи с дефолтным значением - Node ID from URL
3. добавляете необходимые поля с указанием взаимосвязи

Андрей
03.03.2011, 00:19

так вообще всё перестало выводиться

Андрей
03.03.2011, 00:43

Спасибо большое!!!! Вы первый человек, который смог мне нормально помочь!

та на здаровье) главное поймите как это работает, чтобы в следующий раз не забуксовать снова

Андрей
03.03.2011, 01:48

А может ещё подскажете как вывести это не в самой ноде, а под нодой? То есть между нодой и комментами? Если это на долго, то не надо, просто может простой способ есть?

views attach так и выводит - под контентом

winniepoo
09.03.2011, 18:40

Спасибо за материал. Я для таких же задач привык использовать
http://drupal.org/project/viewfield
На первый взгляд отличия - в том что представление создается обычным образом, а потом просто цепляется как поле средствами CCK (с возможностью передачи параметров во вьюху).
Соответств. цепляется в любое место ноды.
Есть какие-нить соображения - когда какой вариант предпочтительнее?

viewfield не использовал, поэтому соображений нет

buldozer_kpi
08.04.2011, 15:56

А как решить немного другую задачу? Есть два типа материалов - товар и магазин. При выводе товара под ним должен выводится список магазинов, где он продаётся, да и ещё по какой цене в каждом конкретном магазине. Голову сломал уже.

При выводе товара под ним должен выводится список магазинов, где он продаётся

Node Reference

buldozer_kpi
09.04.2011, 01:12

Ну это я понял. У меня по большей степени проблема в том, ка сделать для одного товара несколько цен в зависимости от магазина. Как в этом случае организовать ССК поля и сами типы материала?

гуглите в сторону составных cck полей

buldozer_kpi
14.04.2011, 00:28

Огромное человеческое спасибо!

Как велик друпал: (подходов разных много, но выбрать должен ты один))))
viewreference
viewfield
views_attach
Разные модули со схожим функционалом для 6.x

Андрей
14.07.2011, 02:45

Добрый вечер.
Можно ли с помощью этого модуля сделать более сложную связку:
Например есть Бренд, Телефон и Аксессуар
Телефон через Node Reference привязан к Бренду
Аксессуар тоже через Node Reference привязан к Бренду
Задача: на странице Телефона вывести блок со всеми Аксессуарами для Бренда этого Телефона.

Сегодня пол дня провозился с аргументами, тольку 0. :(

аргументе по node reference полю Бренд - подставить аргумент по умолчанию - php код -

$node = node_load(rag(1));
return $node->field_brand[...];

как то так

Андрей
14.07.2011, 03:28

Что обозначает первая строчка? С ней вылетает ошибка 500

$node = node_load(rag(1));
return $node->field_phone_brand[0]['nid'];

Я правильно понимаю что поле Бренд должно быть одно и тоже? Или нужно создать разные поля node reference для Телефонов и Аксессуаров?

Спасибо!

Андрей
14.07.2011, 03:42

Супер! Вечер не потерян))) Спасибо еще раз!

Игорь
13.10.2011, 12:27

Под Drupal 7 есть родственный модуль Entity Views Attachment.
А где можно почитать, посмотреть как им пользоваться?

как им пользоваться?

точно так же

Игорь
13.10.2011, 12:36

— Место вывода: Материал полностью - что в 7-ке не нашел подобного?

Игорь
13.10.2011, 12:39

Entity content: Связки
Attach this display to the following bundles - отметил материал - но в нём ничего не показывается?

Игорь
13.10.2011, 12:48

Видимо кеш не очистился... всё ок... спасибо за пост.

Андрей
27.01.2012, 20:41

Я с вами переписывался с начала комментов и до этого сообщения: http://xandeadx.ru/blog/drupal/173#comment-1355.

Перенёс на семёрку, получилось настроить то же самое, только с одним маленьким глюком. Выводится всё содержимое вместе с тайтлом, кол-вом просмотров, а так же кем и когда опубликовано, а мне надо только что бы из поле body бралось, не нашёл настройки такой :(

Андрей
27.01.2012, 21:01

Вы про отображение полей в типах материала?

Андрей
27.01.2012, 21:46

не могу во вьюсах найти в каком разделе show content есть :(

надо ставить выводить поля, а не содержимое

Андрей
27.01.2012, 22:53

сделал показать поля, выводится точно так же :)

Андрей
27.01.2012, 23:25

Значит вариантов больше нету?(((

оно не может физически выводиться точно так же

Андрей
28.01.2012, 03:44

я же писал, что вывел поля и на скриншотах показал...

Андрей
28.01.2012, 05:41

Спасибо, теперь всё понял)))) Никак не могу привыкнуть нормально к 7 друпалу)))

Андрей
29.01.2012, 18:19

Я нашёл в чём проблема, оказывается во вьюхе просто надо отключить навигатор :)

Гость
09.03.2012, 03:34

Связка Drupal 7.12 + Views 7.x-3.3 + Node Reference 7.x-2.0 + References 7.x-2.0 + Eva 7.x-1.1

Попробовал ваш тестовый вариант прогнать на 7-ке, табличка как у вас вместе с названием товаров в магазине получилась, только вот для всех магазинов показывается всегда полный перечень товаров, что вообще существуют, а не те, которые отмечены для каждого магазина в отдельности.
Скриншот настройки представления: http://piccy.info/view3/2725544/bccaaa75ddda088a849853e4a0acbf08/orig/
Подскажите, пожалуйста, где может быть ошибка?

забыли добавить контекстный фильтр

Гость
09.03.2012, 13:37

Пробовал в контекстный фильтр аналогично поставить на тип содержимого=товар, не помогло.

Гость
09.03.2012, 13:42

Ой... наверное не выспался, понял, контекстный фильтр- Содержимое: Магазин.
Все ОК, заработала выборка, СПС.

Гость
12.03.2012, 17:13

Здравствуйте! Сделал два типа материала: Товар и Отзыв. В отзыве сделал ссылку на товар. Аналогичным образом проделал как у Вас написано. В итоге, во вьюс в предпросмотре, когда вводишь аргумент ноды, выводит то что нужно(отзывы данного id товара). Но на странице ноды товара почему то не выводятся отзывы. С чем это может быть связано? Подскажите, пожалуйста. На всякий случай, два скриншота:
http://s019.radikal.ru/i639/1203/af/0663cce30015.jpg
http://s019.radikal.ru/i641/1203/69/5b0cd1ca426b.jpg

Гость
13.06.2012, 12:10

Подскажите, пожалуйста, можно ли с помощью этого EVA модуля технически решить такую задачу:
есть нода - новые авто, есть нода - автосалон. Необходимо связать 2 этих ноды так, чтобы при просмотре автосалон отображались авто, которые там продаются с соответствующими ценами именно в данном автосалоне + цены конкурентов, а при просмотре ноды новые авто отображались автосалоны, где это авто продается, с разными ценами в списке автосалонов?
Или одного этого модуля будет недостаточно для связки 2 типов таких нод?

модуль ничего не связывает, он выводит views как часть содержимого

Гость
13.06.2012, 12:16

Хорошо, перефразируем, добавить к соответствующим нодам соответствующие представления. Ибо у вас цены то фиксированные для всех магазинов... а зачастую цены в разных магазинах как раз разные.

Гость
13.06.2012, 12:20

Т.е. технически этот модуль Entity Views Attachment как раз подходит, правильно?

если вам нужно вывести представление как часть содержимого, то да

Гость
13.06.2012, 12:27

ОК, спс за подсказки, буду пытаться решить задачу с помощью Entity Views Attachment и Node Reference.

Гость
03.07.2012, 14:00

Допустим, как у вас в примере, есть магазины и есть товары.
Подскажите, пожалуйста, как (с помощью какого модуля) разрешить возможность (организовать проверку) автору создать ноду "Товар" только(!) при наличии заранее созданной хотя-бы одной ноды "Магазин" от того же автора?

Гость
03.07.2012, 22:33

Вопрос по поримеру выше.
Я включил в ноду "Магазин" дополнительное поле в виде логического чекбокса с единственным значением "Включить отображение ассортимента товаров".
Затем добавил в представление product_in_some_shop дополнительный критерий фильтрации по данному допонительному полю и отметил галочкой значение "Включить отображение ассортимента товаров" чтобы показывать представление product_in_some_shop только для тех магазинов, где указал автор при создании ноды "Магазин".
В итоге результат product_in_some_shop не показывается для данного фильтра, хоть поле было отмечено при создании ноды "Магазин", а как только отмечаю в фильтре "Все значения", то product_in_some_shop показывает товары. Получается, что данный фильтр не хочет работать.
Подскажите, что я делаю не так?

Гость
03.07.2012, 23:08

Также пытался включит проверку по данному полю в контекстные фильтры, но тоже не работает...

Гость
03.07.2012, 23:55

Почитал повнимательнее, что писалось выше, и решил задачу с чекбоксом, правда с помощью не чекбокс-поля, а создав вместо него поле View reference.

Добавить комментарий