Реализация расписания кинотеатра на Друпал

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

Аватар пользователя ALexeyAL1@drupal.org ALexeyAL1@drupal.org 27 июля 2010 в 19:52

В нашем небольшом городке есть кинотеатр, и у этого кинотеатра даже есть свой сайт, но нигде нет нормального расписания сеансов кинотеатра. Меня это не устраивало, но никто не собирался менять ситуацию к лучшему. Пришлось браться за это дело мне. И т.к. в то время я активно изучал Друпал, выбор инструмента был очевиден.

Идея о создании такого расписания понравилась заказчикам, а особенно понравилась цена (денег я не просил) поэтому разработка концепта и его воплощение в жизнь начались в тот же день. В следующие 15 дней проект прошел путь от идеи до полного воплощения на страницах сайта. Бета версия расписания кинотеатра была готова, так же были проработаны инструкции для добавления фильмов, создана удобная система добавления времени сеансов, и все это с учетом возможного расширения (появления нового кинотеатра, необходимости расписания не только фильмов, но и других развлекательных мероприятий). И в тот момент, когда расписание должно было начинать работать в поле, именно тогда кинотеатр отказался от моих услуг. Этот факт заставил отодвинуть проект в "дальний ящик". Но совсем недавно я вновь натолкнулся на него, исправил несколько ошибок, кое-что переделал и решил написать статью с инструкцией, как создать функционал расписания на сайте под управлением ЦМФ Друпал. К сожалению, когда первая статья была уже готова, она была уничтожена силами неподвластными автору. Сейчас вы читаете вторую версию статьи. Предупреждаю сразу, статья будет большая, подробная с множеством лирических отступлений и состоять будет из нескольких частей:

  1. Подготовка
  2. Установка модулей
  3. Настройка модулей
  4. Создание нового типа материала
  5. Создание представления для расписания
  6. Допиливание и ловля блох

Подготовка

Этот этап самый красивый, потому что происходит в основном в голове. А как известно в голове все идеально. Как выяснилось позже сделать как в голове на 100% фактически невозможно. Итак на подготовительном этапе важна идея, а идея была сделать красивое, удобное, функциональное и масштабируемое расписание для кинотеатра. Во главу угла было поставлено удобство для одного из сценариев похода в кинотеатр. А сценарий выглядел примерно так:

— Ну может в кино? Ты когда освобождаешься?

— В 19:00, максимум в 19:30... А что идет сейчас?

— В 19:20 начинается <фильм 1>, а в 21:10 <фильм 2>

— Тогда давай на <фильм 2> а то <фильм 1> по отзывам говно.

Именно этот сценарий пользуется наибольшей популярностью, и исходя из него была предложена таблица со столбцами-днями и строками-временем, а внутри этой модульной сетки будут расставлены фильмы в соответствии с расписанием. Первый столбец — сегодняшний день (выделен другим цветом/фоном), для любителей понастольгировать, есть возможность посмотреть что шло раньше. Фильмы которые прошли или идут лишаются яркости. Легенда для разных типов событий разная. А выглядит это примерно так:

Вы также можете выбрать определенный фильм или кинотеатр.
  Чт. Пт. Сб. Вс. Пн.
13:00 <фильм 1> <фильм 1> <фильм 1> <фильм 3> <фильм 3>
15:00 <фильм 2> <фильм 1> <фильм 2> <фильм 1> <фильм 3>
17:00 <фильм 1> <фильм 2> <фильм 3> <фильм 3>
19:00 <фильм 2> <фильм 2> <фильм 1> <фильм 2>
21:00 <фильм 1> <фильм 1> <фильм 2> <фильм 2>
23:00 <фильм 2> <фильм 1> <фильм 2> <фильм 2>

По такой сетке очень легко запланировать поход в кино, а дополнительные навигационные ссылки должны вести на страницы для других сценариев похода в кино (например поход на определенный жанр или в определенный кинотеатр). Также предполагалось использовать блок предстоящих событий, в котором отображались несколько элементов в формате "наступит через..." и выглядеть он должен был так:

<фильм 1> через 15 мин.
<фильм 2> через 1 час 45 мин.
<фильм 3> через 3 часа 20 мин.
<фильм 1> через 5 часов
<фильм 2> через 6 часов 10 мин
Посмотреть полное расписание

