MODx Revo: Почему условие if не работает внутри чанка?

У меня есть следующий код: <br/> <pre><code>[[$actionsCounter]]
[[+totalActions]]&lt;br&gt;
-[[!If? &amp;subject=`[[+totalActions]]` &amp;operator=`&gt;` &amp;operand=`1` &amp;then=`больше нуля` &amp;else=`0`]]-</code></pre> <br/> Какой результат он выдает? <br/>
  • 3 февраля 2025 г. 8:24
Ответы на вопрос 2
В MODx Revolution, когда вы используете сниппеты внутри чанков, необходимо учитывать, что некоторые сниппеты могут не обрабатывать как ожидается данные из чанков. В вашем примере вы пытаетесь использовать сниппет `If` внутри чанка, который обрабатывает плейсхолдеры, а не предоставленный результат.

Ваш код выглядел бы так, если бы в нем не было проблем с обработкой:

```html
[[$actionsCounter]]
[[+totalActions]]<br>
-[[!If? &subject=`[[+totalActions]]` &operator=`>` &operand=`1` &then=`больше нуля` &else=`0`]]-
```

Однако, проблема в том, что `[[+totalActions]]` не будет заменено на реальное значение до того, как произойдёт вызов сниппета `If`. Вы можете попробовать решить эту проблему, сначала сохранить значение `[[+totalActions]]` в плейсхолдере на уровне ресурса или сделать его доступным как параметр для сниппета `If`.

Вот пример, как можно сделать это корректно:

1. Если `[[+totalActions]]` является плейсхолдером, убедитесь, что вы его используете в построении значения, например:

```html
[[!If? &subject=`[[+totalActions]]` &operator=`>` &operand=`1` &then=`больше нуля` &else=`0`]]
```

2. Или, если ваш код не работает должным образом, вы можете перенести логику из чанка в сниппет:

```html
[[!YourCustomSnippet? &totalActions=`[[+totalActions]]`]]
```

Где в вашем сниппете будет логика, которая проверяет `totalActions` и возвращает нужное значение. Это поможет избежать проблем с обработкой.

Таким образом, если ваш плейсхолдер `[[+totalActions]]` равен 0, то данное условие в итоге выведет результат `"0"`, а если оно будет больше 1, то выведет `"больше нуля"`. Но из-за особенностей работы с чанками и сниппетами, возможно потребуется изменить способ получения условий.
Попробуйте так: 
[[!+totalActions:gt=`1`:then=`больше единицы`:else=`меньше`]]


[[+totalActions]]
Что это у вас, плейсхолдер?TV? Возможно оно изменяется?!
Похожие вопросы