xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Модуль 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
Похожие записи

Комментарии RSS

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

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

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

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

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

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

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

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

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

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

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

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

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

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

По правде никак не могу понять как с аргументами работать, поэтому поставил как в уроке:
http://www.imagepost.ru/?v=705/SNAG_0003.jpg

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

Всё равно не работает :(
Вот, что я во вьюсах сделал
Вроде всё так же, как вы сказали :(
http://s006.radikal.ru/i213/1103/ec/dc9d2f755401.jpg

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

в аргументах реклама не нужна

http://drupal.org/node/289738

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

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

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

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

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

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

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

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

Node Reference

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

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

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

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

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

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

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

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

как то так

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

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

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

Спасибо!

arg(1), опечатался

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

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

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

точно так же

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

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

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

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

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

show: content

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

я про настройки представления

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

лучше не стало :(

от чего?

я поставил неформатированный список и показать содержимое, но всё равно выводится в таком виде: http://s43.radikal.ru/i102/1201/af/1292d4d9c1a7.jpg

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

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

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

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

моя вьюха: http://s018.radikal.ru/i520/1201/9d/d65f5062e13c.jpg
отображение: http://s018.radikal.ru/i515/1201/b0/4afab704a92b.jpg
всё выглядит так же

так всё таки выхода нет?

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

и где там поле body?

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

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

Связка 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/
Подскажите, пожалуйста, где может быть ошибка?

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

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

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

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

с виду всё правильно

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

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

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

пользуйтесь аргументами

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

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

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

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

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

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании