Вывод счётчика действий в 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 для чистого кода, не забывайте про кеширование и значения по умолчанию.