Автор дополнения
Баха
Пакетов
3
Закачек
1 511
Обычно отвечает в течение 2 часов
Автор дополнения
Пакетов
3
Закачек
1 511
Обычно отвечает в течение 2 часов
Версия 1.0.0-pl
Дата выпуска 23.09.2026
Загрузки 0
Просмотры 16
Обычно баннер cookie ставят так: находят скрипт, вставляют в шаблон, пишут «Мы используем

cookie» — а коды счётчиков остаются там же, где и были. Посетитель жмёт «Отклонить», и в этот

момент Вебвизор уже смотрит, как он это делает. Формально баннер есть, по факту — декорация.

EasyCookies убирает счётчики из шаблона в профиль баннера. Дальше баннер сам решает, когда их

запускать: разрешил посетитель аналитику — Метрика стартует, отказался — её cookie удаляются. В

основе — библиотека CookieConsent Ореста Биды, так что с

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

Редактор профиля с превью баннера

Простой баннер или по требованиям


При создании профиля компонент спрашивает, какой баннер нужен.

Простой. Уведомление с кнопкой «Понятно» и, по желанию, «Отказаться». Счётчики

работают сразу. В форме только текст, счётчики и вид — больше настраивать нечего.

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

таблицей cookie, любой набор языков со своими текстами, ревизии и Google Consent Mode v2.

Выбор не окончательный: вид меняется одной кнопкой, и настройки при этом не теряются.

Какой баннер нужен конкретному сайту, решают законы, которые к нему применяются. EasyCookies —

инструмент, а не юридическая консультация.

Выбор вида баннера

Счётчики живут в баннере, а не в шаблоне


Яндекс Метрика (с Вебвизором), Google Analytics, Google Tag Manager, VK Реклама, Meta Pixel и

свой код для всего остального. У баннера по требованиям каждый сервис относится к категории —

аналитика, маркетинг, функциональные, — его cookie перечислены в окне настроек, а при отказе

удаляются.

_ym_d, _ym_isad, _ym_visorc.

  • Яндекс Метрика — номер счётчика и Вебвизор; при отказе удаляются _ym_uid,
  • Google Analytics — идентификатор G-XXXXXXXXXX; удаляются _ga и _ga_*.
  • Google Tag Manager — идентификатор GTM-XXXXXXX.
  • VK Реклама — ID пикселя; удаляются tmr_lvid, tmr_lvidTS, tmr_detect.
  • Meta Pixel — ID пикселя; удаляется _fbp.
  • Свой код — любые теги, а какие cookie за ними убирать, вы указываете сами.

Перенос счётчиков из шаблонов одной кнопкой


На живом сайте Метрика и Analytics уже вставлены в шаблон, а то и в три разных чанка. Кнопка

«Найти на сайте» ищет их код в шаблонах и чанках — и в базе, и в файлах .tpl и .html

(привет, pdoTools и Fenom), — вычитывает номера счётчиков и Вебвизор и переносит их в профиль.

Отмеченное «Убрать их код» вырезает найденные блоки `и ` со служебными комментариями, иначе

счётчик сработал бы дважды. Блок, где кроме счётчика есть другой код, компонент не трогает.

Прежнее содержимое элементов сохраняется, и «Вернуть код» откатит всё назад.

Найденные на сайте счётчики

Превью, которое не врёт


Баннер показывается прямо на странице менеджера — у того края окна, где он встанет на сайте, — и

меняется по мере правки. Работает тот же скрипт, что и на сайте, поэтому превью совпадает с

результатом. Чтобы он не закрывал форму, страница редактора отодвигается от него сверху или

снизу: любое поле можно докрутить.

Вид — как в плейграунде CookieConsent: окно, облако или плашка, девять положений, окно настроек

по центру или сбоку, темы и свои цвета.

Настройки внешнего вида

Журнал согласий


GDPR требует не только спросить согласие, но и уметь его доказать. Баннер по требованиям

записывает каждый ответ посетителя — и первый, и каждое изменение выбора: решение, разрешённые

категории и сервисы, профиль, ревизию, язык, страницу, укороченный IP и браузер. ID согласия тот

же, что лежит в cookie посетителя, так что по нему находится вся история его выбора.

Сверху — сводка за период с графиком по дням: сколько ответов, какая доля приняла всё, отклонила

или выбрала сама. Ниже фильтры и таблица; всё, что под фильтрами, выгружается в CSV. Старые

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

cookie.

Журнал согласий

Профили и контексты


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

быть свой баннер. Копия профиля — чтобы пробовать правки, не трогая сайт. Экспорт и импорт в

JSON — чтобы перенести профиль на другой сайт.

Проверка согласия на сервере


Без согласия нельзя показывать не только счётчики, но и встроенное видео, карту или форму с

reCAPTCHA. Сниппет EasyCookiesAllowed выводит блок только тем, кто разрешил нужную категорию:

[[!EasyCookiesAllowed? &category=`marketing` &tpl=`youtube` &tplElse=`youtube.stub`]]
Когда посетитель меняет выбор, баннер перезагружает такую страницу — блок появляется или

