Почему MODX Evolution. Выбрали осознанно: лёгкий CMF, который не навязывает структуру, — дерево ресурсов естественно легло на разветвлённые разделы санатория, а чанки, сниппеты и TV-параметры позволили собрать шаблоны без «борьбы с движком». Для администратора Evo-менеджер простой и привычный, а любая нестандартная логика — вроде системы цен — пишется маленьким сниппетом на PHP, без плагинов-комбайнов.
Главное решение — сквозные переменные цен. Суть простая: ни одна цена не пишется в тексте страницы руками. Вместо цифры редактор вставляет код цены, а сама цифра живёт в едином реестре. В базе данных создали отдельную таблицу с уникальным символьным кодом, значением и служебными полями для каждой позиции прайса — коды строятся по понятной схеме: категория номера + вариант размещения или название услуги. Вместе с номерным фондом (шесть категорий номеров на пять вариантов заселения) и дополнительными услугами реестр охватывает весь прейскурант санатория.
Для вывода цены сделали маленький сниппет Price, который можно вызвать где угодно — в контенте страницы, чанке шаблона, TV-параметре, выводе Ditto — и который сам форматирует сумму (разделитель тысяч, неразрывные пробелы, валюта), поэтому цены выглядят одинаково на всех страницах и всех языках: переведённые версии вызывают те же коды. Сводная таблица на странице «Цены», карточка каждого номера в разделе «Проживание», блок «от … грн/сутки» на главной — всё берёт цену из одного источника, поэтому расхождения становятся невозможными.
Обновление прайса одним файлом. Самая приятная часть для администратора: в менеджере MODX сделали простой модуль «Прайс» со страницей загрузки CSV/Excel-файла — бухгалтерия санатория и так ведёт прейскурант в таблице, договорились лишь о формате колонок. Модуль работает в два шага: сначала предпросмотр, где администратор видит таблицу «код → старая цена → новая цена» с подсвеченными изменениями и предупреждениями о неизвестных или пропущенных кодах — это страхует от самой типичной ошибки, съехавших колонок или опечатки. Только после подтверждения модуль обновляет реестр одной транзакцией, сохраняет предыдущую версию прайса в таблице истории для возможного отката и чистит кеш страниц MODX. В результате: загрузил файл → просмотрел разницу → нажал «Применить» — и через две минуты новые цены стоят на каждой странице сайта на всех четырёх языках, без единого открытого документа в редакторе.
Другие решения проекта. Многоязычность реализовали как четыре языковые ветки с зеркальной структурой — сквозные переменные цен здесь окупились вдвойне, поскольку цифры общие для всех языков, переводятся только тексты. Каталог номеров и лечебных программ собрали на TV-параметрах и Ditto с фото, описанием, перечнем процедур и ценой через тот же сниппет. Формы заявок и бронирования отправляют данные менеджеру, подставляя цены из того же реестра, поэтому менеджер и гость всегда видят одинаковые суммы. Кеширование MODX вместе с единым запросом реестра цен на страницу держит сайт лёгким несмотря на разветвлённую структуру.
Итог для клиента. Санаторий получил четырёхъязычный сайт, который администратор ведёт самостоятельно. А решение со сквозными переменными цен превратило самую рискованную рутину — обновление прейскуранта — в две минуты работы с одним файлом. Подход универсален: реестр цен, сниппет-плейсхолдер и модуль импорта можно повторить на любом MODX-сайте (и не только на MODX), где цены разбросаны по многим страницам.


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