EJS (Express.js) — каркас веб-приложений для Node.js. В BILLmanager работа EJS реализована с помощью скрипта /usr/local/mgr5/etc/scripts/template_ejs.js. Для корректной работы шаблонизатора входящий XML-файл преобразуется в JSON. Шаблоны документов и сообщений в BILLmanager описываются с помощью языка EJS. Добавление и редактирование шаблонов выполняется в разделе Настройки → Шаблоны документов.
Статья описывает применение операторов условий для EJS-шаблонизатора. Операторы условий позволяют обработать несколько возможных сценариев построения печатной формы документа. В процессе формирования шаблона система проверяет заданные условия и на основе полученного результата выполняет подходящий фрагмент кода.
В данной статье описаны некоторые операторы для реализации условий:
- операторы сравнения;
- логические операторы;
- оператор if ... else;
- условный оператор;
- оператор switch.
Операторы сравнения
Для проверки условия на истинность используются операторы сравнения. Они служат для сравнения двух значений между собой.
Логические операторы
Логические операторы служат для объединения двух и более условий по правилам логических выражений:
- && — логическое И. Чтобы логическое выражение было истинным (true), все условия должны быть истинны (true);
- || — логическое ИЛИ. Чтобы логическое выражение было истинным (true), хотя бы одно условие должно быть истинным (true);
- ! — логическое НЕ. Возвращает противоположное значение результата. Ложное (false) условие будет считаться истинным (true), истинное условие (true) будет считаться ложным (false).
Результат логического выражения в коде обозначается ключевыми словами true и false. Логическое выражение возвращает значение true, если оно истинно и значение false, если выражение ложно.
Оператор if ... else
Базовый синтаксис конструкции:
if (логическое выражение) {
фрагмент кода 1 //выполняется если логическое выражение истинно.
} else {
фрагмент кода 2 //выполняется если логическое выражение ложно.
}
Использование ключевого слова else не является обязательным:
if (логическое выражение) {
фрагмент кода 1 //выполняется если логическое выражение истинно.
}
фрагмент кода 2 //выполняется в любом случае, независимо от результата логического выражения.
Если из одного условия вытекает больше двух сценариев, то можно использовать вложенную конструкцию else if. В качестве примера приведено условие для отображения копеек в прописной записи итоговой суммы:
if (_second_num == 1 & _first_num != 1) _string += ' копейка'; //Первое условие. Если истинно, то выполняется описанный код и выход из условия.
else if (_second_num > 1 && _second_num < 5) _string += ' копейки'; //Второе условие. Проверяется, если первое условие ложно.
else _string += ' копеек';// Выполняется, если ни одно из условий не оказалось истинным.
Пример использования
В стандартном шаблоне счёта с помощью конструкции "if ... else" реализован вывод информации о плательщике:
<% if ((findu(payment.customer.profiletype) == 2) || (findu(payment.customer.profiletype) == 3)) { %> // Если плательщик является юр. лицом или ИП, тогда
<div class="title">Покупатель: </div>
<div class="company"><%= findu(payment.customer.name) %></div>
<div>ИНН <%= findu(payment.customer.vatnum) %>, КПП <%= findu(payment.customer.kpp) %></div> // Вывести на печатную форму документа ИНН и КПП.
<div class="line"> </div>
<div><%= findu(payment.customer.postcode_legal) %>, <%= findu(payment.customer.country_legal_name) %>,
<%= findu(payment.customer.city_legal) %>, <%= findu(payment.customer.address_legal) %></div>
<% } else { %> // Иначе плательщик счиатется физ. лицом
<div class="title">Покупатель: </div>
<div class="company"><%= findu(payment.customer.person) %></div>
<div class="line"> </div>
<div><%= findu(payment.customer.postcode_physical) %>, <%= findu(payment.customer.country_physical_name) %>,
<%= findu(payment.customer.city_physical) %>, <%= findu(payment.customer.address_physical) %></div> // Вывести на печатную форму документа адрес плательщика.
<% } %>
В приведённом фрагменте кода проверяется тип плательщика. Если это юридическое лицо или индивидуальный предприниматель, то на печатную форму счёта выводится его ИНН и КПП. Иначе плательщик считается физическим лицом и на печатную форму счёта выводится его адрес.
Условный оператор
Условный оператор — удобная альтернатива конструкции "if ... else". Оператор выполняет действие X, если логическое выражение истинно, и действие Y, если выражение ложно. Базовый синтаксис:
(условие)?фрагмент кода 1:фрагмент кода 2
Фрагмент кода 1 выполняется, если условие истинно. Фрагмент кода 2 выполняется, если условие ложно.
Пример использования
В функции приведения числа к строковому написанию содержится код:
var n=!isFinite(+number)?0:+number
Его можно расшифровать как "если выражение +number не является конечным числом, то переменной n присваивается 0, иначе n присваивается выражение +number".
Оператор switch
Оператор switch принимает одну переменную или выражение и в зависимости от полученного результата выполняет необходимый фрагмент кода. Базовый синтаксис выглядит следующим образом:
switch (выражение) {
case 1:
фрагмент кода 1
break; // завершает выполнение оператора case
case 2: // конструкций case (вариантов) может быть любое количество
фрагмент кода 2
break;
default: // выполняется, если полученное значение не соответствует ни одному результату.
фрагмент кода 3
}
Фрагмент кода 1 выполняется, если результатом выражения стало число 1. Фрагмент кода 2 выполняется, если результатом выражения стало число 2. Фрагмент кода 3 выполнится, если результатом выражения станет любое значение, кроме чисел 1 и 2.
Пример использования
В качестве примера приведён фрагмент кода, который возвращает одну из четырёх фраз, в зависимости от входного значения. Данный код не используется в предустановленных шаблонах биллинговой системы.
switch (word) {
case 'hi':
phrase = 'Hello my dear friend';
break;
case 'bye':
phrase = 'Goodbye, i hope to see you again';
break;
case 'joke':
phrase = 'I dont know jokes';
break;
case 'day':
phrase = 'Have a nice day!';
break;
default:
phrase = 'I dont understand you';
}
Данный фрагмент кода сопоставляет значение входной переменной word с возможными значениями:
- если в переменной "word" содержится слово "hi", то переменной "phrase" будет присвоено значение "Hello my dear friend";
- если в переменной "word" содержится слово "bye", то переменной "phrase" будет присвоено значение "Goodbye, i hope to see you again";
- если в переменной "word" содержится слово "joke", то переменной "phrase" будет присвоено значение "I dont know jokes";
- если в переменной "word" содержится слово "day", то переменной "phrase" будет присвоено значение "Have a nice day";
- если совпадения не найдены, то переменной phrase будет присвоено значение "I dont understand you".