исчезает сразу.

Google Consent Mode v2 и Global Privacy Control


Сигналы согласия ставятся сразу после `` — раньше любых тегов Google, в том числе вставленных в

шаблон вручную, — а баннер обновляет их, когда посетитель ответил. Если посетитель уже отвечал,

сигналы верны с первой строки.

Браузеры с сигналом GPC («не продавать и не передавать мои данные» — Firefox, Brave, DuckDuckGo)

не получают маркетинговые сервисы, а в окне настроек видят пояснение. Этого требует CCPA.

Вывод на сайте


Плагин сам выводит баннер активного профиля на всех HTML-страницах — в шаблон ничего вставлять

не нужно. Нужные страницы исключаются настройкой. Если место вывода хочется выбрать самому, есть

сниппет [[EasyCookies]].

Ссылку «передумать» ставите в подвал сайта:

<a href="#" data-cc="show-preferencesModal">Настройки cookie</a>
Для своих сценариев на странице есть window.EasyCookies: show(), showPreferences(),

accepted('analytics').

Языки


Готовые тексты на 14 языках: русский, английский, украинский, белорусский, казахский, узбекский,

таджикский, армянский, азербайджанский, немецкий, французский, испанский, итальянский, польский.

Баннер говорит на языке страницы; если такого языка в профиле нет — на языке по умолчанию.

Интерфейс


Страница компонента выглядит родной частью менеджера и в MODX 3, и в MODX 2: те же вкладки,

кнопки, окна, уведомления и цвета. ExtJS в интерфейсе нет. Лексиконы — английский, русский,

таджикский. Плюс виджет «Согласия на cookie» на рабочий стол.

Виджет на рабочем столе

1.0.0-pl

