Как встроить форму отзыва без виджета отзывов
Как поставить на сайт только форму отзыва виджетов 2.0 со своей кнопкой «Оставить отзыв» и заполнить в ней данные покупателя
Поставьте на страницу только форму отзыва виджетов 2.0, если список отзывов выводит ваш сайт или если кнопка «Оставить отзыв» нужна вне карточки товара: например, в списке заказов покупателя. Кнопку и её обработчик делает ваш сайт, форму открывает Aplaut.
Что понадобится
- Загрузчик виджетов 2.0 в
<head>страницы и вызовaplaut.init: см. установку на веб-сайте, шаги 1 и 2. - Чтобы вызывать
aplaut.showReviewFormдо загрузки скрипта, допишите метод в массив методов загрузчика: см. там же, шаг 2. - ID товара из каталога, загруженного в Aplaut: значение
offer.id.
Шаг 1. Разместите форму на странице
Поставьте тег формы с ID товара вместо тегов остальных виджетов:
<ap-reviews-form data-context-id="12345"></ap-reviews-form>
Если кнопок несколько, например по одной на каждый товар в заказах, добавляйте тег формы с ID товара по клику на кнопку, см. шаг 2. Остальные параметры формы — в справочнике настроек виджетов.
На странице не должно быть виджета отзывов или вопросов и ответов на тот же товар, и на один товар должна вести одна кнопка. Если на странице есть виджет отзывов, showReviewForm открывает форму этого виджета, а не отдельную.
Шаг 2. Откройте форму по своей кнопке
В обработчике клика сначала передайте данные покупателя, если он вошёл на сайт, затем откройте форму. Поля имени и email в форме будут заполнены, а данные уйдут вместе с отзывом.
Для формы с data-context-id достаточно хеша с тем же ID товара в адресе страницы:
document.querySelector("#write-review").addEventListener("click", () => {
aplaut.setParams({ name: "Анна", email: "anna@example.com" });
window.location.hash = "#/mps/reviews/new/12345"; // 12345 — offer.id из data-context-id
});
Хеш с другим ID форма не откроет: её адрес привязан к товару, с которым она загрузилась. Для списка товаров создавайте тег формы с ID нужного товара по клику и только потом меняйте хеш:
document.querySelectorAll("[data-review-product]").forEach((button) => {
button.addEventListener("click", () => {
const productId = button.dataset.reviewProduct; // offer.id товара
let form = document.querySelector(`ap-reviews-form[data-context-id="${productId}"]`);
if (!form) {
form = document.createElement("ap-reviews-form");
form.setAttribute("data-context-id", productId);
document.body.appendChild(form);
}
aplaut.setParams({ name: "Анна", email: "anna@example.com" });
setTimeout(() => {
window.location.hash = `#/mps/reviews/new/${productId}`;
}, 300); // новой форме нужно время, чтобы загрузиться
});
});
Если на сайте включён isHashRoutingDisabled: true, виджеты не меняют адрес, и форму открывает метод aplaut.showReviewForm(). Товар передайте в том же обработчике через aplaut.setParams({ product_id: "12345" }).
setParams передаёт данные открытым текстом. Если данные покупателя нужно подписать, настройте JWT: см. как настроить вход покупателя для отзывов. Все параметры метода — в справочнике JS API виджетов.
Проверка результата
Нажмите свою кнопку. Открылась форма отзыва на нужный товар, а для вошедшего покупателя заполнены имя и email. Отправленный отзыв появляется в личном кабинете в разделе Отзывы.
Если форма не открылась:
- тег формы пустой и запросов к Aplaut нет — на странице не вызван
aplaut.init; - адрес страницы не изменился после клика — обработчик не сработал или включён
isHashRoutingDisabled, тогда открывайте форму черезshowReviewForm; - в консоли ошибка
aplaut.showReviewForm is not a function— в загрузчике короткий массив методов; - ID в хеше не совпадает с
data-context-idформы или товара с такимoffer.idнет в каталоге; - форма не открывается повторно на тот же товар — хеш уже стоит в адресе, сбросьте его перед новой установкой.