Исправление ошибки с куками в версии 1.10.7.006 от 10 января 2019 года

+10
1.21K
Данный хак исправляет ошибку с куками, присутствующий в 1.10.7.006 от 10 января 2019 года.

Обнаружение проблемы

Скачав себе обозначенный релиз и поставив его на хостинг, я обнаружил красивое всплывающее окно, предупреждающее о использовании сайтом куков и предлагающее модифицировать куки самому пользователю.
Идея очень хорошая… но к, сожалению, не работает. Нажимай не нажимай на кнопки "Модифицировать куки" и "Согласен" — окно все равно появляется каждый раз, когда заходишь на сайт и ходишь по страницам. Это раздражает.

Постановка задачи

Задачу я себе поставил простейшую — разобраться, как что работает, исправить, заодно вынести регулировки куков в админку сайта, чтобы владелец мог этот процесс регулировать.

Состав хака

Исправленые файлы:
templates/_default_/template.php
templates/_default_/js/jquery.ihavecookies.js
admin/applets/config.php
languages/ru/admin/applets/applet_config.php

Добавленный файл
templates/_default_/cookies/cookie_types.php

Как применить хак

1. Снимите резервную копию. Хак не затрагивает базу, поэтому дамп можно не снимать.
2. Если вы уверены, что не вносили в указанные файлы исправлений, залейте эти файлы в корень сайта с заменой. В противном случае перестрахуйтесь — откройте представленные файлы программой Merge вместе с коробочной версией, чтобы увидеть и внести изменения.
3. Сделайте настройки куков (об этом смотрите ниже).

Как выглядит админка сайта после применения хака

Зайдите в админку сайта, выберите "Настройки" -> "Настройки сайта"
Как видите, появилась новая вкладка "Кукисы"

Иллюстрация


Зайдите в эту вкладку. По умолчанию куки выключены (точнее, в конфиге пока отсутствуют элементы управления куками). Выбирайте "Включить" и нажмите кнопку "Сохранить", чтобы добавить в конфиг новые элементы — этого момента всплывающее окно куков появится на сайте.

Иллюстрация


После включения куков у вас появятся еще две настройки:

Иллюстрация

Это:
"Время жизни куков" — можете выбрать в выпадающем списке значение от одной минуты до одного года.
"Задержка появления всплывающего окна " — от одной секунды до одной минуты.
Сделав настройки, не забудьте нажать на кнопку "Сохранить".

Теперь надо настроить чекбоксы всплывающего окна.

Настройка чекбоксов

.
Еще одна настройка содержится в файле templates/_default_/cookies/cookie_types.php. Это чекбоксы всплывающего окна. Файл уже содержит пример в виде массива.
Массив состоит из строк, каждая строка есть массив из трех элементов — type, value, description.
Это и есть данные для отображения чекбоксов всплывающего окна. Каждая строка — это один чекбокс. Не рекомендую менять структуру массива и/или названия этих элементов (если не хотите чудес).
Вы можете редактировать значения элементов, если не устраивают представленные в примере.
Кроме того, можно добавлять (или убирать) строки массива. Чтобы было столько строк, сколько вам нужно — всплывающее окно автоматически изменит вид.

Как пользоваться всплывающим окном

Я изменил текст всплывающего окна с инструкцией пользователю. По-моему, там теперь все ясно. Если пользователь хочет модифицировать куки, пусть жмет на кнопку "Модифицировать куки"

Иллюстрация

Окно слегка изменит вид, показав чекбоксы ( в соотвествии с файлом чекбоксов cookie_types.php).
Пусть пользователь установит или снимет чекбоксы, перед интересующими его темами, а затем нажмет на кнопку "Согласен"
Иллюстрация

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

Для чего вся эта байда?

А фиг знает))) Однако программистам, желающим использовать фишку модифицируемых куков, куки доступны в любом месте сайта. Достаточно в нужное место вставить строчку
  1. echo 'cookieControlPrefs => '; print_r($_COOKIE['cookieControlPrefs']);
Мы получим строчку вроде
  1. cookieControlPrefs => ["preferences","cutters","boats","sails"]
Это перечисление значений value массива из файла cookie_types.php, которые выбрал пользователь. Обращаю внимание, что значение этой строчки для каждого пользователя будет индивидуальным.

Думаю, любой программер сообразит, что делать с этими данными, после того, как распарсит указанную строчку. Можно устроить поиск по сайту. Можно организовать вывод новостей для данного пользователя так, чтобы сперва выводились новости, которые заинтересуют именно этого посетителя.
Короче, говоря, дерзайте. Код вам в руки)).

Как скачать хак

.
Из моего профиля даром, то есть бесплатно.
Скачать архив

Удачи в сайтостроении!
+3
abasia abasia 3 года назад #
Спасибо за хак, заморочились Вы однако)))
+3
Странник Странник 3 года назад #
Это вам спасибо за доброе слово)
+2
Андрей Андрей 3 года назад #
Кирилл, на высшем уровне! Респект и велкам в сборку :)
однозначно хак там будет!
+1
Странник Странник 3 года назад #
Спасибо!
+3
Юрий Юрий 3 года назад #
ВЫ не человек, вы ЧЕЛОВЕЧИЩЕ!
Спасибо!
+1
Странник Странник 3 года назад #
Сообщаю, что мной написан модуль, использующий модификацию куков. Почитать описание модуля и скачать его можно в этой статье.

Очень важно!
Для модуля пришлось изменить структуру файла чекбоксов и переписать файл управления templates/_default_/js/jquery.ihavecookies.js.
Архив модуля уже содержит эти исправленные файлы. Файл шаблона templates/_default_/template.php требуется смержить (я оттуда выкинул ненужные строчки), остальные файлы залить в корень с заменой.

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

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.