Skip to content

Commit 42a5de3

Browse files
authored
Merge pull request #875 from modx-pro/docs/ms3productsets-ms3favorites-update
docs: обновление ms3ProductSets и ms3Favorites (RU/EN)
2 parents db2b2e6 + 2b66df3 commit 42a5de3

44 files changed

Lines changed: 1817 additions & 697 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/components/ms3favorites/frontend.md

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,14 @@ title: Подключение на сайте
99

1010
Для гостей при пустой БД данные берутся из `localStorage/cookie`. Для авторизованных и гостей (при `guest_db_enabled`) — из БД по `user_id` или `session_id`.
1111

12-
**Чек-лист:** лексикон и `favorites.js` подключены на каждой странице товара; кнопка имеет `data-favorites-toggle` и `data-id`; `ms3favorites.guest_db_enabled` = Да; для авторизованных — пользователь авторизован в контексте **web**.
12+
**Чек-лист перед проверкой**
1313

14-
## Коннектор (AJAX)
14+
- На каждой странице карточки товара подключены лексикон и скрипт `favorites.js`.
15+
- У кнопки избранного заданы атрибуты `data-favorites-toggle` и `data-id`.
16+
- При работе гостей с БД в системных настройках включено `ms3favorites.guest_db_enabled` (**Да**).
17+
- Авторизованный пользователь открывает сайт в контексте **web** (сессия совпадает с фронтом каталога).
18+
19+
## Коннектор (AJAX) {#connector-ajax}
1520

1621
**URL:** `assets/components/ms3favorites/connector.php`
1722

@@ -23,7 +28,7 @@ title: Подключение на сайте
2328
- **sync** — синхронизация списков в БД (JSON). POST `lists` (JSON) или `ids`
2429
- **create_share** — создание публичной ссылки (JSON). POST `list`. Только авторизованные
2530
- **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**.
2732
- **update_comment** — обновление заметки к элементу (JSON). POST `product_id`, `list`, `comment`. При `comments_enabled`
2833
- **add_to_cart** — добавление товаров в корзину (JSON). POST `ids` или `product_id`
2934
- **get_popularity** — маппинг id→count (JSON). POST `ids`, `resource_type`
@@ -37,7 +42,7 @@ title: Подключение на сайте
3742
|------|------------|
3843
| `tplFavoritesItem` | Карточка товара в списке «Избранное» |
3944
| `tplFavoritesEmpty` | Пустое состояние (при отсутствии товаров) |
40-
| `tplFavoritesPage` | Страница `/wishlist/` (табы, тулбар; карточки заполняет `favorites.js`, встроенной пагинации нет) |
45+
| `tplFavoritesPage` | Страница `/wishlist/` (табы, тулбар; при `resource_type=products` и `serverList=1` — SSR **pdoPage** + **msProducts** в чанке; при `serverList=0` или другом типе — карточки через `favorites.js`) |
4146
| `tplFavoritesPageItem` | Элемент для страницы `/wishlist/` (checkbox, заметка, кнопка удаления) |
4247
| `tplFavoritesPageDemo` | Тот же файл, что и `tplFavoritesPage`: при `&tpl=tplFavoritesPageDemo` или `&extendedToolbar=1` включается панель «Каталог / Очистить / Поделиться» |
4348
| `tplFavoritesListSelector` | Dropdown выбора списка (`default`, `gifts`, `plans`) |
@@ -65,6 +70,8 @@ title: Подключение на сайте
6570
| `data-favorites-count` | span | Счётчик количества элементов |
6671
| `data-favorites-share` | button | Кнопка «Поделиться списком» (атрибут `data-list`) |
6772
| `data-favorites-page-container` | div | Контейнер страницы wishlist |
73+
| `data-server-empty` | div | `1` — список на сервере пуст (cookie/sync); выставляет **ms3FavoritesPage** |
74+
| `data-ms3f-ssr-products` | div | `1` — SSR-список товаров в **tplFavoritesPage**; при «Очистить» и при удалении последней карточки возможна перезагрузка страницы |
6875
| `data-favorites-mode="list"` | div | Режим удаления карточки при клике «Удалить» |
6976

7077
Чанки можно переопределять своими (Fenom или MODX); параметры `tpl` и `emptyTpl` задаются в сниппете и при вызове `render()` в JS.
@@ -75,7 +82,7 @@ title: Подключение на сайте
7582

7683
На мобильных устройствах — горизонтальный скролл списка (`.ms3f__list`).
7784

78-
## CSS-переменные
85+
## CSS-переменные {#css-variables}
7986

8087
Переопределяйте в своей теме (`:root` или контейнер блока):
8188

