
ms3ProductSets
Динамические подборки товаров для MiniShop3 — ручные связи, авто-рекомендации, админка шаблонов


Пользовательские сценарии в manager: interface/flows.
Серверный вывод сниппетом (обзор):
AJAX-рендер с фронтенда:
[[!ms3ProductSets? ... ]], Fenom — {'ms3ProductSets' | snippet : [ ... ]}.type, max_items, resource_id, category_id, …).msps_get_products_by_type.'' или emptyTpl.return=ids возвращает CSV ID;msProducts и рендерит карточки.tplWrapper оборачивает итоговый HTML.toPlaceholder складывает результат в placeholder.window.ms3ProductSets.render('#selector', options).action=get_set в connector.php.ms3ProductSets с параметрами из POST.data-add-to-cart или «Добавить весь набор» (data-add-set).window.ms3Config.actionUrl, запрос идёт в MiniShop3 Web API: POST на api.php?route=/api/v1/cart/add с JSON { id, count, options } и credentials: 'same-origin'.action=add_to_cart — сервис ms3, токен из cookie ms3_token, вызов Cart::add().msps:cart:update, при ответе API — ms3:cart:updated с detail.data для обновления карточек MS3.save_template.MSPS_ADMIN_TEMPLATE_TYPES), непустой список существующих msProduct.msps_save_template — INSERT/UPDATE в ms3_product_set_templates. При переименовании шаблона обновляет template_name и type в уже применённых связях.msps_bump_cache_generation, UI перезагружает список.apply_template (template_id, parent_id/parent_ids, replace).msProduct.ms3_product_sets.applied — число строк, реально добавленных через INSERT IGNORE (без учёта дублей и self-link).unbind_template.type и name шаблона.type + template_name.data-add-set (в tplSetVIP или tplSetWrapper)..msps__vip-set, .msps__wrapper или [data-set-type]).[data-product-id] и [data-add-to-cart].addToCart(productId, 1) для каждого ID.set_added / ошибку и диспатчит msps:cart:update с product_ids.OnDocFormSave.msProduct.template_name для этого типа. Связи из шаблонов сохраняются.template_name), вставляются новые ID из TV (с валидацией msProduct).msps_bump_cache_generation.