Как лучше* всего реализовать такие отношения:
Есть тип "Событие" (концерт, спектакль), которое может происходить в "Месте" (Большой театр, Красная площадь) в определенные "Даты".
Нужны два типа страниц: "Событие" и "Место".
При создании события есть возможность выбрать места проведения с датами для каждого места.
Например, концерт группы "АВВА" с 25 по 30 декабря в "Дворце пионеров", а с 3 по 12 января в клубе "Максимум".
На сайте на странице события "Концерт группы "АВВА" указаны места и даты, на странице "Дворец пионеров" указаны все события, проходящие здесь, с датами, в том числе "АВВА" (25-30 декабря), на странице "События за январь" выводятся понятно что, в том числе "АВВА" (клуб "Максимум").
Страницы, видимо, надо будет делать с помощью Views, а вот как сделать связи между событиями-местами-датами, я не знаю.
Связь "Событие-Место" делаем с помощью CCK Node reference. Как теперь добавить для каждой такой связи свои даты? Подскажите, в каком направлении копать?
*Лучше всего, значит, с использованием самых популярных модулей, без залезания в код и БД.
Комментарии
Кратко:
связь делается с помощью Node reference;
вывод дочерних нод можно осуществить через CCK views field по аргументу текущей ноды;
вывод событий/мест/групп -- views с аргументами.
ps1: ищите на этом сайте, вы далеко не первый, кто поднял это вопрос;
ps2: такие схемы нужно сначала рисовать на бумажке.
kyky, Вы не поняли вопрос - надо к одной ноде прикрепить через node_reference другие, и на каждую привязку повесить дату.
Хороший вопрос, сам недавно думал. Несколько вариантов решения придумал, но все - самописные. Надо порыть д.орг - наверняка есть.
да все просто делается
берется 3 типа материалов:
1. Место проведения
2. Что проходит
3. Событие - Афиша
Далее...
Вы создаете место, затем создаете "Что проходит" ну все это конечно со своими полями и тд, как вам удобно.
Затем создаете Афишу, к Афише прикручены все эти 2 поля (место и что проходит) через node_reference + поле с датой.
Вот и все, а далее выводите как вам угодно через views.
Геморно, но какой вопрос такой и ответ.
Я на node_reference собаку съел. И двух кошек. Группировка полей при вводе очень нужна, если не найду, сам напишу.
yurgon, спасибо за идею, можно и так, вполне приемлимая реализация.
Dan - внимательный, сразу понял суть вопроса.
Если я правильно понимаю, то проблема сводится к следующему:
Как создать node_reference на node_reference?
Я дал полное описание задачи, чтобы более опытные люди подсказали другие варианты реализации без этой проблемы (как это сделал yurgon).
Насколько я понял модуль Inline Nodereferences как раз делает нечто подобное, но я не понял как его скачать.
Его нельзя скачать, т.к. нет ни одной версии.
Regmaya, попробуйте Вот этот модуль -- Flexifield, может подойдёт
Я про это и писал: нужны 3 сущности -- что (фильм, группа), где (место), когда (событие).
И вяжутся по node_reference. Вывод вьюсами с аргументами.
Это верно всё, но из-за того, что у вас лишняя сущность (не то чтобы лишняя, скорее избыточная - дата), вы породите много лишних объектов.
Пример:
Когда: дата1-дата2 (поле)
Что: Фильм "Сюрприз" (нода "союрприз")
Где: КТ "Молот" (нода "молот")
Нода даты 2
Когда: дата3-дата4 (поле)
Что: Фильм "Сюрприз" (нода "союрприз")
Где: КТ "Рассвет" (нода "рассвет")
Сколько получается нод? 5! Общая формула 1 + 2n, где n - число мест, то есть для 10-ти кинотеатров надо будет завести 21 ноду. Но т.к. кинотеатры и фильмы - "нормальные ноды", то формула будет (1+2n)-(1+n )= n, то есть паразитное кол-во нод при такой архитектуре прямо пропорционально кол-ву мест (что в данном случае очевидно, но так бывает не всегда).
Плюс необходимо сделать список самих нод-дат (дабы получить Афишу), и сделать список афиш на кинотеатр.
Должно же быть по-другому:
Фильм "Сюрприз" (нода сюрприз)
---
Где: КТ "Молот" (нода "молот")
Когда: дата1-дата2 (поле "дата1-2")
---
Где: КТ "Рассвет" (нода "рассвет")
Когда: дата3-дата4 (поле "дата3-4")
При такой архитектуре кол-во паразитных нод равно нулю.
В вашем примере вы отталкиваетесь от самого фильма.
То есть -- я открываю ноду фильма "Аватар", читаю аннотацию, смотрю скриншоты и вижу, в каких кинотеатрах он будет идти и когда. Но я принципиально хожу в один кинотеатр, поэтому я сразу открываю ноду этого кинотеатра и смотрю, когда в нем будет идти "Аватар" и во сколько.
Ваша связь не позволит мне вывести ноду кинотеатра с фильмами и расписанием -- на уровне интерфейса, конечно. Уточню, что на уровне sql это всё решается элементарно (как ваша, так и моя структура), но у нас идет разговор именно об иерархии и выводе нод.
Давайте рассмотрим мою связь подробнее: в ней нет того смещения в сторону фильмов, как у вас.
У меня отдельно существуют фильмы и кинотеатры, и те и другие могут иметь свой рейтинг, комментарии, дополнительные реквизиты. Их объединяет сущность "сеанс", которая тоже уникальна и дает больше гибкости.
Например, в ноде "сеанс" я указываю кинотеатр, фильм, что будет входить в программу, ссылки на споноров (для премьеры одни, для остального показа -- другие), размещаю в ней разного рода замануху, и т.д.
Да, пусть нод станет больше, зато больше возможностей и гибкости: открываю ноду "фильм" -- вижу, в каких кинотеатрах он идет и во сколько; открываю кинотеатр -- вижу, какие в нем идут фильмы и во сколько; открываю раздел "что посмотреть вечером" -- сводная сетка по фильмам/кинотеатрам.
Да, со всем согласен. Именно поэтому в 4-м комменте я и написал: "Группировка полей при вводе очень нужна, если не найду, сам напишу." Плюс интеграция группировки во views.
не найдете.....
если напишите это будет гуд
Вот это надо посмотреть: http://drupal.org/project/flexifield
Вы смотрели?