# Хелперы

В 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>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://alt3rmann.gitbook.io/isaak-io/shablonizator/khelpery.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
