Приветствую.
Ребята спасибо за функцию и ее описание, примеры.
Задергали меня с этими куками и сделал я на основе нотисов вывод блока плавающего. Все работает, но кешируется конечно плагинами и возникла идея вывести его на js, но тут настал ступор у меня))
Вот рабочий пример:
//Предупреждение о куках function yw_cookie($yw_args) { $yw_args = [ 'type' => 'info', 'class' => 'yw-cookie', 'text' => 'Этот сайт использует cookie для хранения данных. Продолжая использовать сайт, Вы даете свое согласие на работу с этими файлами.', 'cookie' => 'yw-cookie-notify', 'cookie_time' => 30, ]; echo rcl_get_notice($yw_args); } add_action( 'wp_footer', 'yw_cookie' ); function yw_cookie_inline_css($styles){ $styles .= ' .yw-cookie{ right: auto; bottom: 20px; left: 20px; max-width: 400px; position: fixed; z-index: 9999; font-size: 13px; -webkit-box-shadow: 0 0 15px rgba(0,0,0,.2); -moz-box-shadow: 0 0 15px rgba(0,0,0,.2); box-shadow: 0 0 15px rgba(0,0,0,.2); color: #555555; background: #ffffff; } .yw-cookie > .rcl-notice__close { cursor: pointer; background-color: #4b81e8; border: none; color: #fff; padding: 2px 10px; margin: 0 0 0 5px; text-decoration: none; display: inline-block; font-size: 15px; line-height: 15px; position: absolute; right: 10px; top: 45px; } .yw-cookie > .rcl-notice__close::before { color: currentColor; content: "\Ok"; font-family: rcl-awesome; } .yw-cookie > .rcl-notice__text { text-align: left; } '; return $styles; } add_filter('rcl_inline_styles','yw_cookie_inline_css',10);
Скрин
Есть вариант вывести блок? echo '<script></script>';
Заранее спасибо))
Привет.
Хороший вопрос.
Я сделал так:
В стиль .yw-cookie
допиши:
display: none;
- теперь в стиле хедера у нас по умолчанию блок будет скрыт.
(кстати - в этом плюс есть - ты можешь только это в хедер засунуть, одну строчку, а все остальные стили - в подвал. В итоге критичный css, одна строка, будет быстро отрабатывать в хедере скрывая нотис, а потом в футере проверка на куку и все остальные твои стили для внешнего вида нотиса. Я проверял - на слабом инете это отрабатывает отлично - нет дерганья нотиса - он скрыт сразу и потом дойдя до полной загрузки страницы - нотис отображается)
Теперь надо на js проверить куку и если ее нет - отобразить блок (jQuery('.yw-cookie').show();
):
php:
add_action( 'wp_footer', 'yw_script', 100 ); function yw_script(){ $out = " jQuery(document).ready(function() { if( !jQuery.cookie('yw-cookie-notify') ){ jQuery('.yw-cookie').show(); } }); "; echo '<script>'.$out.'</script>'; }
таким образом мы покажем блок если куки нет.
Я не проверял на кешировании страницы - в реколл убил проверку куки на php и тестировал - вроде отрабатывает на js. Проверь там на жестко закешированной работу
p.s. однострочный вариант:
jQuery(document).ready(function(){jQuery.cookie('yw-cookie-notify')||jQuery('.yw-cookie').show()});
На тестовом все работает как надо, еще раз спасибо.
Не хотел развивать идею, но можно обезопасится по GDPR, приблизить к общим требованиям и 152-ФЗ. Что-то типо того -по кнопке "не согласен" вырубать регистрацию, куда-то доступ запрещать, чистить куки.
Но это пока просто буквы, даже не идея))
Достаточно того, что есть пока.
Хм, наверно не так делаю, на рабочем сайте пока не хочет как задумано работать, но наверно уже просто голова не соображает)
Посмотрел некоторые плагины, та же проблема, а навороченные с миллионом опций может и работают, но напрягают сайт за счет адаптации к GDPR по полной. Встроенные в темы платные, почитал и так же проблема.
В итоге, что бы можно было использовать, наверно придется пробовать отдельным js файлом как-то делать. И если проблема с какими-то кешами и оптимизаторами, можно исключение поставить.
Модальки отпадают, не стоит нарываться за просто так и потерять мобильный поиск)) Остается именно div заставить появится.
Игорь - я ничего не понял. То "работает", то "не работает". Потом про регу и модалки - ничего не понятно.
Суть этих gdpr - что уведомил гостя и не более того. Никаких ограничений они согласно закону и не должны нести - уведомил, а дальше дело самого автора - не согласен - покидай сайт. Ходишь по сайту - значит принял условия и инфу сайта по gdpr. А для залогиненного при регистрации есть поле "соглашение"
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Игорь - я ничего не понял. То "работает", то "не работает".
Не могу справится с кешем в итоге, может не так делаю, буду признателен если покажешь, как у тебя сработало...вероятно я нет интерпретирую твое решение и у меня не выходит побороть.
Дружаев Владимир (Otshelnik-Fm) сказал(а)
Суть этих gdpr - что уведомил гостя и не более того.
О нет, там очень много всего, прям перебор, и если по грамотному делать, то только серьезные конторы... Но да, в частности куки, только предупредить пока норм.
Дружаев Владимир (Otshelnik-Fm) сказал(а)
где увидеть можно?
У меня тестовый тупит, видимо пришел ему конец, переставлю чуть по позже и покажу.
add_action( 'wp_footer', 'yw_script', 100 ); function yw_script(){ $out = " jQuery(document).ready(function() { if( !jQuery.cookie('yw-cookie-notify') ){ jQuery('.yw-cookie').show(); } }); "; echo '<script>'.$out.'</script>'; }
Не срабатывало, может из за глюков уже начавшихся на самом сайте, но не понял в тот момент.
Точнее, все равно кеширует, буду дальше смотреть как время появится.
В общем, выбрал время и перекинул все в js, иначе просто нет простых вариантов обойти кешировние.
В одном навороченном плагине создают динамическое кеширование, подключают эти функции в плагинах кеша и по кругу. В общем, нагрузка не хилая от плагина))
Не так много знаний в jQuery, но все работает, оттестирую и опции сделаю, добавлю доп.
Спасибо еще раз за сниппет, именно его использую, попробовал разные методы, твой самый простой и понятный.
Все готово и работает, пока только у меня, но и доп готов.
Есть один вопрос.
Нет ли другого способа передать переменные во внешний файл jQuery, кроме как этот:
<script> var $YwCookie = {}; $YwCookie.type = "info"; $YwCookie.class1 = "yw-cookie"; </script>
Не смог понять, перерыл кучу инфы.
Собственно так все работает.
Лучше сделать так:
add_action( 'wp_enqueue_scripts', 'action_function_name_7714', 99 ); function action_function_name_7714(){ wp_localize_script( 'jquery', 'myObject', array( 'string' => __( 'Some string to translate' ), 'value' => '10' ) ); }
и уже в любом js файле сможешь обращаться к объекту
myObject
и его свойствам: myObject.string
и myObject.value
Дружаев Владимир (Otshelnik-Fm) сказал(а)
я не понял вопроса
Я просто не совсем понятно написал, пока хотел написать более внятно, Андрей ответил)
Владимир, спасибо еще раз за сниппет, он натолкнул меня еще на идеи, как учитывать статистику в метрике, добавляя параметры в разные компоненты сайта и теперь внедрить api метрики, дело 10 минут. В части всяких меток конечно, что бы в метрику пошли данные. Но этим займусь в выходные видимо.
По примеру не понял, по объяснению Андрея - допер что надо.
В реколл есть фильтр rcl_init_js_variables
- можно прям туда как в допе magnifiq popup
add_filter( 'rcl_init_js_variables', 'mpr_localize', 10 ); function mpr_localize( $data ) { $js_loc = array( 'prev' => __( 'Previous', 'mpr-magnific' ), 'next' => __( 'Next', 'mpr-magnific' ) ); $data['magni_r'] = $js_loc; return $data; }
Там в js я потом обращался к глобальной переменной Rcl Rcl.magni_r.prev
и получал из php в js
Важно только в php фильтре не перетереть переменную $data - а то и от wp-recall потеряете строки для js. Но тут работаем как обычно с ВП фильтрами - всегда возвращаем первоначальные данные (return $data;
), а не тупо return;