17ответ(ов) в теме
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
1
19:40
Версия WP-Recall: 16.18.5

Приветствую.
Ребята спасибо за функцию и ее описание, примеры.
Задергали меня с этими куками и сделал я на основе нотисов вывод блока плавающего. Все работает, но кешируется конечно плагинами и возникла идея вывести его на 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>';

Заранее спасибо))

Редакции сообщения
16.02.2020 19:45garryПричина: не указано
1
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
2
20:47

Привет.

Хороший вопрос.

Я сделал так:

В стиль .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()});

Редакции сообщения
16.02.2020 20:48Дружаев Владимир (Otshelnik-Fm)Причина: не указано
16.02.2020 20:52Дружаев Владимир (Otshelnik-Fm)Причина: не указано
1
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
3
21:40

Владимир, спасибо большое. Сейчас начну разбираться. Заставил я тебя время потратить...

0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
4
22:17

На тестовом все работает как надо, еще раз спасибо.
Не хотел развивать идею, но можно обезопасится по GDPR, приблизить к общим требованиям и 152-ФЗ. Что-то типо того -по кнопке "не согласен" вырубать регистрацию, куда-то доступ запрещать, чистить куки.
Но это пока просто буквы, даже не идея))
Достаточно того, что есть пока.
Хм, наверно не так делаю, на рабочем сайте пока не хочет как задумано работать, но наверно уже просто голова не соображает)

Редакции сообщения
16.02.2020 22:44garryПричина: не указано
0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
5
09:01

Посмотрел некоторые плагины, та же проблема, а навороченные с миллионом опций может и работают, но напрягают сайт за счет адаптации к GDPR по полной. Встроенные в темы платные, почитал и так же проблема.
В итоге, что бы можно было использовать, наверно придется пробовать отдельным js файлом как-то делать. И если проблема с какими-то кешами и оптимизаторами, можно исключение поставить.
Модальки отпадают, не стоит нарываться за просто так и потерять мобильный поиск)) Остается именно div заставить появится.

Редакции сообщения
17.02.2020 09:02garryПричина: не указано
17.02.2020 09:02garryПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
6
09:42

Игорь - я ничего не понял. То "работает", то "не работает". Потом про регу и модалки - ничего не понятно.

Суть этих gdpr - что уведомил гостя и не более того. Никаких ограничений они согласно закону и не должны нести - уведомил, а дальше дело самого автора - не согласен - покидай сайт. Ходишь по сайту - значит принял условия и инфу сайта по gdpr. А для залогиненного при регистрации есть поле "соглашение"

0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
7
10:06

Дружаев Владимир (Otshelnik-Fm) сказал(а)
Игорь - я ничего не понял. То "работает", то "не работает".

Не могу справится с кешем в итоге, может не так делаю, буду признателен если покажешь, как у тебя сработало...вероятно я нет интерпретирую твое решение и у меня не выходит побороть.

Дружаев Владимир (Otshelnik-Fm) сказал(а)
Суть этих gdpr - что уведомил гостя и не более того.

О нет, там очень много всего, прям перебор, и если по грамотному делать, то только серьезные конторы... Но да, в частности куки, только предупредить пока норм.

0
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
8
10:13

где увидеть можно?

0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
9
10:18

Дружаев Владимир (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>';
}

Не срабатывало, может из за глюков уже начавшихся на самом сайте, но не понял в тот момент.
Точнее, все равно кеширует, буду дальше смотреть как время появится.

Редакции сообщения
17.02.2020 10:18garryПричина: не указано
17.02.2020 10:19garryПричина: не указано
17.02.2020 11:32garryПричина: не указано
0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
10
11:04

В общем, выбрал время и перекинул все в js, иначе просто нет простых вариантов обойти кешировние.
В одном навороченном плагине создают динамическое кеширование, подключают эти функции в плагинах кеша и по кругу. В общем, нагрузка не хилая от плагина))
Не так много знаний в jQuery, но все работает, оттестирую и опции сделаю, добавлю доп.
Спасибо еще раз за сниппет, именно его использую, попробовал разные методы, твой самый простой и понятный.

0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
11
09:54

Все готово и работает, пока только у меня, но и доп готов.
Есть один вопрос.
Нет ли другого способа передать переменные во внешний файл jQuery, кроме как этот:

<script>
  var $YwCookie = {};
  $YwCookie.type = "info";
  $YwCookie.class1 = "yw-cookie";
  </script>

Не смог понять, перерыл кучу инфы.
Собственно так все работает.

0
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
12
10:00

garry сказал(а)
Нет ли другого способа передать переменные во внешний файл jQuery, кроме как этот:

я не понял вопроса

0
Андрей CS
не в сети 1 день
На сайте с 30.11.-0001
Администратор
Тем 71
Сообщения 16855
13
10:02

Лучше сделать так:

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

1
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
14
10:06

Спасибо Андрей, я знал, что есть наверняка лучшее решение, теперь будет все по уму)

0
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
15
10:11

Дружаев Владимир (Otshelnik-Fm) сказал(а)
я не понял вопроса

Я просто не совсем понятно написал, пока хотел написать более внятно, Андрей ответил)
Владимир, спасибо еще раз за сниппет, он натолкнул меня еще на идеи, как учитывать статистику в метрике, добавляя параметры в разные компоненты сайта и теперь внедрить api метрики, дело 10 минут. В части всяких меток конечно, что бы в метрику пошли данные. Но этим займусь в выходные видимо.

Редакции сообщения
21.02.2020 10:11garryПричина: не указано
0
Вова (Otshelnik-Fm)
не в сети 13 часов
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18647
16
10:16

По примеру не понял, по объяснению Андрея - допер что надо.

В реколл есть фильтр 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;

Редакции сообщения
21.02.2020 10:16Дружаев Владимир (Otshelnik-Fm)Причина: не указано
1
garry
не в сети 2 часа
На сайте с 04.01.2014
Участник
Тем 146
Сообщения 2925
17
10:19

Еще яснее работа стала, спасибо Владимир, будет теперь как внедрить еще идеи.

0
Вы не имеете права на публикацию сообщений в этой теме