[Решение] Вывод материалов одного типа на странице другого типа материала. Связь по автору нод.

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

Аватар пользователя Antoniy Antoniy 5 мая 2012 в 23:23

WebFamily создал тему Новости для конкретной ноды где нужно было выводить новости фирмы на странице фирмы (тип материала), но для D7. У меня была похожая задача.

Хотелось решить это без использования Node Reference и User Reference, чтобы сотрудникам фирм не приходилось заполнять поле reference (если на ресурсе каталоге фирм будет сотни фирм, то reference будут не удобны.

Для решения понадобятся доп. модули: Pathauto, Token, Views. Даже без CCK можно обойтись.

1. Создаем пользователя, которому даем права на создание типа материалов, который будет назначен профилем фирмы. Логином пользователя (именем пользователя) делаем краткое название фирмы.

2. В модуле Pathauto + Token. В автоматических алиасах для типа материала, который мы назначили как "Фирма" (профиль фирмы) ставим [author-name-raw]/profile (можно без /profile, но тогда надо, чтобы в алиасах user profile не стояло [user-raw] имя пользователя, а то конфликт будет с алиасом "Фирмы")

Такая операция позволит в URL ноды-фирмы выводить имя пользователя (сотрудника фирмы), который создаст профиль своей фирмы и потом будет постить новости фирмы.

3. Создаем ноду типа материалов "Фирма", автором ставим пользователя-сотрудника фирмы. Сохраняем. URL этой ноды должен стать ИМЯ-СОТРУДНИКА [author-name-raw] (оно же краткое название фирмы).

4. Создаем пару новостей, автором этих нод ставим пользователя-сотрудника фирмы.

5. Создаем представление Views. Тип Материал. Дисплей Блок.
Стиль строки Поля. Создаем поле, например, Node: Title

Ставим фильтр: Тип материала - Новости

Идем в аргументы и добавляем User:Uid
В нем: Provide default argument (аргумент по умолчанию) >
> Default argument type: User ID from URL >
> Галочка на Also look for a node and use the node author (искать материалы, у которых автор из аргумента). Сохраняем вид.

6. Идем в управление блоками и ставим созданный блок View в нужное место на страницах "Фирма". В результате блок показывает новости фирмы на странице (профиле) фирмы.

P.S.: Если к этому сделать регистрацию по ролям с модулями Content profile и Autoassignrole, как тут, то сотрудники-фирмы будут делать все сами Smile

Комментарии

Аватар пользователя Айдар Айдар 6 мая 2012 в 0:53

Спасибо! Полезно.

Делал подобное - на странице компании выводил ее новости (2 типа материала). Связывал терминами: заголовок компании в ноде == название термина, затем выводил с помощью конт. фильтров Has taxonomy term + Node:nid блок на странице компании.

Кроме того, выводя таким же образом прайс компании (тоже тип материала), на странице прайса выводил заголовок ссылкой на описание в виде "Компания ⇒ Цены Компании" с помощью views_embed_view в шаблоне и CSS (здесь считаю нужным напомнить об отмене кеширования такой страницы). Пример страницы цен.

Аватар пользователя Antoniy Antoniy 6 мая 2012 в 8:30

Я правильно понял?

Прайс - это отдельная нода для каждого клуба своя. На ней через views_embed_view выводится Клуб-ссылкой. Ага, супер, возьму на заметку.

А таблица прайса field collection сделана, она блоком выводится с тем же id ноды, что и сама нода-прайс. Странно. Это так field collection работает? (ни разу его не юзал, ха блин, только для D7)

В общем интересный сайт. Если что поспрашиваю, ладно?

Аватар пользователя Айдар Айдар 6 мая 2012 в 12:22

"Kremenetskiy" wrote:
А таблица прайса field collection сделана, она блоком выводится с тем же id ноды, что и сама нода-прайс. Странно. Это так field collection работает?

Если честно, не понял вопроса. Field collection - поле с набором полей в типе материала "прайс", id двух нод: прайс и компания - разный (не умею делать один nid). Они связываются общим термином. Опять же, большой минус в том, что не кешируется это дело (хотя, можно ведь и регион туда впихнуть...).

"Kremenetskiy" wrote:
ха блин, только для D7

Да, интересовался долго - для 6-ки нет аналогов вроде как.

"Kremenetskiy" wrote:
Если что поспрашиваю, ладно?

Без проблем, skype: kaztur.ru Smile

Аватар пользователя Antoniy Antoniy 7 мая 2012 в 13:03

Да 7-ка гибче, но мне надо еще к фирмам прикрутить возможность продавать свои товары. Есть ubercart marketpalce, но он только для 6-ки.

В 7-ке можно создать роль продавец и выставить права на создание и редактирование своих товаров, отображать через Views товары фирм в их профилях, но встает вопрос о репортах для продавцов по заказам и продажам и комиссии (хотя в ubercart marketpalce, имхо, это организовано по минимуму).

А views-3.x есть и для 6-ки.

В сомнениях что делать. Собирать систему все же на 6-ке и параллельно портировать ubercart marketpalce для 7-ки, или делать отдельный модуль продавцов для 7-ки.. Время еще поджимает, надо уже "сегодня" Smile

Аватар пользователя Айдар Айдар 7 мая 2012 в 23:02

"Kremenetskiy" wrote:
встает вопрос о репортах для продавцов по заказам и продажам и комиссии

Почти ни разу не работал с магазинами, но Rules в 7-ке тоже няшка! Smile

Аватар пользователя Antoniy Antoniy 24 мая 2012 в 12:14

Как ограничить выбор в поле Node Reference только тех нод, которые создал юзер, редактирующий материал, который нужно связать. http://www.drupal.ru/node/29855

Например, пользователь фирмы постит новость фирмы и благодаря аргументу по текущему пользователю, в списке для выбора Node Reference будет только его фирма, или фирмы (если он создал несколько фирм). Так же с помощью патча для Node Reference и коды, приведенных в http://www.drupal.ru/node/29855, можно подставлять значение по умолчанию.