Так же на этом этапе нам необходимо очень хорошо продумать какую информацию мы будем собирать, какую показывать и где. Мне например, пришлось несколько раз все начинать с нуля именно потому, что на этапе подготовки я допускал ошибки. В данный момент я использую следующие постулаты:

  1. Может использоваться несколько видов событий
    1. Сеанс кинотеатра
    2. Развлекательное мероприятие
    3. Лекции
    4. Концерты
  2. Может появится еще одно развлекательное заведение
  3. Каждое из видов событий имеет множество полей
  4. Информация может браться динамически с других сайтов
  5. Все должно продумываться с учетом масштабируемости
  6. ?????
  7. PROFIT!

Когда вам кажется что вы все продумали, когда вы уверены что лучше сделать нельзя, смело переходите к следующему пункту.

Установка модулей

Здесь вы не увидите подробных инструкций как установить модуль/модули. Здесь будет приведен список необходимых дополнений. Для помощи в установке/обновлении, обращайтесь к файлу readme.txt который идет с каждым модулем. Итак, кроме самого Друпала вам понадобится:

  1. Calendar
  2. CCK
  3. Date
  4. FileFild
  5. Fivestar — Для организации рейтингов (в обзоре не участвует)
  6. ImageField
  7. JQuery UI
  8. JQuery UI Dialog — Для воплощения визуальных эффектов (не участвует в обзоре)
  9. JQuery UI Update — До кучи
  10. Link
  11. Scheduler — Для плановой публикации (в обзоре не участвует)
  12. Views
  13. Voting API — Необходим модулю Fivestar (в обзоре не участвует)

После установки этих десяти необходимых нам модулей мы переходим к их енейбелизации (enable). Просто в разделе admin/build/modules включаем следующие строки:

  1. CCK
    1. Content
    2. Fieldgroup
    3. FileField
    4. ImageField
    5. Link
    6. NodeReference
    7. Number — Для доп. функционала (в обзоре не участвует)
    8. OptionWidgets
    9. Text
    10. UserReference — Для доп. функционала (в обзоре не участвует)
    11. Хотя вы можете разрешить все подмодули (никогда не знаешь что придумаешь в следующую секунду)
  2. Calendar
    1. Calendar
    2. Calendar popup
    3. Date
    4. Date API
    5. Date popup
    6. Date Reapeat API
    7. Dade Timezone
  3. jQuery UI
  4. jQuery UI Update
  5. Views
    1. Views
    2. Views UI
    3. Остальные модули в этом разделе могут быть полезны позднее, для распространиения ваших вариантов представлений
  6. Fivestar — Для организации "локальных" рейтингов при желании можно организовать фичу пойду/не пойду (не участвует в обзоре)

    1. Fivestar
    2. Voting API
  7. JQuery UI Dialog — Для воплощения визуальных эффектов (не участвует в обзоре)
  8. Sheduler —Для планирования публикации/депубликации новостей если нет желания старыми записями базу нагружать, может быть полезна если комментирования фильма запрещены (не участвует в обзоре)

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

Настройка модулей

Перед созданием нашего функционала нам потребуется настройка некоторых модулей. И начнем мы с создания словаря таксономии. Для этого создадим словарь на странице таксономии /admin/content/taxonomy (Название словаря "Кинотеатры", при желании добавляем описание). Тип содержимого пока не указываем, мы его создадим позже. Теперь опять переходим к списку таксономии /admin/content/taxonomy и редактируем список терминов. Добавляя термины, количество терминов соответствует количеству развлекательных заведений, к которым мы делаем расписание.

Теперь проверяем настройки даты и времени /admin/settings/date-time Проверьте часовой пояс (иначе расписание будет врать), отключите пользовательские часовые пояса (не обязательно, но не лишне), и укажите первый день недели по предпочтениям (понедельник).

Здесь же открываем форматы времени /admin/settings/date-time/formats и добавляем нас собственный формат который будет у нас отображаться в расписании, т.к. нам нужны только часы с минутами, создаем соответствующий формат
/admin/settings/date-time/formats/add и указываем формат вывода учитывая синтаксис функции date (в моем случае"H:i"). После этого в /admin/settings/date-time/formats раздете время и дата добавляем новый тип формата (Название: "Время" Тип: "time"), и в выпадающем списке выбираем недавно созданный формат времени.

Так же можете настроить голосовалку /admin/settings/fivestar публиковалку /admin/settings/scheduler и выпрыгивалку /admin/settings/date_popup но по большому счету хватит и этого.

Создание нового типа материала

