На сайте на любой странице через определенный промежуток времени выезжает форма подписки в виде div контейнера. Как сделать так, чтобы при закрытии этой формы она больше не появлялась в течение текущей сессии? И каким образом лучше реализовать закрытие этой формы при нажатии, например, на кнопку?
Ну так запиши в сессию при закрытии формы какую-нибудь переменную-флаг, говорящую о том, что форма была закрыта. И в скриптах проверяй - если есть эта переменная - то форму не отображать.
Спасибо, будем осваивать) Добавлено спустя 38 минут 55 секунд: Блин, как кнопку "закрыть" сделать? не работает и все... Добавлено спустя 7 минут 44 секунды: Кнопка "Закрыть", как я понял реализуется с помощью js, а сессии при помощи php. Как вот здесь поступить тоже понять не могу
На JavaScript пишешь функцию, которую потом вызываешь при нажатии на кнопку "Закрыть". Эта функция должна убрать с экрана твою форму и отправить Ajax-запрос на сервер. Получив этот запрос, сервер должен записать в $_SESSION информацию о том, что форма была закрыта и при последующих перезагрузках страницы (в течении данной сессии) - не генерировать HTML-код этой формы.
Форма подписки с кнопкой закрытия: Код (Text): if ($_SESSION[status] == '1') { echo '<a id="subscribeWindowClose"><img src="http://'.$_SERVER['SERVER_NAME'].'/img/cross.png"></a> <div id="subscribe"> ... </div>';} Скрипт, который скрывает контейнер при нажатии на кнопку и отправляет данные обработчику: Код (Text): $('#subscribeWindowClose').click(function(){ $('#subscribe').addClass('display_none'); $.post('http://mysite.net/s.php',{status:"1"}, ... Обработчик начинает сессию, устанавливает параметры сессии и заносит в переменную $_SESSION["status"] единицу: Код (Text): session_start(); session_set_cookie_params(0, '/', $_SERVER['SERVER_NAME']); if ($_POST) {$_SESSION['status'] = $_POST["status"];} Проблемы: 1. Если кнопку закрытия засунуть в контейнер #subscribe, то она не работает. А так она получается всегда будет висеть на странице. 2. При закрытии страницы/браузера сессия не очищается. В $_SERVER['status'] так и стоит единица. Где я накосячил?
Это странно. По идее - должно быть пофигу. Должна работать. Покажи код, который получается, когда засовываешь кнопку в контейнер #subscribe session_set_cookie_params() должна вызывать ДО session_start(). Под закрытием браузера ты что понимаешь - именно полностью закрыл весь браузер, или только вкладку? Если только вкладку закрыть, то кука не удалится. Только если совсем браузер закрыть.
Код (Text): <div id="subscribe"><a id="subscribeWindowClose"><i mg src="http:// '.$_SERVER['SERVER_NAME'].'/img/cross.png"></a> . . . </div> Под закрытием браузера я понимаю понимаю закрытие браузера. А если через .htaccess настроить время жизни cookie, то это применится вообще ко всем cookie сайта или можно указать к каким именно?
zevilz, начни с самых простых тестов какие сумеешь придумать для отладки. для сессии с "флажком" в принципе не требуются ни js ни htaccess. когда научишься работать с сессией, тогда будешь добавлять фишки.
А что за тег такой i mg? Добавлено спустя 1 минуту 27 секунд: А также после http:// там пробел не нужен.
это я на телефоне копировал со своего поста. Там между всеми символами пробелы автоматом были поставлены. Видимо не все удалил. Добавлено спустя 1 минуту 12 секунд: в самом коде нет этих ошибок Добавлено спустя 12 минут 33 секунды: А как тогда это осуществить? Для закрытия контейнера все равно необходим js(если без перезагрузки страницы). Так же для отправки флажка необходим запрос к базе либо занесение данных в cookie. А это только через php или js. При использовании только php возможно только с перезагрузкой страницы. Так как же Вы предлагаете сделать без js?
Только что проверил. Вот такой код работает: Код (Text): <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Test</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> $(document).ready(function() { $('#subscribeWindowClose').click(function() { $('#subscribe').addClass('display_none'); $.post('s.php', {status: '1'}); }); }); </script> <style type="text/css"> .display_none { display: none; } </style> </head> <body> <div id="subscribe"> <a id="subscribeWindowClose"><img src="close.png" /></a> ... </div> </body> </html> Ищи проблему в другом месте.
Нашел проблему: #subscribe генерируется после определенного промежутка времени Код (Text): $(document).delay(25000).queue(function() {...} , а функция закрытия контейнера прописана Код (Text): $(document).ready(function() {...}); , т.е. выполняется зразу после загрузки страницы. Переместил Код (Text): $('#subscribeWindowClose').click(function() { $('#subscribe').addClass('display_none'); $.post('s.php', {status: '1'}); }); в Код (Text): $(document).delay(25000).queue(function() {...} Затем вставил код кнопки закрытия в скрипт генерации контейнера, и все заработало Спасибо за помощь. На счет флажка сессии, я совсем не понял принцип работы. Поменял местами session_set_cookie_params() с session_start(). При закрытии браузера флажок не удаляется. Закрыл браузер, открываю страницу на следующий день - флажок все равно остался. Но заметил, если браузер остается открытым, то при простое около часа флажок удаляется. Может ли на это влиять движок интегрированного форума? Сам форум в отдельной папке, но его функции подключены ко всему сайту. В основном вход/выход, извлечение некоторых данных пользователей.