Есть проект каталог фирм
Хочется, чтобы на странице каждой фирмы были свои новости. Я так понимаю, что это как-то делается модулем node reference.
Идеально было бы конечно, чтобы пользователь регистрировался, я мог ему передать право на управлением странички конкретной фирмы, где бы он мог вести ленту новостей этой фирмы, которые отображались бы красивым списком на странице этой фирмы.
Кто подскажет куда копать? Большое всем спасибо, кто не пройдет мимо))
Комментарии
Если фирмы являются пользователями с определенной ролью, тогда уж user reference. Ну а если они пользователи и будут создавать только новости (раздать соответствующие права), то незачем Ставить reference, достаточно авторство нод пользователем.
Передо мной стоит похожая задача, только не новости, а товары Ubercart. Сначала ставил user reference, а потом воспользовался Бритвой Оккама и решил использовать возможности Drupal "из коробки". А когда создавать ноды фирмы под админом, ставить в авторах эту фирму.
Я бы посмотрел возможность сделать нечто подобное через таксономию и модуль taxonomy access control.
Те есть тип материала "новость", с обязательным термином "фирма", права на конкретный термин (название фирмы) выдаются представителям фирм (если я верно понял).
Ну а далее выводим список новостей на странице каждой фирмы (способ зависит от того, как у Вас каталог фирм сделан.)
Тоже решение "из коробки". И получается, чтобы выводить новости конкретной фирмы, не надо создавать для этого views. Может тоже так сделаю.
А еще хорошо бы совместить. Но надо, чтобы при создании пользователя-фирмы автоматом создавался термин-фирма и, соответственно, при создании новости этой фирмы автоматом проставлялась категория этой фирмы. А при клике на категорию фирмы - вывод профиля и всех новостей этой фирмы.
У меня все организовано следующим образом:
Есть каталог фирм. Фирма - это тип материала. Если найдется пользователь, который заявит, что это его фирма, я ему передаю права на редактирование только этой фирмы.
Все-равно не вижу здесь решения как организовать новости для фирмы...
Дать этому пользователю права на создание типа материала новости, а на редактирование только собственных (созданных им новостей) edit own новостей.
Делать views с аргументом фильтром по автору (ID пользователя из URL) и фильтром по типу материала (новости) и выводить этот views блоком под профилем пользователя. В каждой новости будет отображаться имя автора со ссылкой, при клике на автора посетитель попадает в профиль автора и видит там его новости.
И при таком раскладе связать ноды-фирмы с профилем. Под Drupal 7.x так не делал, вроде модуль Profile 2 такое делает, аналог Contetnt Profile для Drupal 6.x
А если без этого, то да Node Reference
Как это можно решить (но под Drupal 6.x):
Создается представление (views) с полями (допустим дата содания, заголовок, анонс). Затем ставится аргумент по полю node reference (поле node reference материла новости): подстановка аргумента по умолчанию > Тип аргумента по умолчанию: ID материала из URL > Проверка: Материал - Типы: Фирма > Тип аргумента: ID материала.
В общем копать views drupal 7.x
Спасибо огромное, буду пробовать!
Только, как я считаю, большой минус при создании новостей фирмы сотрудником этой фирмы - ему придется. создавая новость, выбирать в поле node reference свою фирму из десятка, а то и сотни других. Если это админ сайта делает, то не такой минус.
Да это минус бесспорно
Хотя, возможно, есть решение, чтобы определенное значение node-reference выставлялось автоматом в зависимости от конкретного пользователя, создающего ноду. Тогда вообще сказка, можно сказать
Поле node reference можно сделать, как автозаполняемое поле. По идее сотрудник фирмы начинает вводить название своей фирмы и ему выпадают похожие варианты. Тогда его задача облегчается.
Кстати, сайт esaro.ru отличный! Довольно компактные, информативные и аккуратные ноды фирм получились.
Идеально было бы, если после передачи прав пользователю на управление фирмой (нодой) он мог бы просто публиковать новости, которые автоматом бы отображались на странице фирмы. Было бы неплохо))
Тогда, думаю, надо искать решение в таком направлении:
Для ноды фирмы делается поле user reference, где выставляется тот пользователь (сотрудник этой фирмы), который будет создавать свои новости. А новости выводить с помощью Views, исходя из аргумента по этому полю user reference и аргументу "автор ноды". Если такое получится, то сотруднику надо будет только постить новости, без всяких выставлений reference в поле.
Или же прописать автором ноды-фирмы имя пользователя этого сотрудника, т. е. без user reference. Поищите в поиске на drupal.ru и других друпал-сайтах, может кто-то уже решал нечто подобное
Искал, но ничего подобного не нашел к сожалению
Думаю использовать модуль Node Access User Reference, он дает возможность пользователю, за которым закрепили фирму, редактировать эту фирму. Потом, как вы предложили, блоком views с помощью аргументов вывести на странице фирмы новости, принадлежащие пользователю, за которым закреплена фирма. Буду пробовать, надеюсь это вообще реально сделать))
Сделал тип материала "новости", создал пользователя "test" и опубликовал из его аккаунта "новость 1" (пользователю присвоил одну из фирм с помощью модуля Node Access User Reference), создал представление, с помощью которого на странице профиля появилась вкладка "новости фирмы". А что прописывать в блоке views, который должен отображать на странице фирмы эти новости что-то не пойму никак...
Поюзал Views на своем проекте, где тоже ноды фирм и надо контент фирмы (продукты и что угодно еще) выводить под нодой фирмы. Проект на Drupal 6.x
Блин, оказалось все просто:
1. Модуль Pathauto + модуль Token. В автоматических алиасах для типа материала "Фирма" (профиль фирмы) ставим [author-name-raw]/profile (можно без /profile, но тогда надо, чтобы в алиасах user profile не стояло имя пользователя, а то конфликт будет)
Это позволит в URL ноды-фирмы выводить имя пользователя (сотрудника фирмы), который создал профиль своей фирмы.
2. Создаем новости, где автором будет сотрудник фирмы.
3. Создаем представление 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 (типа искать материала, если у них автор из аргумента)
4. Идем в управление блоками и ставим этот блок View в нужное место. В результате блок показывает новости фирмы на странице (профиле) фирмы.
P.S.: Для Drupal 7.x не знаю как, но может аналогию можно сделать.
И не надо никаких полей reference. Все решается с помощью автора ноды
Все гениальное просто надо пробовать)) Только вот маюсь как назначить ноде нового автора.
В D6 это решается так: создаем пользователя, идем в ноду и в поле Authoring information где имя автора и дата создания ставим автором этого пользователя (поле с автозаполнением). Сохраняем.
Да все банально просто)) Только доперло! А я начал копать с самого сложного))
Решение гениальное и очень легкое, но есть одно НО, если я сам буду создавать заведения от имени админа, то все мои новости на сайте будут отображаться под каждым таким заведением, созданным мною)). Получается надо при создании новой фирмы создавать нового пользователя либо свои новости публиковать с отдельного аккаунта, например "Редактор новостей". В принципе решение все-равно очень хорошее! Спасибо тебе Kremenetskiy!!!
Пожалуйста! В D6 под админом можно назначать нодам любых пользователей и это делает ноду так, как будто ее создавал пользователь, а не админ.
В принципе можно так: создаем роль пользователя, например "Сотрудник Фирмы" с определенными правами на создание и редактирование своих нод типа Фирма и Новость. Делаем регистрацию, где новый пользователь обязательно должен будет выбрать определенную роль. Если выбирает роль "Сотрудник фирмы", то при регистрации сделать так, чтобы пользователь заполнял некоторые обязательные поля ноды "Фирма". Заполнил, жмет зарегистрироваться и нода "Фирма" уже им создана. Потом он логинится и видит что еще может создавать новости.
Такая регистрация в D6 создается с помощью модулей Content profile и Autoassignrole вот тема про это Для D7 это подобное вроде как создается с помощью модуля Profile 2 (где мелькала на оруме инфа про это)
Я думаю первого решения более достаточно. Вот, что получается http://esaro.ru/kafe/art-cafe-biennale-66
Справа в столбце новости фирмы. Думаю остановлюсь на этом решении ))) Еще раз спасибо. Тему переименовываю в РЕШЕНО!))
Да супер. Но если сделать такую регистрацию, как я описывал, то админу вообще не надо парится только если юзеры-сотрудники что-нибудь накосячат, когда посты создавать будут, т. е. только модерация останется.
Я раньше пробовал так, но там тоже есть свои нюансы с выводом в список тизеров и полного просмотра. Ведь фирма будет являться практически юсером.
В этом то и прелесть. У меня много времени уходит, чтобы создавать за них их контент. Лучше это время использовать на функционально-информационное развитие ресурса.
Создал отдельную тему с этим решением. Пригодится.
Да это большой плюс, но темизация вывода списков этих самых юсеров меня немного напугала) Толком не смог разобраться, как красиво все это оформить. В будущем все же наверное еще буду пробовать.
Конечно пригодиться даже самому себе на будущее!
А вопросы по esaro.ru можно? Меню по заведениям делалось на таксономии и quicktabs? Или табы отдельно прикручивались скриптами, а не модулем Drupal?
Сегодня подумал и решил, а не попробовать ли мне собрать сайт фирм на Drupal 7, пока еще на рабочем не так много контента, да и все равно систему надо переделывать. Вот планирую, как делать..
И исходя из этого вопросы: значит ноды фирм - это тип материала.
А поля Адрес делались свободно заполняемые или там со стороны пользователя какая-то база для заполнения, например, по таксономии?
И поле Телефоны как сделано? Думаю может составное поле делать для телефонов, чтобы формат соблюдался, или проверку какую.
Остальные поля типа Кухня, Тип кафе, думаю, со выпадающими значениями селектами? или там в значениях термины из спец словаря..
В заголовках нод Фирм сотавной заголовок. Например, Кафе - это термин? А Название - уже node title? Подскажи, пожалуйста, как это сделано.
Фирма - тип материала
Кафе - это термин
Название - node title
Меню по заведениям на quicktabs делалось
Спасибо!
Я сегодня прикрутил в поле Адрес Hierarchical Select по терминам таксономии. Создал словарь и залил в него улицы из КЛАДР. Все хорошо, но для Hierarchical Select уровня улиц желательно автозапонение. Пока копаться некогда, как его сделать.
Решил остаться на 6-ке. Для 7-ки нет модуля Ubercart MarketPlace, а к фирмам надо еще прикручивать возможность продавать свои товары/услуги.
Все же как хорошо, что решение вывода по сотруднику-автору найдено. Сейчас смотрю и везде стоят reference, брр...
Как ограничить выбор в поле Node Reference только тех нод, которые создал юзер, редактирующий материал, который нужно связать. http://www.drupal.ru/node/29855
Например, пользователь фирмы постит новость фирмы и благодаря аргументу по текущему пользователю, в списке для выбора Node Reference будет только его фирма, или фирмы (если он создал несколько фирм). Так же с помощью патча для Node Reference и коды, приведенных в http://www.drupal.ru/node/29855, можно подставлять значение по умолчанию.
Спасибо Вам огромное! Очень помогли