You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/components/ms3favorites/frontend.md
+49-20Lines changed: 49 additions & 20 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,9 +9,14 @@ title: Подключение на сайте
9
9
10
10
Для гостей при пустой БД данные берутся из `localStorage/cookie`. Для авторизованных и гостей (при `guest_db_enabled`) — из БД по `user_id` или `session_id`.
11
11
12
-
**Чек-лист:** лексикон и `favorites.js` подключены на каждой странице товара; кнопка имеет `data-favorites-toggle` и `data-id`; `ms3favorites.guest_db_enabled` = Да; для авторизованных — пользователь авторизован в контексте **web**.
12
+
**Чек-лист перед проверкой**
13
13
14
-
## Коннектор (AJAX)
14
+
- На каждой странице карточки товара подключены лексикон и скрипт `favorites.js`.
15
+
- У кнопки избранного заданы атрибуты `data-favorites-toggle` и `data-id`.
16
+
- При работе гостей с БД в системных настройках включено `ms3favorites.guest_db_enabled` (**Да**).
17
+
- Авторизованный пользователь открывает сайт в контексте **web** (сессия совпадает с фронтом каталога).
-**sync** — синхронизация списков в БД (JSON). POST `lists` (JSON) или `ids`
24
29
-**create_share** — создание публичной ссылки (JSON). POST `list`. Только авторизованные
25
30
-**get_share** — получение данных по токену (JSON). POST `token`
26
-
-**copy_share** — копирование чужого списка в свой (JSON). POST `token`, `target_list`
31
+
-**`copy_share`** — копирование чужого списка в свой (JSON). POST **`token=xxx`**, **`target_list=default`** → **`{ success, ids }`**. **Гости** получают **`ids`** для **localStorage**.
27
32
-**update_comment** — обновление заметки к элементу (JSON). POST `product_id`, `list`, `comment`. При `comments_enabled`
28
33
-**add_to_cart** — добавление товаров в корзину (JSON). POST `ids` или `product_id`
29
34
-**get_popularity** — маппинг id→count (JSON). POST `ids`, `resource_type`
@@ -37,7 +42,7 @@ title: Подключение на сайте
37
42
|------|------------|
38
43
|`tplFavoritesItem`| Карточка товара в списке «Избранное» |
39
44
|`tplFavoritesEmpty`| Пустое состояние (при отсутствии товаров) |
|`tplFavoritesPage`| Страница `/wishlist/` (табы, тулбар; при `resource_type=products` и `serverList=1` — SSR **pdoPage** + **msProducts** в чанке; при `serverList=0` или другом типе — карточки через`favorites.js`) |
41
46
|`tplFavoritesPageItem`| Элемент для страницы `/wishlist/` (checkbox, заметка, кнопка удаления) |
42
47
|`tplFavoritesPageDemo`| Тот же файл, что и `tplFavoritesPage`: при `&tpl=tplFavoritesPageDemo` или `&extendedToolbar=1` включается панель «Каталог / Очистить / Поделиться» |
|`data-favorites-page-container`| div | Контейнер страницы wishlist |
73
+
|`data-server-empty`| div |`1` — список на сервере пуст (cookie/sync); выставляет **ms3FavoritesPage**|
74
+
|`data-ms3f-ssr-products`| div |`1` — SSR-список товаров в **tplFavoritesPage**; при «Очистить» и при удалении последней карточки возможна перезагрузка страницы |
68
75
|`data-favorites-mode="list"`| div | Режим удаления карточки при клике «Удалить» |
69
76
70
77
Чанки можно переопределять своими (Fenom или MODX); параметры `tpl` и `emptyTpl` задаются в сниппете и при вызове `render()` в JS.
@@ -75,7 +82,7 @@ title: Подключение на сайте
75
82
76
83
На мобильных устройствах — горизонтальный скролл списка (`.ms3f__list`).
77
84
78
-
## CSS-переменные
85
+
## CSS-переменные {#css-variables}
79
86
80
87
Переопределяйте в своей теме (`:root` или контейнер блока):
81
88
@@ -86,7 +93,9 @@ title: Подключение на сайте
86
93
|`--ms3f-radius`| Скругление |
87
94
|`--ms3f-color`| Цвет текста |
88
95
|`--ms3f-price-color`| Цвет цены |
89
-
|`--ms3f-button-active`| Цвет активной кнопки (товар в списке) |
96
+
|`--ms3f-button-active`| Акцентный цвет: активная кнопка избранного, основные кнопки на `/wishlist/`, outline фокуса, `accent-color` у чекбокса |
97
+
98
+
Переменные заданы в начале `favorites.css` в блоке `:root` и влияют на карточки списка, страницу `/wishlist/` (вкладки, тулбар, поля) и кнопку избранного. В отдельных правилах для `--ms3f-button-active` указан запасной цвет `#e74c3c`, если переменная не переопределена.
90
99
91
100
Пример:
92
101
@@ -115,22 +124,42 @@ title: Подключение на сайте
115
124
116
125
## JavaScript API
117
126
127
+
Актуально для объекта, который экспортирует `assets/components/ms3favorites/js/favorites.js` (`window.ms3Favorites`).
128
+
118
129
```javascript
119
130
window.ms3Favorites= {
120
-
getList(name), // Получить ID списка
121
-
getAllLists(resourceType?), // Все списки {default:[], gifts:[]}; без аргумента — текущий resource_type
updateComment(productId, list, comment), // Сохранить заметку (до 500 символов)
133
-
clear(list) // Очистить список (action=clear)
131
+
// Списки и тип ресурса (второй/третий аргументы опциональны — берутся из контекста страницы / storage)
132
+
getList(name?, resourceType?),
133
+
getAllLists(resourceType?), // без аргумента — слияние списков по всем типам из byType (для /wishlist/ обычно передают тип страницы)
134
+
add(id, list?, resourceType?),
135
+
remove(id, list?, resourceType?),
136
+
clearList(list?, resourceType?), // локально очистить список и комментарии к позициям; кнопка «Очистить» дополнительно шлёт POST action=clear
137
+
switchList(name),
138
+
139
+
render(selector, options), // selector: строка (querySelector) или DOM-элемент с id → регистрируется как #id; options: list, tpl, emptyTpl, limit, resource_type или resourceType
140
+
updateCounter(),
141
+
updateButtonStates(),
142
+
143
+
sync(options?), // для каждого типа: POST action=sync с локальными списками, ответ сервера записывается в storage; authoritative: true — флаг «локальное состояние — источник правды» (см. flushToServer)
144
+
flushToServer(), // обёртка: sync({ authoritative: true }) и событие ms3f:synced
-**Страница /wishlist/** — табы и контейнер от `ms3FavoritesPage`, карточки дорисовывает JS; счётчики табов и `ms3f.total` на сервере; пагинация отдельно (ms3FavoritesIds + pdoPage)
41
+
-**Страница /wishlist/** — `ms3FavoritesPage`: табы и оболочка; для **`resource_type=products`** при **`serverList=1`** (по умолчанию) список товаров выводится **на сервере** в чанке (**pdoPage** + **msProducts**); при **`serverList=0`**карточки дорисовывает **favorites.js** (до 100 позиций на вкладку). Для других типов ресурсов список по-прежнему через `JS` после `sync`. Отдельная серверная пагинация — цепочка `ms3FavoritesIds` → `pdoPage` → `ms3Favorites` (или `msProducts`)
42
42
-**Интеграция с корзиной** — «Добавить все в корзину», «Добавить выбранные»
43
43
-**Популярность** — «У N пользователей в избранном»
-**Каталог** — чанк `tplCatalogRowMs3f` для строки с кнопкой избранного при **pdoPage** + **msProducts** ([интеграция](integration#catalog-pdopage-row))
48
-
-**Уведомления** — цепочка: опционально `ms3fConfig.notify` → `window.ms3Message.show` (MiniShop3) → [iziToast](https://marcelodolza.github.io/iziToast/) (ленивая загрузка из `assets/components/ms3favorites/vendor/izitoast/`, базовый URL в `ms3fConfig.iziToastBaseUrl` из `ms3fLexiconScript`). Настройка `ms3favorites.use_minishop3_toast` удалена.
48
+
-**Уведомления** — цепочка: опционально `ms3fConfig.notify` → `window.ms3Message.show` (MiniShop3) → [iziToast](https://marcelodolza.github.io/iziToast/) (ленивая загрузка из `assets/components/ms3favorites/vendor/izitoast/`, базовый URL в `ms3fConfig.iziToastBaseUrl` из `ms3fLexiconScript`).
49
49
50
50
## Системные требования
51
51
@@ -58,7 +58,7 @@ ms3Favorites — компонент реализует функционал со
58
58
### Зависимости
59
59
60
60
-**[MiniShop3](/components/minishop3/)** — товары и категории
61
-
-**[pdoTools](/components/pdotools/) 3.0.0+** — для сниппетов (pdoPage, Fenom)
61
+
-**[pdoTools](/components/pdotools/) 3.0.0+**
62
62
63
63
## Установка
64
64
@@ -85,6 +85,6 @@ ms3Favorites — компонент реализует функционал со
85
85
| Термин | Описание |
86
86
|--------|----------|
87
87
|**Wishlist**| Список избранных товаров (по умолчанию — `default`) |
88
-
|**Синхронизация**| Перенос списка из localStorage в БД при входе пользователя |
88
+
|**Синхронизация**| Перенос списка из `localStorage` в БД при входе пользователя |
89
89
|**Шаринг**| Публичная ссылка на список по токену |
90
90
|**Популярность**| Количество пользователей, добавивших ресурс в избранное |
0 commit comments