@@ -86,7 +93,9 @@ title: Подключение на сайте
8693
| `--ms3f-radius` | Скругление |
8794
| `--ms3f-color` | Цвет текста |
8895
| `--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`, если переменная не переопределена.
9099

91100
Пример:
92101

@@ -115,22 +124,42 @@ title: Подключение на сайте
115124

116125
## JavaScript API
117126

127+
Актуально для объекта, который экспортирует `assets/components/ms3favorites/js/favorites.js` (`window.ms3Favorites`).
128+
118129
```javascript
119130
window.ms3Favorites = {
120-
getList(name), // Получить ID списка
121-
getAllLists(resourceType?), // Все списки {default:[], gifts:[]}; без аргумента — текущий resource_type
122-
add(id, list), // Добавить товар в список
123-
remove(id, list), // Удалить из списка
124-
switchList(name), // Переключить активный список
125-
render(selector, options), // options: list, tpl, emptyTpl, limit
126-
updateCounter(), updateButtonStates(),
127-
sync(), // Синхронизация (POST lists)
128-
createShare(list), // Создать share-ссылку → token (только авторизованные)
129-
copyFromShare(token), // Скопировать чужой список (target_list опционально)
130-
addToCart(ids), // Добавить товары в корзину MiniShop3
131-
addSelectedToCart(), // Добавить выбранные (checkbox)
132-
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
145+
146+
createShare(list?, resourceType?), // Promise → token | null (только авторизованные)
147+
copyFromShare(token), // Promise → массив ID; список назначения — текущий активный (перед вызовом при необходимости switchList)
148+
149+
addToCart(ids), // Promise → число добавленных в корзину MiniShop3
150+
addSelectedToCart(), // Promise — по отмеченным [data-favorites-cart-checkbox]
151+
updateComment(productId, list?, comment, resourceType?), // заметка до лимита COMMENT_MAX_LENGTH в коде (500)
152+
153+
// Дополнительно
154+
getData(), // объект из localStorage/cookie (byType, _defaultType, …)
155+
save(data), // записать после правок и обновить счётчики, кнопки и зарегистрированные render-цели
156+
getTotalCount(resourceType?), // без аргумента — сумма по всем типам и спискам
157+
getComment(productId, listName?, resourceType?),
158+
getResourceTypeFromElement(el), // data-resource-type
159+
getAll(), // устаревшее имя: getList('default') с типом ресурса из _defaultType в данных
160+
toast(text, variant?),
161+
getConnectorUrl(),
162+
ensureCookie(), // используется при data-server-empty на странице списка
134163
};
135164
```
136165

docs/components/ms3favorites/index.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,14 @@ ms3Favorites — компонент реализует функционал со
3838
- **Гости в БД** — при `guest_db_enabled` список гостя сохраняется по session_id
3939
- **Несколько списков**`default`, `gifts`, `plans` и др. (до `max_lists`)
4040
- **Шаринг списка** — публичная ссылка `/wishlist/share?token=xxx`, копирование чужого списка
41-
- **Страница /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`)
4242
- **Интеграция с корзиной** — «Добавить все в корзину», «Добавить выбранные»
4343
- **Популярность** — «У N пользователей в избранном»
4444
- **Типы ресурсов**`products`, `resources`, `articles`, `pages`, `custom`
4545
- **Локализация** — MODX Lexicon (ru, en), на фронте — сниппет `ms3fLexiconScript`
4646
- **Кастомизация** — Fenom-чанки, BEM-классы (префикс `ms3f`), CSS-переменные
4747
- **Каталог** — чанк `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`).
4949

5050
## Системные требования
5151

@@ -58,7 +58,7 @@ ms3Favorites — компонент реализует функционал со
5858
### Зависимости
5959

6060
- **[MiniShop3](/components/minishop3/)** — товары и категории
61-
- **[pdoTools](/components/pdotools/) 3.0.0+** — для сниппетов (pdoPage, Fenom)
61+
- **[pdoTools](/components/pdotools/) 3.0.0+**
6262

6363
## Установка
6464

@@ -85,6 +85,6 @@ ms3Favorites — компонент реализует функционал со
8585
| Термин | Описание |
8686
|--------|----------|
8787
| **Wishlist** | Список избранных товаров (по умолчанию — `default`) |
88-
| **Синхронизация** | Перенос списка из localStorage в БД при входе пользователя |
88+
| **Синхронизация** | Перенос списка из `localStorage` в БД при входе пользователя |
8989
| **Шаринг** | Публичная ссылка на список по токену |
9090
| **Популярность** | Количество пользователей, добавивших ресурс в избранное |

0 commit comments

Comments
 (0)