Как закрыть куки на сайте Joomla?


В Евросоюзе относительно недавно появилась проблема: законодательство потребовало от сайтов использовать куки только в случае согласия пользователя. Конечно, это не относится к таким важным для работоспособности сайта вещам, как авторизация, но социальные кнопки, видео со сторонних сервисов не могут сохранять информацию в куках без одобрения юзера.

Конечно, уже появилиь некоторые платные решения для сайтов, однако, они не универсальны и несовершенны, например, плагин Monster Cookies. Промучившись с ним, я его полностью снес, позаимствовав лишь некоторые стили оформления диалогового окна.

На сайте стояли кнопки соцсетей, Гугл Аналитикс, модуль видео от Vimeo. Мне удалось закрыть это все с возможностью выбора для пользователя «Accept Cookies». Использовал как JavaScript, так и php.

Принцип прост: если пользователь нажимал «принять куки», в куках сохранялась переменная cookies_accept. Далее в зависимости от ее существования уже подгружался (или нет) закрытый контент.

Что-то типа такого:

1
2
3
4
5
     if(isset($_COOKIE["cookies_accept"]) && $_COOKIE["cookies_accept"]=="accept"):
       //не меняем output
     else:
       $output="<img src='картинка' title='You need to accept the cookies to use it'>";
     endif;

JavaScript:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<script>
  function setCookie (name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
  }
  function getCookie(name) {
    var cookie = " " + document.cookie;
    var search = " " + name + "=";
    var setStr = null;
    var offset = 0;
    var end = 0;
    if (cookie.length > 0) {
      offset = cookie.indexOf(search);
      if (offset != -1) {
        offset += search.length;
        end = cookie.indexOf(";", offset)
        if (end == -1) {
          end = cookie.length;
        }
        setStr = unescape(cookie.substring(offset, end));
      }
    }
    return(setStr);
  }
  cookies_accept="";
  cookies_accept = getCookie("cookies_accept");
  if(cookies_accept=="accept"){
    request=jQuery.ajax({
      type: 'POST',
      url: '/ajax/get_video.php',
      data: 'sss=1',
      success: function(request) {
        jQuery('.vimeo').html(request);
      }
    });
    jQuery("div.cc-cookies").addClass('content-hidden');
 
    var _gaq = _gaq || [];
    _gaq.push(['_setAccount', 'UA-xxxxx']);
    _gaq.push(['_trackPageview']);
 
    (function() {
      var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
      ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
    })();
 
  }else{
    jQuery(".cc-cookies").removeClass('content-hidden');
  }
 
  jQuery(document).ready(function(){
    jQuery("#accept").click(function(){
      jQuery("div.cc-cookies").addClass('content-hidden');
      setCookie("cookies_accept", "accept");      
    });
  });
</script>

Хочется создать какое-то универсальное решение для всех сайтов, но пока ничего не придумал. У каждого свои особенности.





Случайные посты

Категория: Joomla

Оставить комментарий