Вывод счётчика действий в MODX с проверкой If

    При разработке на MODX Revolution часто требуется отобразить количество действий (лайков, просмотров, комментариев) с условным форматированием. В исходном примере используется сниппет actionsCounter и вызов If для проверки значения totalActions. Разберём, как это работает и как улучшить код.

    Как работает исходный код

    Код состоит из трёх частей:

    • [[$actionsCounter]] - вызов чанка или сниппета, который возвращает количество действий (например, число).
    • [[+totalActions]] - плейсхолдер, в который подставляется значение счётчика.
    • [[!If? &subject=`[[+totalActions]]` &operator=`>` &operand=`1` &then=`больше нуля` &else=`0`]] - условный вывод: если totalActions больше 1, то выводится текст «больше нуля», иначе - «0».

    На выходе получается строка с числом и результатом проверки. Обратите внимание: символ ! перед If отключает кеширование вызова.

    Почему условие с оператором > и операндом 1 может быть ошибкой

    В текущей записи условие срабатывает только когда totalActions больше 1. Если значение равно 1, выводится «0». Это логическая неточность: обычно нужно проверять «больше нуля» или «больше 0». Исправьте оператор или операнд:

    • Для проверки «больше 0»: &operator=`>` &operand=`0`.
    • Для проверки «больше или равно 1»: &operator=`>=` &operand=`1`.

    Альтернативные способы проверки в MODX

    Вместо сниппета If можно использовать:

    • output filter - [[+totalActions:gt=`0`:then=`больше нуля`:else=`0`]].
    • сниппет pdoTools - [[!pdoIf? &subject=`[[+totalActions]]` &operator=`gt` &operand=`0` &then=`больше нуля` &else=`0`]].

    Эти методы более производительны и не требуют дополнительных вызовов.

    Как отформатировать вывод для пользователя

    Чтобы сделать вывод дружественным, используйте склонение числительных или иконки. Пример с fenom (если включён):

    [[+totalActions]] [[+totalActions:fenom:if=`$value == 1`:then=`действие`:else=`действий`]]

    Или с помощью сниппета plural из pdoTools.

    Типичные ошибки и их решение

    Ошибка 1: пустое значение totalActions

    Если totalActions не определён, условие может не сработать. Добавьте значение по умолчанию: [[+totalActions:default=`0`]].

    Ошибка 2: кеширование

    Если не использовать ! перед сниппетом, результат может закешироваться и не обновляться. Всегда ставьте ! для динамических данных.

    Заключение

    Правильный вывод счётчика действий в MODX требует внимания к логике условия и выбору подходящего инструмента. Используйте output filters или pdoIf для чистого кода, не забывайте про кеширование и значения по умолчанию.

    Часто задаваемые вопросы