Cookie Popup cu fancybox nu functioneaza

Discutii si intrebari legate de scripturi si functii JavaScript, jQuery si Ajax, cod JavaScript in general.
adrian_ady
Mesaje: 80

Cookie Popup cu fancybox nu functioneaza

Salut,
am un popup cu fancybox care se afiseaza dupa 2 secunde si un cookie care se seteaza dupa 3 secunde pentru a preveni ulterioare afisari si nu inteleg de ce se sterge cookie-ul automat, dupa doua refresh-uri sau schimb de pagina. Unde sa fie greseala?

Cod: Selectaţi tot

<?
if(!isset($_COOKIE['popup-Onload']))
{?><div class="center" id="popup-onload" style="display: none;"><br />T E S T &nbsp; P O P U P &nbsp; O N &nbsp; L O A D<br /><br /></div>
<script>
 $(document).ready(function openPopup() {
  setTimeout(function () {        
    $("#popup-onload").fancybox().trigger('click');
    }, 2000);
 }); 
 
 $(document).ready(function() {
  setTimeout(function () {        
      var expDate = new Date();
      expDate.setTime(expDate.getTime() + (24 * 60 * 60 * 1000)); // 1zi
      document.cookie = "popup-Onload=already set; path=/;  expires=" + expDate.toGMTString();
    }, 3000);
 });
</script>
<?}
?>

MarPlo
Salut
Am testat acest cod intr-un fisier php, functioneaza cum trebuie; cookie-ul se mentine dupa refresh-uri. Il poti verifica intr-un fisier separat.

Cod: Selectaţi tot

<?php
if(!isset($_COOKIE['popup-Onload'])){
?>
<script>
setTimeout(function(){ alert('ok');}, 2000);
setTimeout(function(){
  var expDate = new Date();
  expDate.setTime(expDate.getTime() + (60 * 60 * 1000)); // 1zi
  document.cookie = "popup-Onload=already set; path=/;  expires=" + expDate.toGMTString();
}, 3000);
</script>
Cod JS
<?php
}
else echo $_COOKIE['popup-Onload'];
?>
Daca prin acel cod pe care l-ai postat se creaza cookie-ul, problema e in alta parte; in alt cod JS din pagina, sau probabil in scriptul php e o instructiune care sterge variabilele $_COOKIE.

adrian_ady
Multumesc, Marplo
prin metoda mea prezentata initial se creeaza cookie-ul, functioneaza totul perfect in afara de problema disparitiei cookie-ului. Am cautat deja ceeace mi-ai sugerat insa nu am gasit o explicatie. In site mai am si alte cookies insa toate sunt OK. Ramane sa caut in continuare, poate gasesc buba. O zi buna!

MarPlo
- Daca acel cookie iti trebuie doar in JavaScript pentru pop-up, ai putea folosi acest cod ca sa nu mai depinda de php.

Cod: Selectaţi tot

<div class="center" id="popup-onload" style="display: none;"><br />T E S T &nbsp; P O P U P &nbsp; O N &nbsp; L O A D<br /><br /></div>
<script>
//return cookie value, or null if not set
function getCookie(name) {
  var result = null;
  var myCookie = ' ' + document.cookie + ';';         // toate sirurile de cookie incep cu spatiu si se incheie cu ;
  var searchName = ' ' + name + '=';         // se cauta tot ce e intre name si = urmator
  var startOfCookie = myCookie.indexOf(searchName);
  var endOfCookie;
  if (startOfCookie != -1) {         // daca gaseste ceva intre ele
    startOfCookie += searchName.length;         // omite nume cookie anterior
    endOfCookie = myCookie.indexOf(';', startOfCookie);
    result = unescape(myCookie.substring(startOfCookie, endOfCookie));
  }
  return result;
}
var cookie_popup = getCookie('popup-Onload');

//if cookie not set
if(!cookie_popup){
  setTimeout(function(){ $('#popup-onload').fancybox().trigger('click');}, 2000);  //show popup

  //set cookie
  setTimeout(function(){
    var expDate = new Date();
    expDate.setTime(expDate.getTime() + (24 *60 * 60 * 1000)); // 1zi
    document.cookie = 'popup-Onload=already set; path=/;  expires=' + expDate.toGMTString();
  }, 3000);
}
else if(document.getElementById('popup-onload')) document.getElementById('popup-onload').outerHTML ='';  //delete the #popup-onload elm
</script>

adrian_ady
OK, merge! Nu-mi dadusem seama ca ai inclus in script si timeout-ul pentru popup si se repeta. Acum l-am eliminat din forma initiala. Toate cele bune!

- Edit
M-am grabit sa spun ca merge insa ma bucur ca am gasit unde este greseala.
Solutia:
In footer aveam impostat pentru toate paginile:

Cod: Selectaţi tot

 $(document).ready(function() {
  setTimeout(function () {        
    $("#popup-onload").fancybox().trigger('click');
    }, 2000);
 });  
am corectat:

Cod: Selectaţi tot

 $(document).ready(function() {
    $("#popup-onload").fancybox();
    $.fancybox.wrap.bind("contextmenu", function (e) {
      return false; 
    });
 }); 
practic am eliminat de aici timeoutul si ".trigger('click')" ramanand aceasta sintagma numai in pagina care contine popupul si am adugat eliminare right click. Acum pare OK.

adrian_ady
Pur si simplu este o insaileala, functioneaza, dar nu este bine. Ce am corectat nu are nicio noima, nici la prima vedere codul nu are sens. Trebuie gasit ceva solid. Randul:

Cod: Selectaţi tot

 $.fancybox.wrap.bind("contextmenu", function (e) { return false; });
nu ar trebui sa influenteze cu nimic functia, chiar nu este operativ (nu elimina click dreapta) dar fara el, ciudat, cookie-ul se sterge. Folosesc fancybox 2.1.5

MarPlo
Vezi daca apare vreo eroare JS in consola, daca nu, incearca sa testezi retinerea cookie-ului cu un simplu alert() in loc de fancybox.
Daca functioneaza, inseamna ca de la fancybox e problema, daca tot la fel e, mai elimini din scripturi ca sa vezi de la care era cauza.
- Poti cauta si pe net: " fancybox right click ", poate nu e aplicata bine acea functi.

adrian_ady
De data asta am facut-o lata! Cookie Control functiona in fundal, eu uitasem ca este activat deci va dati seama unde era necazul... Cer scuze lui Marplo care s-a straduit sa ma ajute, mi-e tare rusine. Dupa ce mi-am dat seama de eroare am trecut 'popup-Onload' la cookies permise si incercat sa simplific cat mai mult ajungand la urmatoarea varianta 100% functionala:

Cod: Selectaţi tot

<?
if(!isset($_COOKIE['popup-Onload']))
{?><div class="center" id="popup-onload" style="display: none;">Test popup onload</div>

<script>
    $(document).ready(function() {
     setTimeout(function () {        
     $("#popup-onload").fancybox().trigger('click');
     }, 2000);
     var expDate = new Date();
     expDate.setTime(expDate.getTime() + (24 * 60 * 60 * 1000)); // 1zi
     document.cookie = "popup-Onload=already set; path=/;  expires=" + expDate.toGMTString();
   });
</script>

<?}
?>

Subiecte similare