From af9b7b13a458059cee80935150d988d87aefada6 Mon Sep 17 00:00:00 2001 From: Konstantin Date: Sat, 30 May 2026 11:47:38 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=B1=D0=BE=D1=80=20=D0=B3=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B4=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AGENTS.md | 40 +++++++++++++++++ .../view/template/catalog/attribute_form.twig | 2 +- public/store/controller/common/city.php | 44 +++++++++++++++++++ public/store/controller/common/header.php | 16 +++++++ .../view/theme/dominik/assets/js/script.js | 24 ++++++++++ .../dominik/template/common/city_list.twig | 40 +++++++++++++++++ .../theme/dominik/template/common/header.twig | 13 +++--- 7 files changed, 173 insertions(+), 6 deletions(-) create mode 100644 public/store/controller/common/city.php create mode 100644 public/store/view/theme/dominik/template/common/city_list.twig diff --git a/AGENTS.md b/AGENTS.md index d94dd68..aa4fc89 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -87,6 +87,46 @@ storage/ - Темы: `public/store/view/theme/` - Языковые файлы расширений: `public/admin/language/ru-ru/extension/` +## Модальные окна и UI + +### Модалки (modal.create) +Система модальных окон реализована в `public/store/view/theme/dominik/assets/js/script.js` (объект `modal`, строка 64). + +**Вызов модалки с HTML-контентом:** +```js +modal.create({ + modal: '

Содержимое окна

', // HTML-контент (обязателен) + title: 'Заголовок окна', // опционально + width: 400, // опционально, ширина в px + align: 'top', // опционально, прижать к верху + class: { // опционально, CSS-классы + 'modal-body': 'p-0', + 'modal-title': 'text-primary' + }, + callback: { // опционально + show: function() { ... } // колбек при показе + } +}); +``` + +**Загрузка контента через AJAX (modal.load):** +```js +modal.load(url, data); // ожидает JSON-ответ с ключом 'modal' +``` + +### Выбор города в шапке +Выбор города реализован через: +- **Контроллер:** `public/store/controller/common/city.php` + - `index()` — отдаёт HTML-список зон (городов) для страны магазина + - `save()` — сохраняет `city_id` в сессию (`session->data['city_id']`), возвращает JSON с именем города +- **Шаблон списка:** `public/store/view/theme/dominik/template/common/city_list.twig` +- **Логика в хедере:** `public/store/controller/common/header.php` (строки с `model_localisation_zone`) + - Берёт `config_country_id` и `config_zone_id` из настроек магазина + - Если в сессии есть `city_id` — используется он, иначе `config_zone_id` + - Передаёт `current_city_name` и `city_list_url` в шаблон +- **Кнопка в шапке:** `public/store/view/theme/dominik/template/common/header.twig` — после `{{ service_menu }}` +- **JS-функция:** `citySelect(el)` в `script.js` — загружает список городов через AJAX, создаёт модалку, при клике сохраняет выбор в сессию и обновляет название на кнопке + ## Полезные команды ```bash diff --git a/public/admin/view/template/catalog/attribute_form.twig b/public/admin/view/template/catalog/attribute_form.twig index 1e875a2..5db504b 100644 --- a/public/admin/view/template/catalog/attribute_form.twig +++ b/public/admin/view/template/catalog/attribute_form.twig @@ -41,7 +41,7 @@