Skip to content

Сайт театра на MODX с базой данных мероприятий и сеансов

Notifications You must be signed in to change notification settings

1640max/valensio

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

83 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Код от сайта театра им. Алехандро Валенсио https://valensio.com.

Что оно умеет:

  • формировать афишу джоином двух таблиц из БД: с описанием мероприятий и с ближайшими датами
  • генерировать посты для соцсетей с афишей на месяц
  • расставлять utm-метки для соцсетей
  • сокращать ссылки с метками встроенным сокращателем valensio.com/s/...
  • переносить utm-метки на виджет с покупкой билетов — маркетолог узнает откуда пришёл покупатель, даже при разрыве сессии

Другие фичи

  • автоматически включает тёмную тему на основе предпочтений пользователя. Избегает «мерцания тёмной темы».
  • гибкая настройка цветовых тем

Особенности

CMS Modx

Сайт написан под CMS Modx. В этом репозитории хранится содержимое пользовательской папки assets.

Используется стандартное модэксовское разделение на элементы:

  • чанки (переиспользуемые куски HTML)
  • сниппеты (код на PHP)
  • ресурсы (страницы сайта)
  • шаблоны (страницы сайта).

Каждый элемент — статический.

Что такое статические элементы в MODX

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

Чтобы сделать процесс разработки привычнее, я пользуюсь статическими элементами: они хранятся в виде обычных файлов, а в базе данных вместо кода хранятся пути к этим файлам.

БЭМ и style guides

Код написан с использованием БЭМ. По крайней мере, в отношении именования классов и независимости блоков.

Также частично использую Google HTML/CSS Style Guide, Code Guide и Sass Guidelines. Когда-нибудь у меня дойдут руки привести код в максимальное соответствие этим гайдам.

База данных

В базе данных лежат две таблицы: repertoire и tickets.

  • repertoire содержит в себе информацию о спектаклях: идентификатор, название, описание, эмодзи, возраст, теги и т.д.
  • tickets содержит информацию о датах мероприятий: идентификатор мероприятия, дата, место, ссылка на билеты и т.д.

Для генерации афиши на главной странице используется join двух этих таблиц: информация о конкретной дате соединяется с информацией о мероприятии в целом.

На странице со всеми спектаклями выводится информация только из repertoire. Но есть особенность сортировки: мероприятия, на которые билеты есть, идут выше остальных. Поэтому для сортировки мероприятий также используется таблица tickets.

Цвета

За управление цветом отвечают файлы:

Как управлять цветовой темой страницы

К элементу <html> прикручивается класс color-theme, содержащий дефолтную белую тему. Изменяется тема с помощью классов-модификаторов типа color-theme_name_***, где *** — это название темы. Оно задаётся с помощью TV, которое так и называется — сolor-theme_name.

Что такое TV

Это возможность CMS Modx. Название темы можно задать в админке в отдельном поле при редактировании страницы сайта. Из кода страницы (ресурса в терминологии Modx, папка ./resources) задать цветовую тему нельзя.

Примеры

Модификаторов нет, используется дефолтная белая тема:

<html class="color-theme">

Есть модификатор, используется зелёная тема:

<html class="color-theme color-theme_name_green">

Список всех тем есть в ./scss/_color-theme.scss.

Тёмная тема

Чтобы активировать тёмную тему надо добавить класс color-theme_name_dark. При этом удалять классы-модификаторы, которые были изначально, не нужно: это позволит восстановить тему, при переключении с тёмной обратно на светлую. Достаточно будет просто удалить класс color-theme_name_dark и изначальная тема применится автоматически.

Пример

Используются два модификатора: зелёной и тёмной темы. Тёмная — приоритетнее.

<html class="color-theme color-theme_name_green color-theme_name_dark">

Цветовая тема и цветовой режим

Цветовая тема (color theme) и цветовой режим (color mode) — разные понятия.

  • Тема может быть белой, тёмной, красной, зелёной, какой угодно. Мы говорили о ней выше.
  • Режим может принимать только три значения: light, darkAndColors и dark. О нём поподробнее

Подробнее о цветовом режиме

Пользователь загружает страницу. Активируется ли тёмная тема? На этот вопрос отвечает цветовой режим.

  • Когда используется режим light, тёмная тема не используется вообще, класс color-theme_name_dark не добавляется.
  • Когда используется режим dark, на всех страницах используется тёмная тема, класс color-theme_name_dark всегда добавляется.
  • Когда используется режим darkAndColors, все цветные страницы остаются цветными, а страницы с дефолтной белой темой становятся тёмными. Класс color-theme_name_dark добавляется только когда нет модификаторов цветовой темы (то есть она белая, дефолтная).

Цветовой режим записывается в cookie с названием color-mode.

Когда пользователь приходит на сайт первый раз, color-mode у него не установлен. Он устанавливается на фронтенде файлом color-theme.js на основе медиа-запроса о предпочтениях пользователя (prefers-color-scheme: ):

  • Если пользователь предпочитает светлую тему, то ставим режим light.
  • Если пользователь предпочитает тёмную тему, то ставим ему режим darkAndColors. Так он не ослепнет от белых страниц, но увидит потрясающие цвета на цветных страницах.

На сайте есть кнопка, переключающая цветовые режимы. Она работает с тем же файлом color-theme.js. С помощью неё можно переключиться на режимы light и dark. На darkAndColors переключиться нельзя, его можно только получить по дефолту. Так сделано, чтобы не усложнять интерфейс. Пусть пользователи думают, что есть только светлый режим и тёмный режим.

Чтобы избежать мерцания тёмной темы (dark mode flash), тёмная тема устанавливается на бэкенде. При генерации страницы, сервер на основе текущего цветового режима решает добавлять ему класс color-theme_name_dark или нет. Ответственный за это код прописан в сниппете color-theme_names.

About

Сайт театра на MODX с базой данных мероприятий и сеансов

Resources

Stars

Watchers

Forks