Вот оно, начало! Именно с этого момента начинается создание расписания, все что было до этого можно считать подготовкой. На этом этапе мы воплотим теоретическую часть (без визуализации) . Но к сожалению мы не сможем увидеть общую картину, это добавляет свою изюминку. Новый тип материала — агрегатор, в котором будет содержаться вся необходимая для визуализации информация. И здесь необходимо соблюсти баланс, между необходимостью и удобством. Например удобно заполнить только одно поле, но необходимо больше информации. Можно организовать парсер, или брать информацию с использованием АПИ специализированных сайтов. Но русскоязычных сайтов мало, а какие есть не дают всю информацию, поэтому придется информацию вносить руками. А начинается все с добавления нового типа материала /admin/content/types (Название: "Сеансы кинотеатра", Тип: "movies" остальные настройки по вкусу, единственное имеет смысл убрать галку с "Помещать на главную" если вы не делаете сайт кинотеатра.

После сохранения, можно в нашем словаре /admin/content/taxonomy в меню таксономии указать тип материала "Сеанс кинотеатра". Теперь начинаем создавать наш агрегатор.

Поля "Сеансов кинотеатра"Мы просто создаем необходимое количество полей, и присваиваем им определенные свойства. Например поле постер, это файл с заданными размерами, а рейтинг фильма, это кусок кода или просто число, которое мы при выводе на страницу просто особым образом отформатируем. Количество полей может быть любое и зависит только от фантазии. Жанры, рейтинги, возрастные ограничения, постеры, скриншоты, слоганы, трейлеры, вот неполный список что сразу приходит на ум. Только надо учитывать и то, что все это нужно будет кому-то вносить, и кому то грузить из интернета, а не все имеют *тные каналы связи. В моем конкретном случае я использовал только три дополнительных поля: Постер, рейтинг, и время сеанса.

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

Немного теории: Где взять постеры? Многие сайты запрещают использование любых материалов. Более менее демократичен в этом плане http://www.kinopoisk.ru/
и именно его я взял за основу, хотя можно использовать любой другой ресурс который позволяет использовать свои материалы, или вы сможете раздобыть разрешение.


Если попытаться показать картинку с сайта http://www.kinopoisk.ru/ то вместо желаемого изо вы получите стандартную заглушку . Сделано это по многим причинам, но это заставляет нас показывать изо из своей базы, к слову Друпал это делает с легкостью. Для этого мы добавляем новое поле в разделе управления полями с Именем "Постер" названием поля "field_poster_file" и типом данных "Файл" элемент "Изображение". После сохранения можно перейти к настройкам поля постера. Здесь обязательно укажите расширения файлов (можно оставить один), максимальное разрешение постера (для уменьшения возможных проблем), очень желательно указать путь к каталогу чтобы постеры складывались в одну папку. Можно включить и альтернативный текст, чтобы человек без картинок понял что к чему. Если к некоторым событиям/фильмам нет постеров, ставим галку в разделе изображение по умолчанию. Так же в общих настройках укажите обязательность постера и количество их (В моем случае он может быть только один). Все сохраняем и идем дальше.

На повестке дня у нас настройка рейтинга. Рейтинг я взял у того же кинопоиска, благо его можно брать бесплатно и без спросу.

Немного теории: Код рейтинга представляет собой простой код на гифку которая меняется с определенной периодичностью. Код выглядит примерно так:

<a href='http://www.kinopoisk.ru/level/1/film/1729/'><img src='http://www.kinopoisk.ru/rating/1729.gif' border='0'>a>
И изначально была идея чтобы человек добавляющий фильмы вводил только "номер" фильма все остальное Друпал должен был делать за него. К сожалению это так и осталось планом...

Итак создаем новое поле (Метка: "Рейтинг Кинопоиска", название поля: "field_rating", тип данных: "Текст", элемент: "Текстовый блок"). И переходим к настройкам поля рейтинга. Указываем количество строк (2), можно конечно и одну, и вообще в настройках поля выбрать не "Текстовый блок" а "Текстовая строка", но в этом случае весь код рейтинга не помещается на экран при разрешении меньшем 1280. Так же можно указать универсальный код рейтинга в разделе "Значение по умолчанию", чтобы оператору осталось только ввести номер фильма. Но что точно нужно сделать, так это в разделе "Общие настройки" поставить галку "Обязательный" и "Количество значений" равным "1", здесь же можно указать "Простой текст" для обработчика. Все, теперь можно сохранять.

И последний по порядку но не по значимости
— поле "Время сеанса", это поле будет содержать самую важную для нас информацию, время когда начинается и когда заканчивается сеанс кинотеатра или любое другое событие. Как и ранее мы создаем новое поле с (метка: "Время сеанса", название поля: "field_start_film", тип данных: "Дата", элемент: "Text Field with Date Pop-up calendar". В некоторых случаях имеет смысл использовать элемент: "Text Field with Date Pop-up and Reapeat options". Но только когда событие происходит в одно и то же время на протяжении интервала дат. Например каждый день в 08:00 или через день в 09:20, 11:40 и 15:50). И переходим к настройкам поля времени. Значения по умолчанию для полей работают только для первой группы значений, исправится ли это в следующих версиях, я не знаю, но не лишне будет поставить такие настройки (Значение по умолчанию: "Относительное", Значение по умолчанию для даты По: "Относительное", Значение даты "От": "now", Значение для даты "По": "+2 hours", Год назад и вперед: "-0:+1", Увеличить: "10"). А в "Общих настройках", ставим галочку "Обязательный", количество значений: "Не ограничено", до даты: "Обязательный", степень детализации: "все кроме секунд". Теперь все сохраняем и оглядываемся на все что мы наклацали. В итоге при создании материала /node/add у нас должен появится новый тип материала (Сеанс кинотеатра). Остается только добавить несколько сеансов, чтобы на следующем этапе мы смогли увидеть рук своих творенье.

Создание представления для расписания

Ну и наконец то мы доходим до визуализации нашего расписания. Этот этап будет изобиловать просмотрами получившегося, постоянным сравнением результата с идеальным образом. Именно на этом этапе происходит большенство озарений и новых идей. Иногда настольно несовместимых с первоначальным вариантом, что приходится все переделывать заново, но наградой нам будет готовое расписание и благодарность пользователей (хотя высказываться все равно будут только недовольные). Представлением данных в Друпале занимается очень мощьный и гибкий модуль (который в 7 версии будет уже в ядре), а зовется он views. Писали о нем и пишут много, а мы будем без лишних слов настраивать.

Открываем станицу представлений /admin/build/views и включаем представление "calendar" чтобы не испортить эталон, жмем "Клонировать". И указываем. Имя представления: "movies", метка представления: "Movies" и приступаем к редактированию этого представления. У нас имеется несколько вариантов настройки предстваления, их можно добавлять, удалять и самый первый и основной, это defaults. Эти настройки будут использоваться всеми остальными вариантами отображения.

Основные настройки не требуют подробного описания, вам достаточно их сравнить с этим изображением.



А вот на аргументах я остановлюсь подробнее. Настройки аргументов это основа, которая объясняет Друпалу с каких признаков начинать построение. В нашем случае это будет "Время начала сеанса" поле (field_start_film) которое мы создавали для нашего нового содержимого. В настройках этого аргумента обязательно поставте степень детализации: "Неделя", и Date year range: "-1:+1" а в разделе Поле(я) даты: поставте галку напротив "Содержимое: Время сеанса (field_start_film) - Дата начала". Теперь наше представление будет брать все ноды в которых есть поле (field_start_film) и в интервале в неделю показывать то что нам не нужно. А вот чтобы мы увидели что желаем переходим к следующему блоку настроек, к полям.

Раздел поля объясняет представлению что мы хотим видеть. Я захотел видеть: Заголовок фильма, его постер и время начала и конца фильма, поэтому я сделал следующее.

Добавил поле "Материал: Заголовок", в настройках его ставится только одна галка напротив "Создать ссылку на материал, к которому относится текущее поле" и добавляется новое поле: "Содержимое: Постер". Здесь тоже можно поставить галку чтобы создавалась ссылка на материал, но главное, указать. Метка: "Нет", формат: "изображение".

И последниее поле в этом разделе, это Содержимое: "Время - Дата начала". Здесь ставим галку создавать ссылку на материал, устанавливаем метку виджета, и выбираем формат времени (который мы создавали в третьем раздере этого описания) он так и называется "Время", чуть ниже выбираем показывать обе даты (начало и конец) и все,переходим к следующему блоку.

Следующий блок "Критерий сортировки", с этими настройками я игрался меньше всего, поэтому здесь гордо стоит одна строка. Материал: "Дата обновления" причем по возрастанию и с детализацией в секунду.

Блок фильтров так же не удостоился моего внимания, да и фильтровать имеет смысл только по одному признаку. Материал: "Опубликовано" в положении "Да".

Вот и все, с настройками по умолчанию мы закончили, переходим к настройкам Calendar Page. Здесь нас интересуют только "Настройки страницы" и "Настройки Calendar". И если с первой можно разобраться в секунды, то со второй, прийдется повозится и подумать. Дело в том, что в блоке "Настройки Calendar" задаются настройки легенд, а это значит, что мы можем отделить одни записи от других цветом.

Если у вас не только расписание фильмов, но и другие мероприятия, то вас заинтересует "Legend Content Types"
приятным бонусом является еще то, что цвет можно выбрать любой, а не из списка заготовок.

Если у вас не один кинотеатр то вы будете в восторге от "Legend Vocabularies", здесь каждый элемент таксономии можно покрасить в свой цвет, но если у вас много заведений, будет сильно пестро, 2-3 в самый раз.

Здесь есть даже возможность сменить быстро дату "Date changer"
но я ею не пользуюсь.

Теперь вы можете посмотреть ваше новое представление по адресу который вы ввели в блоке "Настройки страницы", если у вас все получилось, это значит что начинается самый длительный и противный этап.

Допиливание и ловля блох

Как бы мы ни старались все сделать идеально, этот этап неизбежен! Дело в том, что работа в поле и всяческие замечания пользователей очень быстро отрезвят администратора и замылленость глаз быстро сойдет на нет. В любом случае рекомендую показывать плоды трудов людям, мнение которых в данном вопросе будет иметь вес. Так же имеет смысл показать готовый продукт (но до официальной публикации) простым пользователям, чтобы убедится в том, что интерфейс прост и понятен, что человек понимает куда смотреть и что нажимать.

Порвался шаблон, блоги запрыгнули один на другой, баннер вылез в неподходящем месте, это все исправит время и усидчивость. Первый баг могу подсказать и рассказать как его исправить. Это убрать правую колонку (если вы ее используете на сайте конечно), т.к. при малом разрешении экрана наше расписание будет заползать под правый блок. Идем в раздел "блоки" /admin/build/block и всем блокам в правой колонке ставим одну и ту же настройку. Показывать на всех страницах кроме перечисленных: и ставим значение "movies*" или любое другое которое было установленно в настройках "Calendar Page".
Все, смотрите и наслождайтесь расписанием кинотеатра, а так же не бойтесь и эксперементируйте, Друпал позволяет сделать если не все, то очень многое. Это я доказал на своем примере, без знания языков программирования, без представления об устройстве серверов и клиентов

Комментарии

Аватар пользователя ALexeyAL1@drupal.org ALexeyAL1@drupal.org 28 июля 2010 в 10:10

Dimm wrote:
Спасибо за подробную статью!
А где сам сайт кинотеатра?

Самого сайта кинотеатра нет, по причине отказа клиента от моих услуг. Что должно было примерно получится, посмотрите по этой ссылке http://millerovo.net/movies/2009-W32
Сегодня перечитал статью, много не понравилось, но писать уже того запала нет, уже думаю написать инструкцию для webform/ Если что не понятно по тексту сообщайте буду дополнять, исправлять.

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 28 июля 2010 в 12:31

А мы реализовывали расписание сеансов и афишу событий с помощью самописного модуля вот результат.

В плане производительности, получившийся модуль существенно выйгрывает у описанного выше способа.

Правда на данный момент у нас ещё не реализованн просмотр расписания идущих фильмов на странице кинотеатра, но и это будет в скором будущем.

Аватар пользователя ALexeyAL1@drupal.org ALexeyAL1@drupal.org 28 июля 2010 в 14:59

<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a> wrote:
А мы реализовывали расписание сеансов и афишу событий с помощью самописного модуля вот результат.

Ээээ и где же расписание? Вот это?

Я добивался другого эффекта. Я понимаю что все это в скором будующем, но все же. Зачем лепить новые модули, пусть и самим написанные (непонятно что безопаснее и эффективнее) если можно все реализовать "стандартными" средствами. Тем более что в семерке эти модули будут уже в ядре. Темизация нод, очень гибкая штука...

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 28 июля 2010 в 15:14

<a href="mailto:ALexeyAL1@drupal.org">ALexeyAL1@drupal.org</a> wrote:
<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a> wrote:
А мы реализовывали расписание сеансов и афишу событий с помощью самописного модуля вот результат.

Ээээ и где же расписание? Вот это?

Я добивался другого эффекта. Я понимаю что все это в скором будующем, но все же. Зачем лепить новые модули, пусть и самим написанные (непонятно что безопаснее и эффективнее) если можно все реализовать "стандартными" средствами. Тем более что в семерке эти модули будут уже в ядре. Темизация нод, очень гибкая штука...


Да как раз вот это и есть расписание.

У нас задача была немного другая чем у вас, осведомить пользователя о том какой фильм и в какое время и в каком кинотеатре можно просмотреть. Объединить это все с событиями в крае. И что бы модуль был максимально легкий, так как помимо него используется ещё куча модулей, а это сейчас уже становится критичным. Существующими модулями, это реализовать бы не получилось никак.

Аватар пользователя Dimm Dimm 28 июля 2010 в 15:13

Очень понравился Ваш сайт.
А как у раздел работы реализован? самописный или партнерский скрипт?

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 28 июля 2010 в 15:18

Dimm wrote:
Очень понравился Ваш сайт.
А как у раздел работы реализован? самописный или партнерский скрипт?

Раздел работы вообще не на друпале, это часть другого сайта - colton.ru. А сай тот не на Друпале потомучто когда его начинали делать, про Друпал знали в России не многие))

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 июля 2010 в 14:41

