Условия
Хелперы условий нужны, чтобы показать переменную или текст в зависимости от определенных условий.
- Сравнение «меньше» или «больше» →
- Перевод значений переменных из строки в число →
- Все хелперы сравнения →
Сравнение переменной со значением или другой переменной
Давайте представим, что у нас есть переменная 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}}
Проверим этим способом возраст пользователя, как в прошлом примере — ботом можно пользоваться начиная с 16 лет.
1. Спросим и запишем возраст пользователя в переменную var1 с помощью Ввода от пользователя.
2. Добавим Запись переменной. Переменную назовем var2, в Значение добавим 16 — возраст, моложе которого в бот попасть будет нельзя.
3. Ниже добавим еще одну переменную, назовем её age, далее мы будем проверять её в Развилке.
Переведем значения переменных записанных выше, из строки в число используя хелпер toInt:
{{#gte (toInt var1)(toInt var2)}}1{{else}}0{{/gte}}
В нашем случае мы сравниваем var1 и var2, если ваши переменные названы по-другому, то в Значении поменяйте названия переменных на ваши.
Добавим Развилку, в Имени переменной, откуда Развилка возьмет значение, проверим age.
5. В Настройках Развилки добавим Цель 1, в Значении которой будет 1 и переход на экран для тех, у кого возраст больше 16 и Цель 2, в Значении которой будет 0 и переход на экран для тех, у кого возраст меньше 16.
6. Добавим экраны для перехода - отдельно для пользователей моложе 16 лет, и отдельно для тех кто старше.
Все хелперы сравнения
#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), но не гарантирует их работу в будущих обновлениях.