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

Дополнение: ChangePassword

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

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

Есть сниппет:
[[!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>
Ну ясное дело только труднее коснтрукция!

Прошу помощи или разъяснения! Заранее спасибо!
14 августа 2016, 20:01    Andrey   
0    368 0

Комментарии (4)

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

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