"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
А мы реализовывали расписание сеансов и афишу событий с помощью самописного модуля вот результат.

Ура! Его написали!
Сколько там программистов на поле боя полегло...

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 июля 2010 в 15:16

"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
а это сейчас уже становится критичным

Просто у вас хостинг не патруль...
У нас сейчас сайт с ~80 000 хитов на сервере за 200 баксов

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 28 июля 2010 в 15:43

RxB wrote:
"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
а это сейчас уже становится критичным

Просто у вас хостинг не патруль...
У нас сейчас сайт с ~80 000 хитов на сервере за 200 баксов

У нас саейчас только гугл >40000 хитов делает, лазяя по всему сайту. А железка у нас отличная соит, осталось её правильно до настроить и будет держать серьезную нагрузку)

Насчеп патруля, могу сказать, что я уже у вас. Правда мой сайт ещё находится в разработке и в боевом режиме я его ещё не использовал.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 28 июля 2010 в 15:39

"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
Существующими модулями, это реализовать бы не получилось никак.

views(нужно уметь работать с relationships)+nodereference+date+nodereferer+views_attach( в него аргумент передается из url)
3 типа материала: кинотеатр, фильм, сеанс

В итоге имею аналогичный функционал как здесь или здесь

Аватар пользователя rbogdan@drupal.org rbogdan@drupal.org 28 июля 2010 в 15:59

