Единый прайс-лист на MODX: централизованное управление и гибкий вывод услуг на страницах сайта
Заказчик: Клиника доктора Натальи Самович «ВИЗАВИ»
Сайт:
CMS: MODX Revolution
На сайте клиента информация о стоимости услуг размещалась непосредственно на страницах соответствующих услуг. Фактически для каждой страницы приходилось формировать собственный перечень позиций. Такой подход работал, пока количество страниц и услуг оставалось небольшим. Но со временем возникла проблема дублирования информации.
Одна и та же услуга могла присутствовать сразу на нескольких страницах. Если менялось её название, код или стоимость, приходилось искать все места, где она использовалась, и вручную вносить одинаковые изменения.
При большом количестве позиций это создавало дополнительную нагрузку на администрирование и риск расхождения данных. Например, цена одной и той же услуги на разных страницах могла отличаться просто потому, что обновление было выполнено не везде.
Требовалось изменить сам принцип работы с ценами: создать единый источник данных, из которого страницы сайта могли бы получать необходимые им позиции. При этом важно было сохранить возможность формировать индивидуальные перечни услуг для разных страниц, а не выводить на каждой из них весь общий прайс.
Изучили действующую организацию цен. Прайс уже имел иерархическую структуру: разделы, подразделы и отдельные позиции с кодами, наименованиями и стоимостью.
За основу взяли существующую структуру данных, чтобы не создавать отдельную систему управления ценами и не усложнять работу с сайтом.
Организовали централизованное хранение позиций
Настроили общий прайс-лист, в котором информация об услугах хранится в одном месте.
Теперь название, код и стоимость каждой позиции редактируются централизованно. Нет необходимости вручную поддерживать одинаковые записи на нескольких страницах сайта.
Добавили идентификаторы разделов и отдельных позиций
Для блоков и отдельных строк прайс-листа предусмотрели собственные ID.
Это позволило обращаться к конкретной услуге независимо от того, в каком разделе или подразделе она находится. Идентификаторы используются для связи позиций общего прайса со страницами сайта.
Доработали настройки страниц услуг в админке
В административной части MODX добавили возможность указывать, какие данные из общего прайс-листа необходимо вывести на конкретной странице.
Предусмотрели два способа выбора:
Целый блок или подраздел — страница получает все позиции выбранной части прайс-листа.
Отдельные позиции — можно указать ID конкретных услуг, которые должны отображаться на странице.
Для выбора нескольких отдельных позиций используется список идентификаторов через запятую. Таким образом, состав таблицы на каждой странице можно настраивать индивидуально, не создавая копий исходных данных.
Реализовали логику автоматического формирования таблиц
Доработали шаблон страницы на MODX. Теперь он получает настройки конкретной страницы, обращается к общему прайс-листу и выбирает необходимые данные.
Если указаны ID отдельных позиций, выводятся именно они. Если такой список не задан, используется привязка к целому подразделу.
На основании найденных данных формируется таблица с кодами, наименованиями и ценами.
Сохранили прежний механизм отображения
При внедрении новой логики учли уже существующие страницы сайта.
Если настройки связи с общим прайс-листом не заполнены, продолжает работать прежний механизм вывода локального перечня услуг.
Это позволило внедрить централизованное управление ценами без необходимости сразу переделывать все страницы и переносить каждый существующий прайс на новую схему.
Проверили работу разных сценариев вывода прайса
Проверили отображение целых подразделов, выборочных позиций и прежнего локального прайса.
Убедились, что одна и та же позиция может использоваться на нескольких страницах, а изменения в общем прайс-листе применяются ко всем страницам, где эта позиция выведена.
Исправили ошибки и улучшили оформление
Привели в порядок вёрстку текстовых элементов и унифицировали отображение стоимости. Убрали знак рубля у каждой отдельной цены и перенесли его в заголовок столбца — «Цена, ₽».
В результате таблицы стали визуально чище, компактнее и удобнее для восприятия.
Результат
Вместо множества отдельных перечней появился единый источник данных для цен на сайте.
Теперь администратору достаточно изменить стоимость, название или другие данные услуги в общем прайс-листе. Обновлённая информация автоматически отобразится на всех страницах, где используется эта позиция.
При этом каждая страница сохраняет собственный состав таблицы: где-то выводится целый блок услуг, где-то — только несколько выбранных позиций.
Что это дало проекту
Единое управление ценами
Информация об услуге редактируется только в одном месте.
Отсутствие дублирования
Не нужно повторно создавать одну и ту же позицию для разных страниц услуг.
Актуальность данных
Изменение стоимости в общем прайсе отражается во всех связанных страницах.
Гибкость отображения
Можно выводить как целые блоки, так и отдельные позиции прайса.
Упрощение администрирования
Новые страницы можно связывать с уже существующими позициями без повторного заполнения данных.
Сохранение совместимости
Ранее созданные страницы продолжают работать с прежним механизмом отображения.
Технологии и инструменты
CMS: MODX Revolution 2.8.8-pl
Шаблонизация: Fenom
Управление данными: MIGX
Дополнительные поля: MODX TV
Формат хранения структурированных данных: JSON
Получение данных: pdoResources, pdoField
Серверная технология: PHP
Итог
Мы изменили принцип управления ценами на сайте: вместо независимых перечней на отдельных страницах реализовали централизованный прайс-лист с возможностью выборочного использования его содержимого.
Теперь данные об услугах поддерживаются в одном месте, а сайт самостоятельно формирует нужные таблицы на основе настроек каждой страницы.
Это не только устраняет проблему расхождения цен, но и делает дальнейшее развитие сайта проще: добавление новых страниц и изменение существующих перечней больше не требуют повторного ввода одних и тех же данных.