> For the complete documentation index, see [llms.txt](https://alt3rmann.gitbook.io/isaak-io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://alt3rmann.gitbook.io/isaak-io/shablonizator/khelpery.md).

# Хелперы

В Issak используются различные хелперы. Подключены такие группы, как «math», «string», «array», «conditional».

Хелперы - это помощники, которые могут что-то сделать с переменными. Они бывают двух видов: строчные и блочные.

**Строчные** хелперы выглядят очень просто, они начинаются с имени хелпера и могут включать в себя N переменных:

{{helper var1 var2}}

**Блочные** хелперы выглядят так: #имяхелпера - начало блока, /имяхелпера - конец блока. У блочного хелпера есть начало, тело с текстом и переменными и конец. Как правило, блочные хелперы используются для вывода какого-либо текста в зависимости от условий.

{{#helper var1 var2}}

Текст и переменные

{{/helper}}

## Условия

### Сравнение переменной&#x20;

В качестве примера попросим пользователя указать свой пол и запишем в переменную **gender**. В зависимости от пола нужно направить разный текст. Для этого используется блочный хелпер сравнения **eq**:

![](/files/-MTa9O_4gTl2n2cBmiao)

В примере видно, как открывается блочный хелпер **#eq**, затем используется переменная **gender** и строка **Женский**. Затем закрывается блочный хелпер **/eq**. Помимо переменных сравниваться могут строки и числа. &#x20;

У хелперов предназначенных для сравнения можно использовать специальный разделитель **{{else}}**. В нашем примере в переменную **gender** записана строка **"Женский"**, поэтому будет выводиться текст "Спасибо, что написала", во всех остальных случаях - "Спасибо, что написал".

![](/files/-MTecVw-ECDb0QF75qkk)

### Сравнение "больше" или "меньше"

Для сравнения чисел существует два блочных хелпера **#gt** и **#lt**:

**gt** - больше, чем\
**lt** - меньше, чем

Cпросим у пользователя его возраст и запишем в переменную **age**. Открываем блочный хелпер **#gt**, указываем переменную **age** и возраст **17**. Если введенный возраст 18 и старше - выводится сообщение "Добро пожаловать!", во всех остальных случаях с помощью разделителя **{{else}}** выводится сообщение "Ботом можно пользоваться только с 18 лет".

![](/files/-MTerZQLRfHfmbb9r4N1)

Чтобы сравнивать включительно числу, существуют дополнительные хелперы **#gte** и **#lte**

**gte** - больше или равно\
**lte** - меньше или равно

![](/files/-MTimHT52WgasTyzVewk)

Блочные хелперы можно вкладывать друг в друга. Объединим переменную **gender** и **age**.

![](/files/-MTioqoLmiLGQnGwguHZ)

### Часто используемые хелперы сравнения

**#eq** - равенство переменных

```
{{#eq var1 var2}}
Переменная var1 равна переменной var2
{{else}}
Переменные не равны (необязательный текст)
{{/eq}}
```

**#lt** - первая переменная меньше второй

```
{{#lt var1 var2}}
Переменная var1 меньше, чем var2
{{else}}
Переменная var2 меньше, чем var1 (необязательный текст)
{{/lt}}
```

**#lte** - первая переменная меньше либо равна второй

```
{{#lte var1 var2}}
Переменная var1 меньше либо равна var2
{{/lte}}
```

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

```
{{#gt var1 var2}}
Переменная var1 больше, чем var2
{{else}}
Переменная var2 больше, чем var1 (необязательный текст)
{{/gt}}
```

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

```
{{#gte var1 var2}}
Переменная var1 больше либо равна var2
{{/gte}}
```

**#if** - если переменная var1 существует и в ней не ложное значение

```
{{#if var1}}
Необходимый текст
{{else}}
Обратное условие (необязательный текст)
{{/if}}

```

Дополнительные хелперы сравнения можно [посмотреть здесь](https://github.com/jonschlinkert/template-helpers#conditional).

## Математика

Isaak поддерживает хелперы для основных математических операций. Все хелперы математики - линейные.

### Сложение

Для сложения чисел используется хелпер **add:**

```
{{add var1 var2}}
```

Как и в блочных хелперах, можно использовать литеральные значения:

```
{{add 200 45}}
```

В результате в сообщении будет выведен текст "245".

### Вычитание

Для вычитания одного числа из другого используется хелпер **subtract**:

```
{{subtract var1 var2}}
```

```
{{subtract 245 200}}
```

### Умножение

Для умножения используется хелпер **multiply**:

```
{{multiply var1 var2}}
```

### Деление

Для деления используется хелпер **divide**:

```
{{divide var1 var2}}
```

Дополнительные математические хелперы можно [посмотреть здесь](https://github.com/jonschlinkert/template-helpers#math).

## Комментарии

Существует специальный хелпер для комментариев, которые не будут отправлены пользователю. Для этого достаточно обернуть текст:

```
{{!-- Комментарий, который не увидит пользователь --}}
```

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

## Массивы и списки

### Вывод массивов

#### {{#each}}{{/each}}

Для того, чтобы вывести все элементы массива используется хелпер **#each**. Например, осуществляем запрос к некой базе, получаем из нее список с породами кошек и записываем в переменную **breeds**. Далее пользователь должен выбрать нужную породу.&#x20;

```
[
"Сиамская",
"Мейн-кун",
"Бенгальская"
]
```

Каждый из элементов массива внутри хелпера **#each** доступен как переменная **this**:

```
Выберите породу:
{{#each breeds}}
{{this}}
{{/each}}
```

**Сообщение, которое увидит пользователь:**\
Выберите породу:\
Сиамская\
Мейн-кун\
Бенгальская

Также внутри хелпера **#each** доступна специальная переменная **@index**, которая присваивает элементу порядковый номер, стоит заметить, что элементы массива нумеруются начиная с нуля. Внутри **#each** можно использовать любые линейные хелперы.

```
Выберите породу:
{{#each breeds}}
{{sum @index}}. {{this}}
{{/each}}
```

**Сообщение, которое увидит пользователь:**\
Выберите породу:\
0\. Сиамская\
1\. Мейн-кун\
2\. Бенгальская

```
Выберите породу:
{{#each breeds}}
{{sum @index 1}}. {{this}}
{{/each}}
```

**Сообщение, которое увидит пользователь:**\
Выберите породу:\
1\. Сиамская\
2\. Мейн-кун\
3\. Бенгальская

#### {{itemAt}}

Данный хелпер возвращает элемент массива с заданным индексом. Например:

```
Выберите дату посещения:
{{!-- dates: ['9-30', '10-00', '10-30'] --}}

{{#each response.body.dates}}
{{itemAt this.dates 1}}
{{/each}}

{{!-- results in: '10-00' --}}
```

\
Более подробная информация о встроенных хелперах с примерами находится [по этой ссылке](https://handlebarsjs.com/guide/#installation).

### setVar

Служит для того, чтобы динамически устанавливать переменную внутри шаблона. **Пример:**&#x20;

В разделе "Список переменных" создана переменная `cat`, установим ей значение `"Рыжий"`:

```
{{setVar "cat" "Рыжий"}}
```

<figure><img src="/files/Q073HRGpXKY8TXMpC4oE" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/8SjoETlmA0GnWpeBZ8h0" alt=""><figcaption><p>Сообщение, которое увидит пользователь</p></figcaption></figure>

Запишем значение из другой переменной. Например, существует переменная `cat` с первоначальным значением `"Рыжий"`

```
{{setVar "cat" catColor}}
```

<figure><img src="/files/KIEvkgF9JpP3WSnEpMYj" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/5nYwveG0UpYtJXxqx3f8" alt=""><figcaption><p>Сообщение, которое увидит пользователь</p></figcaption></figure>
