Как прописать логику popup, предлагающего подписаться?
Часто в магазинах есть такое надоедливое и всех бесячее попап-окно, которое при загрузке страницы вылетает и призывает подписаться. Клиенты его хотят в свой магазин.
Для самих подписок поставил самый популярный из плагинов - Newsletter, по старинке.
Popup делаю руками, и при загрузке settimeout на jQuery, чтоб появися через несколько секунд.
А если человек уже подписался - то можно ли как-то это дать знать? Я просто никогда как покупатель на эти рассылки не подписывался, и не знаю, вылетают окна, если ты уже подписан, или нет.
Или есть специальный плагин, который делает подписку поп-апом?
Нет! На contact-form-7+popup-maker НЕ ПОДХОДИТ!!!!! Нужен плагин именно подписки а не контакт-форм, а поп-ап окно я сам сделаю - ему надо как-то дать понять, что подписка уже есть.
Дополнительно:
ему надо как-то дать понять, что подписка уже есть.
Так дайте.
Запросите данные пользователя и проверяйте их перед показом окна.
Если регистрацияавторизация не предусмотрена или не должна учитываться, то только сохранять данные об успешной подписке в локал стораж или куки.
А можно пример с локал сторадж или куки? Для меня это пока не знакомое, я поизучаю
https://learn.javascript.ru/localstorage
https://learn.javascript.ru/cookie
Соответственно, отправив запрос дожидаемся ответа, если ответ положительный, то делаем запись в хранилище с произвольным ключом и произвольным значением.
Например: localstorage.setItem("isSubscriber", "true").
Ну а при загрузке странице читаем этот ключ из стоража, если он там есть и подходит значение, значит показывать предложение подписаться не нужно.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Если подписка не связана с авторизацией, сайт не может достоверно знать, подписан ли человек, пока не спросит email и не проверит его на сервере. Для popup обычно достаточно практичного правила: если пользователь успешно подписался или сам закрыл окно, сохранить флаг в
localStorageили cookie и больше не показывать popup на этом устройстве.Пример логики на
localStorage:jQuery(function ($) { var key = 'newsletter_popup_closed'; var $popup = $('.newsletter-popup'); if (localStorage.getItem(key) === '1') { return; } setTimeout(function () { $popup.addClass('is-visible'); }, 5000); $('.newsletter-popup__close').on('click', function () { localStorage.setItem(key, '1'); $popup.removeClass('is-visible'); }); $('.newsletter-popup form').on('submit', function () { localStorage.setItem(key, '1'); }); });jQuery(function ($) { var key = 'newsletter_popup_closed'; var $popup = $('.newsletter-popup'); if (localStorage.getItem(key) === '1') { return; } setTimeout(function () { $popup.addClass('is-visible'); }, 5000); $('.newsletter-popup__close').on('click', function () { localStorage.setItem(key, '1'); $popup.removeClass('is-visible'); }); $('.newsletter-popup form').on('submit', function () { localStorage.setItem(key, '1'); }); });
Более правильный вариант — ставить флаг не на сам submit, а после успешного ответа формы. У плагина Newsletter нужно смотреть его JS-события или отправлять подписку своим AJAX-запросом и после ответа
successвыполнятьlocalStorage.setItem(...). Если события нет, можно закрывать popup после submit, но это менее точно: пользователь мог ввести неверный email.Cookie нужна, если скрытие popup должно работать до загрузки JS или учитываться сервером. Для обычного popup на фронтенде
localStorageпроще. Минус обоих вариантов: при другом браузере, другом устройстве или очистке данных popup появится снова. Это нормально для большинства магазинов.