Первая версия.

  • Профили баннера: несколько на сайте, один активный. Копия профиля неактивна — на ней пробуют правки, не трогая сайт.
  • Два вида баннера. Простой — уведомление с кнопкой «Понятно» и, по желанию, «Отказаться»; счётчики работают сразу (opt-out), в форме только текст, счётчики и вид. По требованиям — согласие до запуска счётчиков (opt-in) по GDPR, CCPA и похожим законам: категории, окно настроек с таблицей cookie, переводы, ревизии, Google Consent Mode v2. Вид меняется одной кнопкой без потери настроек.
  • Сервисы, которые включает сам баннер: Яндекс Метрика (с Вебвизором), Google Analytics, Google Tag Manager, VK Реклама, Meta Pixel и свой код. Их запускают onAccept сервисов CookieConsent, при отказе их cookie удаляются и страница перезагружается.
  • Настройки профиля — один JSON; конфиг CookieConsent из него собирает общий для админки и сайта src/core/build.ts, поэтому превью не расходится с сайтом.
  • Превью прямо на странице менеджера: форма узкой колонкой по центру, баннер у краёв окна там, где он встанет на сайте. Тот же загрузчик, что на сайте, своя cookie ec_preview, без сервисов и затемнения, слой ниже окон менеджера и форм. Фокус превью у формы не отбирает: CookieConsent ставит его на своё окно при каждом показе, а превью перезапускается на каждую правку — закрывался только что открытый список и прерывался набор. Пока идёт превью, фокус внутрь баннера пускается, только если он уже там; на сайте всё как было. Баннер у верхнего или нижнего края окна отодвигает страницу редактора на свою высоту: высота меряется у самого баннера, а не угадывается по настройкам, поэтому любое поле и любая кнопка остаются доступными на прокрутке. У баннера по центру и у окна настроек отступа нет — докрутить до закрытого ими нельзя.
  • Вид как в плейграунде CookieConsent: окно, облако или плашка, девять положений, окно настроек в центре или сбоку, темы Light, Dark, «как в системе», Turquoise, Funky, Elegant и свои цвета.
  • Готовые тексты баннера на 14 языках; язык посетителя — из ` или браузера. {policy}` в текстах — адрес политики конфиденциальности или id ресурса; без адреса строки с такой ссылкой не выводятся.
  • Плагин EasyCookies на OnWebPagePrerender: сигналы Consent Mode сразу после (с учётом уже данного согласия из cookie), стили, настройки и загрузчик перед. Только HTML-страницы; easycookies.exclude_resources исключает ресурсы. Сниппет EasyCookies — для ручного вывода.
  • Загрузчик баннера — отдельная сборка Vite (vite.web.config.ts): IIFE-файл и CSS для обычного ``.
  • Журнал согласий: баннер по требованиям записывает каждый ответ посетителя — первый и каждое изменение — с ID согласия, решением, категориями и сервисами, ревизией, языком, страницей без строки запроса, укороченным IP и User-Agent. Вкладка в админке: сводка за период (доли решений и категорий), фильтры, листание, выгрузка в CSV. Приёмник consent.php работает без сессии и cookie, принимает только подписанные страницей запросы (HMAC от site_id, неделя), не больше 60 в час с адреса и без повторов. Старые записи удаляются по easycookies.log_days; easycookies.log_ip выключает хранение IP.
  • Мастер переноса счётчиков: «Найти на сайте» ищет в шаблонах и чанках Метрику, GA4, GTM, Meta Pixel и VK Рекламу — в базе и в файлах .tpl/.html (каталог элементов pdoTools и easycookies.migrate_paths, только внутри сайта и core/, без cache, vendor и т. п.; файл статичного элемента — через сам элемент; недоступный на запись файл помечается), вычитывает номера и Вебвизор, добавляет их в профиль и по желанию вырезает их код (блоки / и служебные комментарии; смешанные блоки остаются). Профиль перед этим сохраняется и включается. Прежнее содержимое элементов — в core/packages/easycookies/backups/, «Вернуть код» восстанавливает его, если элемент не правили после переноса.
  • Global Privacy Control (флажок профиля, у новых баннеров по требованиям включён): при navigator.globalPrivacyControl маркетинговая категория и её сервисы для посетителя исчезают, в окне настроек — пояснение (gpcNotice, готовые тексты на 14 языках). Плагин по заголовку Sec-GPC: 1 сразу запрещает рекламные сигналы Consent Mode. В превью — галка «Сигнал GPC».
  • Сниппет EasyCookiesAllowed: блок (tpl/tplElse, чанк или @INLINE) — только если посетитель разрешил категорию или сервис; без шаблонов — 1 или пусто для модификаторов. Учитывает ревизию, режим профиля (у простого до ответа всё разрешено) и GPC. Страницу с таким вызовом загрузчик перезагружает, когда разрешённое меняется.
  • Контексты: у профиля — список контекстов (поле в форме, когда их больше одного); активный профиль — один на контекст, профиль с контекстами главнее общего. Плагин и сниппеты берут профиль контекста страницы; включение выключает только профили тех же контекстов.
  • Экспорт профиля в JSON и импорт новым черновиком — без новых процессоров, на стороне админки; неизвестные сайту контексты при импорте отбрасываются.
  • Таблица профилей: колонка «Контексты» (когда их на сайте больше одного; у активного общего профиля — «кроме …» тех контекстов, где активен свой) и «Согласия» — число записей журнала со ссылкой на журнал, отфильтрованный по профилю. Строки, как в гридах MODX, при наведении не подсвечиваются. Переключатель «Активный» — своей колонкой, в строке — «Настроить», а «Копия» и «Удалить» — в меню под кнопкой с тремя точками, оформленном как .x-menu менеджера (наведение в MODX 3 серое, в MODX 2 синее; стрелки, Escape). Дата изменения — в две строки: таблица помещается в окно 1440px.
  • Сводка журнала — карточки итогов, график ответов по дням (решения стопкой, подсказка при наведении и фокусе; на длинном периоде — по несколько дней, не больше 60 столбиков) и доли категорий. Её рисует один модуль src/stats/ и на вкладке журнала под её фильтры, и в виджете рабочего стола «Согласия на cookie» за 30 дней (отдельная сборка vite.widget.config.ts в assets/components/easycookies/widget/). Числа считают EasyCookies::consentStats() и consentSeries(). При первой установке виджет встаёт последним на рабочий стол по умолчанию.
  • Блок ревизии в редакторе — только у сохранённого профиля: новый ещё ни у кого согласия не спрашивал.
  • Редактор: «К списку» — первой кнопкой в шапке. У превью постоянная раскладка: «Показать снова» и переключатель «Показывать» всегда на своих местах, параметры показа (язык, окно, сигнал GPC) — отдельной строкой; пока превью скрыто, они недоступны, а не пропадают. Список «Добавить язык» — двумя группами: языки с готовыми текстами и остальные языки, на которые переведён MODX (modLexicon::getLanguageList(), контроллер отдаёт их в конфиге админки), — их тексты начинаются с копии языка по умолчанию; внутри групп — по алфавиту на языке менеджера. Пункт меню строки — «Копировать».
  • Интерфейс на английском, русском и таджикском. Общие слова — «Копировать», «Действия», «Сохранить», «Добавить», «Создать», «Экспорт», «Импорт», «Название», «Описание», «Загружается…» — берутся из словаря ядра MODX (core:default, он есть в MODX 2 и 3), а не дублируются в лексиконе компонента.
  • Сборка: запущенный от root build.php отдаёт владельцу core/packages/ и кеш MODX (core/cache/) — иначе менеджер не мог записать кеш лексиконов и оставался с ключами вместо подписей.
  • Таблицы сортируются по колонкам: щелчок по заголовку — по этой колонке, повторный — в обратную сторону, у активной колонки стрелка. Профили — по имени, числу согласий и дате изменения (у не менявшихся — создания); журнал — по дате, решению, профилю (по названию), странице, IP и ID. Сортирует сервер, поэтому порядок общий для всех страниц списка; колонки из JSON настроек профиля — вид, сервисы, языки — не сортируются.
  • Правый клик по строке профиля открывает то же меню, что кнопка «⋯», — как контекстное меню грида MODX.

Последние обсуждения в сообществе MODX.pro