<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a> wrote:

views(нужно уметь работать с relationships)+nodereference+date+nodereferer+views_attach( в него аргумент передается из url)
3 типа материала: кинотеатр, фильм, сеанс

В итоге имею аналогичный функционал как здесь или здесь

Примеры которые реализовывали вы очень хорошие, особенно 2ой. Но в нас на сайте в модуль был влючен фукционал и расписания по фильмам и одновременно по событиям и то другим критериям, поэтому views'ы бы не помогли.

Что касается view, то это модуль доживает на нашем сайте последние дни. И последнии представления на сайте будут переписанны в кастомном модуле.

Аватар пользователя penexe penexe 29 июля 2010 в 8:12

<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a> wrote:
"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
Существующими модулями, это реализовать бы не получилось никак.

views(нужно уметь работать с relationships)+nodereference+date+nodereferer+views_attach( в него аргумент передается из url)
3 типа материала: кинотеатр, фильм, сеанс

В итоге имею аналогичный функционал как здесь или здесь


http://54live.ru/afisha/kino тут собственный модуль, у меня нет даже интерфейса для заполнения афиши =).

Аватар пользователя lastuser lastuser 9 июня 2011 в 10:19

<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a> wrote:
"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
Существующими модулями, это реализовать бы не получилось никак.

