Виджет на сайте MODX

Готового плагина под MODX нет, но поставить виджет — одна строка в шаблоне или маленький плагин на системном событии, если нужна галочка «только для вошедших в Manager».

Готового модуля под MODX Revolution нет: пакет расширения (Extra) собирается штатной сборкой самого MODX, а не файлами из репозитория, поэтому его нельзя отдать одним ZIP-архивом, как плагин WordPress. Зато поставить виджет — минута работы, платный тариф Правки.Про нужен так же (какие бывают).

Способ 1. Строка в шаблоне

Самый быстрый вариант, если у вас есть доступ к шаблону или чанку футера сайта (обычно подключается тегом [[$Footer]]). Вставьте перед закрывающим </body>:

<script src="https://pravki.pro/widget.js" data-key="ВАШ_КЛЮЧ" defer></script>

Ключ виджета — в кабинете Правки.Про: проект → «Виджет на сайте» → «Код для установки». Готово: кнопка «Правка» появится на всех страницах, которые используют этот шаблон.

Способ 2. Плагин на системном событии

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

  1. Создайте системные настройкиСистема → Системные настройки → «+ Создать настройку»: pravkipro_widget_key (строка), pravkipro_widget_admins_only (да/нет), pravkipro_widget_host (строка, необязательно).
  2. Создайте плагинЭлементы → Плагины → «+ Новый плагин», вставьте код ниже, на вкладке «Системные события» подключите OnWebPagePrerender.
  3. Заполните настройкиВ pravkipro_widget_key — ключ из кабинета Правки.Про (проект → «Виджет на сайте»). Остальное можно оставить пустым.
<?php
$key = trim((string) $modx->getOption('pravkipro_widget_key', null, ''));
if ($key === '') return;

$adminsOnly = (bool) $modx->getOption('pravkipro_widget_admins_only', null, false);
if ($adminsOnly && !$modx->user->isAuthenticated('mgr')) return;

$host = rtrim((string) $modx->getOption('pravkipro_widget_host', null, ''), '/');
if ($host === '') $host = 'https://pravki.pro';

$snippet = '<script src="' . htmlspecialchars($host, ENT_QUOTES) . '/widget.js" data-key="'
    . htmlspecialchars($key, ENT_QUOTES) . '" defer></script>';

$output = $modx->resource->_output;
if (stripos($output, '</body>') !== false) {
    $modx->resource->_output = str_ireplace('</body>', $snippet . "\n</body>", $output);
} else {
    $modx->resource->_output = $output . $snippet;
}

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

Что попадает в правку

  • Скриншот с выделенным местом — снимок видимой области с рамкой вокруг элемента, по которому кликнул клиент. Разбирать CSS-селектор человеку не нужно.
  • Запись действий — по желанию. Клиент нажимает «Записать действия» и показывает баг курсором. Поля ввода в записи маскируются, запись не идёт фоном.
  • Контекст страницы — адрес, размер окна, браузер и плотность пикселей.
  • Из личного — только имя. Клиент вводит его сам, оно остаётся в localStorage его браузера.

Кнопка «Правка» не появилась

ПричинаЧто сделать
Виджет выключен в кабинетеПроект → «Виджет на сайте» → переключатель «Виджет включён». Архивный проект тоже гасит виджет.
Не выбран пул для правокВ том же окне выберите пул, в который падают правки с сайта.
Пул закрытЗакрытый и выполненный пул правок не принимает — откройте его или выберите другой.
Пул со сквозным шифрованиемУ сниппета нет пароля пула, шифровать нечем. Нужен обычный пул (подробнее).
Нужен платный тарифВиджет на сайте доступен на платных тарифах Правки.Про.
Домен не разрешёнЕсли в кабинете задан список разрешённых сайтов — добавьте в него адрес этого сайта.
Кеш выводаЕсли шаблон или чанк с виджетом кешируется (тег [[$Footer]] без !), очистите кеш сайта после изменений: Система → Очистить кеш сайта.
Плагин не подключён к событиюСпособ 2: проверьте, что на вкладке «Системные события» плагина отмечен OnWebPagePrerender — без этого код не выполняется.

Разработчику

Ключ виджета не секрет: он и так виден в исходном коде страницы и позволяет только создавать правки в целевом пуле — прочитать им нельзя ничего. Чтобы виджет не работал на посторонних сайтах, задайте в кабинете список разрешённых доменов.