Условия

Хелперы условий нужны, чтобы показать переменную или текст в зависимости от определенных условий.

Сравнение переменной со значением или другой переменной

Давайте представим, что у нас есть переменная gender, в которую мы через развилку запишем мужчина или женщина в зависимости от того, что клиент написал боту.

И теперь хотим в зависимости от пола отправить клиентам разный текст.

Мы можем использовать блочный хелпер сравнения переменных eq:

Привет!
{{#eq gender "женщина"}}
Хорошо, что ты написала!
{{/eq}}
{{#eq gender "мужчина"}}
Хорошо, что ты написал!
{{/eq}}

Что тут происходит?

Мы открыли блочный хелпер #eq и использовали с ним переменную gender и строку женщина.

В примере видно, что вместо переменных мы можем сразу использовать так называемые литералы. Т. е. мы можем сравнивать не только переменные, но и сразу строки и числа.

Строки нужно записывать в двойных программных кавычках ".

И после тела блока мы закрыли его /eq. Блочные хелперы всегда нужно закрывать, иначе в шаблоне случится ошибка, и бот ничего не пришлет.

У многих блочных хелперов, которые используются для сравнений, есть так называемый альтернативный блок.

Давайте еще раз посмотрим на наш пример, у нас может быть только мужчина и женщина — всего два варианта.

Мы можем не делать для каждого из вариантов свой блок, а использовать специальный разделитель {{else}}:

Привет!
{{#eq gender "женщина"}}
Хорошо, что ты написала!
{{else}}
Хорошо, что ты написал!
{{/eq}}

Т. е. если в переменной gender записана строка женщина, то бот напишет: Привет! Хорошо, что ты написала!, а во всех остальных случаях: Привет! Хорошо, что ты написал!

Сравнение «меньше» или «больше»

Чтобы сравнить два числа на меньше или больше есть два блочных хелпера #lt и #gt соответственно.

lt — less than — меньше чем

gt — greater than — больше чем

Представьте, что в боте мы спросили клиента, сколько ему лет, и добавили еще одну переменную, в которую записали возраст — age.

Допустим, мы хотим предупредить, что пользоваться ботом можно только если клиент старше 16 лет. Если клиент младше, то попросим его не пользоваться ботом.

{{#lt age 16}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/lt}}

Аналогично можно сделать и с хелпером #gt и разделителем {{else}}:

{{#gt age 15}}
{{else}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/gt}}

Вышло немного нелогично. Потому что нам нужны те, кому 16 лет и старше, а получились те, кому строго больше 15.

Чтобы в подобных случаях сравнивать включительно числу, есть дополнительные хелперы #lte (меньше или равно) и #gte (больше или равно).

Перепишем последний пример на #gte и добавим приветствие для подходящих клиентов:

{{#gte age 16}}
Ого! Добро пожаловать, вам так много лет!
{{else}}
К сожалению, вам еще нет 16 лет
{{/gte}}

Кстати, блочные хелперы можно друг в друга вкладывать. Давайте объединим два примера:

{{#gte age 16}}
Ого! Добро пожаловать!
{{#eq gender "женщина"}}
Вы такая взрослая!
{{else}}
Вы такой взрослый!
{{/eq}}
{{else}}
К сожалению, вам еще нет 16 лет
{{/gte}}
Хелперы сравнения для числовых значений работают только с числами, а в переменные в компонентах бота записываются строки. Поэтому нужно внутри этих хелперов использовать хелпер toInt для перевода значений переменных из строки в число. Например вот так: {{#gte (toInt var1)(toInt var2)}}1{{else}}0{{/gte}}

Все хелперы сравнения

#eq — равны ли переменные?

{{#eq переменная1 переменная2}}
Если переменные равны
{{else}}
Необязательный текст, если переменные не равны
{{/eq}}

#lt — первая переменная меньше второй?

{{#lt переменная1 переменная2}}
Если первая переменная меньше
{{else}}
Необязательный текст, если вторая переменная меньше
{{/lt}}

#gt — первая переменная больше второй?

{{#gt переменная1 переменная2}}
Если первая переменная больше
{{else}}
Необязательный текст, если вторая переменная больше
{{/gt}}

#if — переменная существует и в ней «правдивое значение»?

{{#if переменная}}
Если переменная существует и в ней НЕ пустая строка "", ноль 0, логическая ложь false, ссылка на «ничего» null
{{else}}
Необязательные текст, для обратного условия
{{/if}}

#lte — первая переменная меньше или равна второй?

{{#lte age 16}}
К сожалению, ботом нельзя пользоваться до 16 лет
{{/lte}}

#gte — первая переменная больше или равна второй?

{{#gte age 16}}
Ого! Добро пожаловать, вам так много лет!
{{/gte}}

Ботмама поддерживает и другие хелперы сравнения (comparison), но не гарантирует их работу в будущих обновлениях.

В начало ↑

Была ли статья полезна?

Да Нет