Skip to content
Reactions
Reactions
Универсальная система реакций для MODX 3 — лайки, наборы в стиле GitHub, топы и trending на любом объекте
  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/reactionsExtras/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