views(нужно уметь работать с relationships)+nodereference+date+nodereferer+views_attach( в него аргумент передается из url)
3 типа материала: кинотеатр, фильм, сеанс

В итоге имею аналогичный функционал как здесь или здесь

А можно поподробнее? Кинотеатр и фильм связать нетрудно, а вот с сеансами как-то не уловлю фишку. Делать для каждого фильма и каждого кинотеатра ноду типа Сеанс на каждое время - задача настолько моструозная, что ее даже не стоит брать в расчет.

Аватар пользователя afishi afishi 13 января 2012 в 2:25

Megajack wrote:
Да, тоже очень интересно, как одни и те же фильмы в разных кинотеатрах привязать еще и к сеансам?

смотри
берем
1. фильмы х базу. отдельно загруженные.
2. прописываем - привязываем к кинотеатру. и к другому.
3. получаем новый нод - к нему привязываешь расписание.

Аватар пользователя Megajack Megajack 13 января 2012 в 16:55

Ну например (поправьте меня, если я не так понял):
У меня есть 2 типа контента - фильмы и кинотеатры. Для фильмов, я добавляю поле нод референс и линкую его на кинотеатры.
Далее при создании поста с типом контента "фильмы", я просто указываю в каких кинотеатрах он идет/будет идти. Тут кажется, все просто и понятно.
Но как к итоговой ноде теперь привязать расписание? Нужен третий тип контента "Сеансы"? Но это как-то нелогично, мне кажется, время сеансов то не всегда одинаково. Или это дополнительное поле в каком-то из существующих типов контента? а может через модуль Date?
И как на счет "обратной совместимости", например если я хочу посмотреть какие фильмы сейчас идут в конкретном кинотеатре и в какое время?

