Не работают модификаторы применяемые к Ошибкам

Приветствую бойцы!

Нужна помощь!

Есть сниппет:
[[!ChangePassword?
&submitVar=`change-password`
&placeholderPrefix=`cp.`
&validateOldPassword=`1`
&successMessage=`Ваш пароль успешно изменен!`
&reloadOnSuccess=`1`
&redirectToLogin=`0`
&validate=`nospam:blank`
]]
и вывод плейсхолдера ошибки:
[[!+cp.error_message]]
Теперь странность!
Если выводить вот так:
[[!+cp.error_message]]
— все работает, ошибки выводятся!

Но, если выводить с применением модификатора вот так:
[[!+cp.error_message:notempty=`[[!+cp.error_message]]`]]
— То почему ошибка не выводится! Почему хочется так? Чтобы обернуть ошибку в красивую оболочку, что то вроде:
[[!+cp.error_message:notempty=`<div class="errore">[[!+cp.error_message]]`]]</div>
Ну ясное дело только труднее коснтрукция!

Прошу помощи или разъяснения! Заранее спасибо!
Andrey
14 августа 2016, 17:01
modx.pro
1 125
0

Комментарии: 4

Andrey
14 августа 2016, 20:45
0
Так и думал, но все же, раньше работало, почему перестало не пойму.
Оказывается Модификатор почему то не работал именно из-за того, что вывод ошибки с модификатором стояла перед вызовом сниппета, а не после.

Но раньше работало и так, но вот опять таки вопрос, почему вызво без модификатора до вызова сниппета работает, а с модификатором отказывается?
    mngatoff
    15 августа 2016, 01:41
    0
    потому что модификатор это тоже в некотором роде сниппет, и он пытается отработать до того, как отработает сниппет, возвращающий ошибку. То есть в этот момент еще никто ничего не вернул, и модификатор обрабатывает пустое место. Это и раньше работать не могло, если только Вы ошибки без восклицательного знака вызывали.
      Сергей Шлоков
      15 августа 2016, 11:42
      1
      +3
      Это и раньше работать не могло, если только Вы ошибки без восклицательного знака вызывали.
      Могло и может. Всё очень просто. Парсер по умолчанию гоняет 10 циклов. Если за 9 циклов он не обработает какой-нибудь плейсхолдер, то на 10-й раз он его удалит.
      В данном случае, парсер в первом проходе проверяет плейсхолдер [[!+cp.error_message]]. Он пустой, поэтому остается не обработанным. Далее обрабатывается тег сниппета. Он (сниппет) выставляет этот плейсхолдер. Во втором цикле парсер проверяет оставшиеся плейсхолдеры и на этот раз распарсивает этот плейсхолдер.
      А когда используется фильтр notempty, то плейсхолдер обрабатывается сразу же. Т.е. парсер на первом цикле вернет или пустое значение или указанное в фильтре. На втором круге парсить уже нечего.
      Как-то так.
    Andrey
    10 сентября 2016, 13:38
    0
    рмишщзлхз
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4