О том, где живут настройки виджетов
Почему у виджетов 2.0 два способа хранить настройки, чем скрипт провайдера отличается от бандла, какая настройка побеждает и зачем перечислять модули
Одна и та же настройка виджета может лежать в трёх местах: в скрипте провайдера на стороне Aplaut, в коде вашего сайта и в атрибуте на теге виджета. От того, где она лежит, зависит, кто её меняет и почему правка иногда не доходит до сайта.
Скрипт провайдера и бандл
Бандл — сам код виджетов, без настроек. Скрипт провайдера — небольшой скрипт компании, который хранится в Aplaut: он вызывает aplaut.init с настройками и подключает бандл. Способ установки определяет, кто из них отвечает за настройки.
При установке «Настройки в коде сайта» загрузчик на странице берёт бандл напрямую, а aplaut.init с настройками стоит рядом в коде сайта. Любая правка настроек означает правку кода и выкладку сайта.
При установке «Настройки в скрипте провайдера» загрузчик запрашивает адрес app.js вашей компании. Что придёт по этому адресу, решает переключатель Отдавать скрипт провайдера вместо бандла в разделе Виджеты. Включён — скрипт провайдера с настройками, выключен — бандл без них. Настройки меняет менеджер в личном кабинете, разработчик сайта не участвует.
Отсюда самая частая причина вопроса «сохранил, а на сайте ничего не изменилось»: скрипт провайдера сохранён, но переключатель выключен. Вторая причина — кеш: браузеры и CDN хранят ответ по адресу app.js до трёх часов. Бывает и наоборот. Переключатель включили, а в скрипте нет токена или нужных модулей, и виджеты пропадают сразу на всех страницах.
Если сайт и сам вызывает aplaut.init, а по адресу компании приходит скрипт провайдера, вызов сайта молча теряется. Загрузчик до загрузки бандла хранит аргументы только последнего init, а последним его вызывает скрипт провайдера. Два места с настройками на одной странице работают против друг друга.
Почему в разделе «Виджеты» сохраняется не всё
Раздел Виджеты — стенд для подбора. Превью показывает виджет с настройками из панели, но сами настройки поведения и видимости живут только в панели, пока их не записали в скрипт провайдера или не скопировали в код сайта. Уйдя со страницы, их можно потерять.
Сохраняются две вещи: пресеты оформления и сам скрипт провайдера. Пресет хранится у компании, и его видят все, у кого есть доступ к разделу. Скрипт провайдера хранит последние 10 версий, и к любой из них можно откатиться. Ссылка Поделиться ссылкой передаёт товар, виджет, пресет и скрытые элементы, но не настройки поведения: панель не хранит их даже в адресе.
Скрипт провайдера правят и руками: добавляют свою аналитику или setAuthParams. Раздел Виджеты обновляет в нём только блок между маркерами aplaut:playground, и ручной код вокруг переживает обновление настроек.
Какая настройка побеждает
Настройка из widgetsConfig в aplaut.init сильнее data-атрибута на теге. Так менеджер меняет поведение всех виджетов из одного места, не разыскивая теги по шаблонам сайта. Обратная сторона: если виджет в каталоге и в карточке товара должен вести себя по-разному, эту настройку не стоит задавать в widgetsConfig. Её задают атрибутами на тегах, и каждый экземпляр получает своё значение.
Тема устроена так же: общая тема из aplaut.init действует на все виджеты, а атрибут data-theme накладывается поверх неё на один экземпляр.
Почему модули нужно перечислять
Скрипт регистрирует только те виджеты, модули которых перечислены в availableWidgets, и загружает их код при инициализации. Страница с одним информером не тянет код формы и галереи: модуль информера лёгкий и загружается всегда. Тег виджета не из списка остаётся пустым, без ошибки в консоли.
Цена экономии в том, что модули связаны. Форма отзыва — отдельный модуль, и виджет отзывов создаёт её на странице сам. Без reviewsForm список отзывов на месте, но кнопка Написать отзыв ничего не открывает, как и клик по товару в приглашении оставить отзыв. Галерея устроена наоборот: модуль gallery нужен только отдельному тегу ap-reviews-gallery, фото внутри виджета отзывов открываются и без него.
Как отправить настройки на сайт — см. как настроить виджеты в личном кабинете. Все параметры — в справочнике настроек виджетов.