Вы уж простите если я задаю глупые вопросы, просто я вот только открыл для себя модуль node reference.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 28 июля 2010 в 15:44

"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
Насчеп патруля, могу сказать, что я уже у вас. Правда мой сайт ещё находится в разработке и в боевом режиме я его ещё не использовал.

Ща посмотрим

Аватар пользователя ALexeyAL1@drupal.org ALexeyAL1@drupal.org 28 июля 2010 в 15:51

"<a href="mailto:rbogdan@drupal.org">rbogdan@drupal.org</a>" wrote:
И что бы модуль был максимально легкий, так как помимо него используется ещё куча модулей, а это сейчас уже становится критичным. Существующими модулями, это реализовать бы не получилось никак.

Я вас понимаю, и задачи разные и отсюда реализация. Я к сожалению не владею ни одним языком программирования, который бы мне помог в этом. Поэтому реализовывал как мог.
Кстати посмотрев сайт с точки зрения девелопера, могу сказать, сверстано хоть и с запасом, но качественно.
Единственное, хотелось бы видеть зебру или хоть как-то выделить сетку расписания кинотеатра, чтобы глаз не "сползал" особенно при большом количестве сеансов

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 28 июля 2010 в 16:38

Сорри, но я к упомянутым сайтам я отношения не имею.

А по поводу функционала по событиям и др. критериям, views здесь опять же тоже прекрасно справится, это как раз его функции : сортировка, выборка, фильтрация и т.п.

Я не навязываю views, просто показал что это все можно сделать и на стандартных модулях.

Аватар пользователя Oleksa@drupal.org Oleksa@drupal.org 29 июля 2010 в 10:57

Но ведь эти файлы для парсинга, нужно подготовить, включая изображения, не думаю что в каждом кинотеатре единая форма. Большой ли выигрыш по времени, чем если я вношу вручную? Сейчас я создаю материал "фильм" - загрузка картинки + описание и через другой материал делаю его привязку к нужным кинотеатрам,датам и сеансам. Удобство и быстрота меня вполне устраивает.

Аватар пользователя penexe penexe 29 июля 2010 в 12:45

"<a href="mailto:Oleksa@drupal.org">Oleksa@drupal.org</a>" wrote:
Но ведь эти файлы для парсинга, нужно подготовить, включая изображения, не думаю что в каждом кинотеатре единая форма. Большой ли выигрыш по времени, чем если я вношу вручную? Сейчас я создаю материал "фильм" - загрузка картинки + описание и через другой материал делаю его привязку к нужным кинотеатрам,датам и сеансам. Удобство и быстрота меня вполне устраивает.

только постеры приходится подбирать, а так афиша на день заполняется в 1 клик. сейчас я правда переделываю модуль чтобы была разбивка расписания по кинозалам, вот там придется отказаться от автомата Sad

Аватар пользователя afishi afishi 9 августа 2010 в 23:49

ребята я этим живу уже много лет. вот в друпале afishi.ru - разделение на регионы, на базу фильмов, на сеансы... на дни, на недели. Не пойму, почему раньше с вами не встречался? Smile
что скажите?

Аватар пользователя ALexeyAL1@drupal.org ALexeyAL1@drupal.org 31 августа 2010 в 21:10

"afishi" wrote:
ребята я этим живу уже много лет.

Сравнивать давно работающий ресурс с попыткой, которая так и не увидела свет, нельзя.
Моя статья — попытка рассказать, как я это делал, на основе моей попытки, можно сделать многое, на основе вашего сайта, можно лишь догадываться как все происходило...
Я не претендую на уникальность и правильность, просто людям которые мало работали с Друпалом мой рассказ будет интересен и (надеюсь) полезен.

