Логотип

Документация по макросам и шаблонам UMI.CMS

Ошибки выполнения макроса

Наиболее очевидным примером являются ошибки, возвращаемые при обработке введенных пользователями данных. Например — при регистрации нового пользователя, необходимо убедиться, что введенный логин не занят, удовлетворяет требованиям, пароль и подтверждение пароля совпадают и указанный e-mail не был использован ранее для регистрации. Если одно из условий не выполнено, нужно сообщить пользователю об ошибке.

При возникновении ошибок такого рода пользователь будет перенаправлен обратно на страницу для введения данных, где ошибки можно отобразить при помощи макроса %system listErrorMessages()%. Косвенным признаком такого рода ошибок является параметр наподобие «?_err=173738233», появившийся в конце адреса страницы.

В стандартном случае, когда макрос является методом какого-либо модуля (например в случае регистрации нового пользователя — модуля "Пользователи"), текст сообщения об ошибке берется из файла lang.php, лежащего в папке ~/classes/modules/имя_модуля/. В случае другой языковой версии будет браться lang.php с соответствующим языковым префиксом, например lang.en.php.

TPL-шаблонизатор

В качестве примера, можно рассмотреть такой шаблон для страниц контента:

<div id="content">
 <div id="left" class="column">
  ...
 </div>

 <div id="center" class="column">
  <h2>%header%</h2>

  %system listErrorMessages()%

  %content%

 </div>

 <div id="right" class="column">
   ...
 </div>
</div>

Блок, отображаемый макросом %content%, может содержать и другие макросы, например пусть это будет %users registrate()%.

При первой загрузке страницы макрос %system listErrorMessages()% не выведет ничего, и мы увидим только форму регистрации нового пользователя.

Предположим, что новый пользователь пытается зарегистрироваться, но неправильно ввел защитный код.

Тогда, после отправки данных он будет снова перенаправлен на эту страницу, но уже на этот раз макрос %system listErrorMessages()% отобразит соответствующую ошибку. В данном конкретном примере это будет:

Вы ввели неверный код с картинки

XSLT-шаблонизатор

Для XSLT-шаблонизатора в аналогичном случае ответ макроса %system listErrorMessages()% будет выглядеть следующим образом:

<udata module="system" method="listErrorMessages" generation-time="0.029601">
 <items>
  <item>Вы ввели неверный код с картинки</item>
 </items>
</udata>

При желании на этот случай мы можем описать шаблон (например, задав соответствие match="udata[module='system' and method='listErrorMessages']/items") и обработать нужным образом результат.