Skip to content
Reactions
Reactions
Универсальная система реакций для MODX 3 — лайки, наборы в стиле GitHub, топы и trending на любом объекте
  • MODX 3
  • PHP 8.2
  1. Компоненты
  2. Reactions
  3. CLI

CLI ​

Запускайте из корня сайта MODX (там, где лежат index.php и core/config/):

bash
cd /var/www/site
php core/components/reactions/cli.php <команда> [подкоманда] [опции]

CLI поднимает контекст mgr. Корень сайта ищется по пути вызова ($argv[0] + cwd), поэтому работает и через симлинк core/components/reactions → Extras/Reactions/....

Обзор команд ​

КомандаПодкомандыНазначение
recount—Пересчёт агрегатов
cleanup—Очистка сирот и просроченных банов
export—Экспорт реакций в JSON
typecreate, list, removeУправление типами
setcreate, list, attach, removeУправление наборами
banadd, remove, listБаны IP и пользователей
stats—Статистика в консоль

recount ​

Пересчитывает ReactionAggregate из сырых записей.

bash
# Все объекты с реакциями или агрегатами
php core/components/reactions/cli.php recount

# Один объект
php core/components/reactions/cli.php recount --class-key=modResource --object-id=5 --context=web

Опции:

ОпцияОписание
--class-keyКласс объекта как в API (modResource, msProduct…). В БД это поле object_class
--object-idID объекта
--contextКонтекст, по умолчанию web

cleanup ​

bash
# Удалить реакции с несуществующими типами + просроченные баны
php core/components/reactions/cli.php cleanup --orphans

# Только просроченные баны
php core/components/reactions/cli.php cleanup
ОпцияОписание
--orphansУдалить реакции, у которых type_id не существует

export ​

Экспорт реакций в JSON.

bash
# В файл
php core/components/reactions/cli.php export --file=/tmp/reactions.json

# В stdout с фильтром
php core/components/reactions/cli.php export --class-key=modResource --object-id=5 --context=web
ОпцияОписание
--class-keyФильтр по классу
--object-idФильтр по ID
--contextФильтр по контексту
--fileПуть к файлу. Без него вывод в stdout

Формат файла:

json
{
  "exported_at": 1710000000,
  "count": 2,
  "items": [
    {
      "id": 1,
      "class_key": "modResource",
      "object_id": 5,
      "context": "web",
      "type_id": 1,
      "type": { "id": 1, "name": "like", "emoji": "👍" },
      "user_id": null,
      "fingerprint": "f:abc...",
      "created_at": 1709900000,
      "updated_at": 1709900000
    }
  ]
}

type ​

type create ​

bash
php core/components/reactions/cli.php type create --name=favorite --emoji=⭐ --ordering=90
ОпцияОписание
--nameУникальное имя (обязательно)
--emojiЭмодзи
--orderingПорядок сортировки
--iconИконка (опционально)
--inactiveСоздать неактивным

type list ​

bash
php core/components/reactions/cli.php type list

type remove ​

bash
php core/components/reactions/cli.php type remove --name=favorite
php core/components/reactions/cli.php type remove --id=9

set ​

set create ​

bash
php core/components/reactions/cli.php set create --key=social --title="Social" --types=like,love,funny
ОпцияОписание
--keyУникальный ключ (обязательно)
--titleЗаголовок
--typesСписок типов через запятую
--non-exclusiveРазрешить несколько реакций
--inactiveСоздать неактивным

По умолчанию набор создаётся exclusive.

set list ​

bash
php core/components/reactions/cli.php set list

set attach ​

Привязать типы к существующему набору.

bash
php core/components/reactions/cli.php set attach --key=github --types=like,dislike,love --replace
ОпцияОписание
--key или --idНабор
--typesТипы через запятую (обязательно)
--replaceСнести старые связи набора и записать только --types

Без --replace типы из --types добавляются к уже привязанным. Чтобы оставить только перечисленные типы: --replace.

set remove ​

bash
php core/components/reactions/cli.php set remove --key=social
php core/components/reactions/cli.php set remove --id=3

ban ​

ban add ​

bash
php core/components/reactions/cli.php ban add --ip=203.0.113.10 --reason=spam --days=7
php core/components/reactions/cli.php ban add --user=42 --reason=abuse
php core/components/reactions/cli.php ban add --ip=1.2.3.4 --expires=1711000000
ОпцияОписание
--ipIP-адрес (хешируется SHA-256)
--userID пользователя MODX
--reasonПричина
--daysСрок в днях от текущего момента
--expiresUnix timestamp или строка для strtotime()

Нужен --ip или --user.

ban remove ​

bash
php core/components/reactions/cli.php ban remove --id=1
php core/components/reactions/cli.php ban remove --ip=203.0.113.10
php core/components/reactions/cli.php ban remove --user=42

ban list ​

bash
php core/components/reactions/cli.php ban list

stats ​

bash
php core/components/reactions/cli.php stats
php core/components/reactions/cli.php stats --limit=20

Выводит:

  • Общие счётчики (реакции, агрегаты, типы, баны, сегодня).
  • Топ по likes.
  • Топ по total.
  • Топ по trending_score.

Примеры сценариев ​

Набор «Бар» из уже существующих типов ​

Типы beer и fire входят в пресет full. Достаточно создать набор:

bash
php core/components/reactions/cli.php set create --key=bar --title="Bar" --types=beer,fire --non-exclusive

Свой тип (имя должно быть уникальным):

bash
php core/components/reactions/cli.php type create --name=cheers --emoji=🥂 --ordering=250
php core/components/reactions/cli.php set attach --key=bar --types=cheers

Пересчёт после импорта ​

bash
php core/components/reactions/cli.php recount
php core/components/reactions/cli.php stats --limit=5

Еженедельное обслуживание (cron) ​

bash
0 3 * * 0 cd /var/www/site && php core/components/reactions/cli.php cleanup --orphans