Аватар пользователя WebFamily WebFamily 24 июля 2012 в 15:31

"Megajack" wrote:
Нужен третий тип контента "Сеансы"?

Все бьюсь над этим вопросом... Думаю, что нужен, ведь в каждом кинотеатре сеансы разные. Не создавать же для каждого кинотеатра одни и те же фильмы с разным расписанием. Проще создать Один раз фильм, а уж потом начинать добавлять сеансы для каждого кинотеатра.

Аватар пользователя Megajack Megajack 24 июля 2012 в 16:03

WebFamily, все правильно - нужен. Я так и сделал: отдельно фильмы, отдельно сеансы к каждому фильму. Потом в настройках фильма, я просто выбираю ноду с нужными сеансами.

Аватар пользователя WebFamily WebFamily 24 июля 2012 в 16:35

"Megajack" wrote:
Потом в настройках фильма, я просто выбираю ноду с нужными сеансами.

Вот это важный момент. Читал о создании афиши постов пять и в каждом люди связывают эти три типа материала по разному. Кто-то расписание связывает с кино и кинотеатром, кто-то фильм с сеансом, а сеанс с кинотеатром. Путаница какая-то. Как лучше то поступить, что было правильней с точки зрения логики?

Аватар пользователя WebFamily WebFamily 24 июля 2012 в 17:49

Пробую здесь найти решение http://shopwebsite.ru/ (Сайт для тренировки построения афиши)

Использую модули date, references, views, и pathauto

Три типа материала:

Кинотеатр: (поля: логотип заведения и его описание)
Фильм: (поля: постер фильма и его описание)
Сеанс: (поля: Дата(модуль Date), Кинотеатр(модуль references) и Фильм(модуль references))

Создал два Views:

Первое - для отображения Расписания на странице кинотеатра (с полем название сеанса)
Второе - для отображения сеансов на странице фильма (с полями название кинотеатра и датой показа)

По-моему получилась чушь полнейшая. Это не удобно и пользователь такое увидит сразу уйдет.

Кто делал афишу на Drupal 7 расскажите подробно что нужно сделать. Что делаю я не так?

Аватар пользователя Megajack Megajack 24 июля 2012 в 18:09

Как правильней и логичней поступить, каждый, наверное, решает сам для себя.
У меня кинотеатры - это термины словаря, фильмы и сеансы - отдельные типы контента. Сеансы завязаны на кинотеатры, то есть, грубо говоря, я создаю сеансы в кинотеатрах под конкретный фильм.
Фильмы, в свою очередь, связаны с сеансами.
Не претендую на идеальное решение, так как есть свои подводные камни, уверен можно сделать универсальней.

Аватар пользователя Orion76 Orion76 24 июля 2012 в 19:21

"WebFamily" wrote:
Не создавать же для каждого кинотеатра одни и те же фильмы с разным расписанием.

Все очень просто .. -))

Кинотеатр и фильм - величины постоянные.
Сеанс - величина переменная (меняется дата, время, кинотеатр, фильм).
Следовательно основная сущность - сеанс.
К нему привязываем:
Кинотеатр.
Фильм.
Добавляем поля: дата, время

как-то так..

ЗЫ... вернее даже ..сеанс - тоже величина постоянная.
Можно сделать справочник (словарь таксономии):
дневной- 12ч
дневной- 13ч
вечерний-18ч
и т.д.
Приязать "многострочным" полем к кинотеатру..

А для ввода информации создать сущность "Показ" спривязкой к
Кинотеатру
Сеансу
Фильму

Аватар пользователя Orion76 Orion76 24 июля 2012 в 23:28

"WebFamily" wrote:
Под сущностью, что вы имеете ввиду?

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

Аватар пользователя WebFamily WebFamily 24 июля 2012 в 23:37

"orion76" wrote:
так в семерке, грубо говоря, называют тип материала

Два года с Drupal и первый раз такое слышу, хотя все что знаю и умею беру с drupal.ru. В основном все с комментов и обсуждений. Странно конечно))

Аватар пользователя WebFamily WebFamily 30 июля 2012 в 9:48

"orion76" wrote:
А для ввода информации создать сущность "Показ" спривязкой к
Кинотеатру
Сеансу
Фильму

Вы наверное имели ввиду не ввода информации, а вывода информации?

Аватар пользователя Orion76 Orion76 30 июля 2012 в 10:01

нет.. и ввод и вывод.
Добавляем к этой сущности поля:
Связь - Кинотеатр
Связь - Сеанс
Связь - Фильм
Дата показа или период