Berezovyi Hai

We built a multilingual website for the Berezovyi Hai radon spa resort in Khmilnyk on MODX Evolution — and solved the administrator's biggest headache along the way: a system of site-wide price variables that updates every price on the entire site, in all languages, from a single uploaded file.

Task

Beyond the usual requirements — a fast site, a convenient admin panel, multiple languages, and clear presentation of rooms and treatment programs — the client raised a pain point familiar to any sanatorium, hotel, or medical center. Prices change several times a year: seasonal rates, indexation, promotions. And they show up not just on the "Prices" page, but in room cards, treatment program descriptions, the "How to Book" section, and promo banners. On the old site, updating the price list was a nightmare: the administrator had to manually go through dozens of pages in each of four languages, and something always got missed — leading to mismatches between pages and awkward conversations with guests who "saw a different price on the website." The key technical requirement was formulated simply: a price should exist on the site in exactly one place, and the editor should be able to update the entire price list in a few minutes without a developer's help.

Result

Why MODX Evolution. We chose it deliberately: a lightweight CMF that doesn't impose a rigid structure — the resource tree mapped naturally onto the sanatorium's branching sections, while chunks, snippets, and TV parameters made it possible to build templates without fighting the engine. The Evolution manager is simple and familiar for the client's administrator, and just as importantly for us, any non-standard logic — like a pricing system — can be written as a small PHP snippet, with no bloated all-in-one plugins.

The core solution — site-wide price variables. The idea is simple: no price is ever typed directly into page content. Instead of a number, the editor inserts a price code, and the actual figure lives in a single registry. We created a dedicated database table where each price-list item has a unique text code, a value, and service fields — codes follow a clear pattern: room category plus occupancy option, or a service name. Together with the room inventory (six room categories across five occupancy options) and additional services, the registry covers the sanatorium's entire price list.

To display a price anywhere, we built a small Price snippet that can be called from page content, a template chunk, a TV parameter, or a Ditto output — and which formats the amount itself (thousands separator, non-breaking spaces, currency), so prices look identical across every page and every language, since translated pages call the exact same codes. The summary table on the "Prices" page, each room card in the "Accommodation" section, and the "from … per night" block on the homepage all pull from the same source, making mismatches impossible.

Updating the entire price list from a single file. This is the part the administrator appreciates most: we built a simple "Price" module in the MODX manager with a page for uploading a CSV/Excel file. The sanatorium's accounting team already kept the price list in a spreadsheet — we just agreed on a column format. The module works in two steps: first, a preview, where the administrator sees a "code → old price → new price" table with changes highlighted and warnings for unknown or missing codes — this catches the most common mistake, shifted columns or a typo in a code. Only after confirmation does the module update the registry in a single transaction, save the previous price list version to a history table for a possible rollback, and clear the MODX page cache. The end result: upload the file → review the differences → click "Apply" — and within two minutes, the new prices are live on every page of the site, in all four languages, without a single document open in the editor.

Other solutions on the project. Multilingual support was built as four language branches with a mirrored structure — the site-wide price variables paid off twice over here, since the numbers are shared across all languages and only the text needs translating. The catalog of rooms and treatment programs was assembled using TV parameters and Ditto, with photos, descriptions, treatment lists, and pricing pulled in through the same snippet. Booking and inquiry forms send data to the manager with prices substituted from the same registry, so the manager and the guest always see the same figures. MODX caching, combined with a single price-registry query per page, keeps the site fast despite its branching structure.

Outcome for the client. The sanatorium got a four-language website the administrator now manages independently. And the site-wide price variable system turned the riskiest piece of routine work — updating the price list — into two minutes of work with a single file. The approach is universal: the price registry, the placeholder snippet, and the import module can be replicated on any MODX site (or beyond MODX entirely) wherever prices are scattered across many pages.

Prices, rooms, and bookings, equally easy on any screen size

Guests check room prices from a laptop at home just as often as from a phone on the go, so the room cards, the price summary table, and the booking form are all adapted for any device — showing the same up-to-date figures regardless of screen size or language.

Berezovyi Hai
The jetbit.pro website uses cookies to store data. By continuing to use the site, you consent to the use of these files. Learn more