> For the complete documentation index, see [llms.txt](https://prostokosaka.gitbook.io/bubble/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://prostokosaka.gitbook.io/bubble/55-sozdanie-dinamicheskih-virazhenii.md).

# 5.5 Создание динамических выражений

## Создание динамических выражений

Большая часть информации, которой будет оперировать ваше приложение Bubble, будет динамической. Приложение будет получать её из базы данных или из других источников, таких как внешние API (плагины). В этих случаях вам нужно будет использовать "Конструктор выражений"/"Expression Composer", чтобы задать выражение, которое будет выглядеть как выражение в режиме редактора и заменится на получившееся значение в во время. Например, если в Редакторе вы видите "Current user's email"/"Email текущего пользователя", то в режиме работы, в зависимости от пользователя в системе это станет "<username@email.com>".

### Конструктор выражений

Конструктор выражений - это ключевой элемент Редактора Приложения Bubble, который позволяет вам составлять выражения без ввода с клавиатуры, вместо этого выбирая нужные варианты в выпадающем меню. Система сама предложит в следующем меню опции, которые доступны в зависимости от вашего предыдущего выбора. Например, если первый элемент в выражении - "Текущий пользователь"/"Current User", то следующее меню будет предлагать такие варианты, как "вошел в систему"/"is logged in", "не вошел в систему"/"is not logged in", "email" и т.д.

![](https://manual.bubble.is/assets/Desktop%202017-03-14%20at%205.10.46%20PM.png)

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

Типы выражений вычисляются в режиме редактора, чтобы провести проверку несоответствия типов (как объяснено выше (!!!ЛНК!!!) ). Например, если вы пытаетесь отобразить email Текущего пользователя в текстовом элементе, то "Текущий пользователь"/"Current user" не подойдет, так как это не текст, а вот "Current user\`s email"/"Email текущего пользователя" подойдет. Когда выражение не подходит, Инспектор сообщит об ошибке и всё выражение отметится красным.

Для того, чтобы понимать, какое значение выдаёт выражение очень полезно в режиме работы использовать отладчик. Для получения более подробной информации смотрите соответствующую секцию (!!!ЛНК!!!).

### Источники данных

Источники данных это то, откуда вы получаете данные при создании динамического выражения. Это первая секция выражения.

Источники данных могут быть: поиск по базе данных, текущий пользователь, данные из внешнего API, какая-то информация со страницы или из браузера и т.д. Этот раздел описывает основные источники данных. Вы можете найти подробности в Справочнике (!!!ЛНК!!!).

![](https://manual.bubble.is/assets/Desktop%202017-03-14%20at%205.12.28%20PM.png)

### Поиск и запросы

Этот источник данных позволяет обратиться к записям нужного типа в базе данных и получить список сущностей. Он может использоваться в повторяющихся группах для отображения списка, проверки существования записей (через проверку длины списка) и т.д.

Поиск задаётся типом искомых данных (например, "пользователь" или "автомобиль") и, при необходимости, какими-либо ограничениями и сортировкой.

#### Ограничения

Вы можете задать ряд ограничений для того, чтобы сузить поиск и извлечь только те элементы, которые подпадают под ограничения. Например, вы можете найти автомобили, цена которых находится в нужном диапазоне и т.д. Настройка ограничения работает так: вы выбираете поле, к которому нужно применить ограничение, затем задаёте оператор сравнения (такой как =, <, >, включает и т.д.) и указываете значение, с которым нужно сравнивать, оно может быть как статическим, так и динамическим. Если не включать ограничения, поиск выведет все записи указанного типа, которые есть в базе данных.

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

Когда значение выражения получается пустым, ограничение игнорируется. Допустим, мы осуществляем поиск на странице автомобилей и ваши пользователям задают максимальную цену с помощью поля ввода. Если вы используете значение этого поля в качестве ограничения значения поля "цена", а пользователь ничего в него не ввел, то выведутся все автомобили (вместо того, чтобы не вывести ни одной).

![](https://manual.bubble.is/assets/Desktop%202017-03-14%20at%205.27.55%20PM.png)

### Данные из внешних API

Источник данных "Получить данные по API"/"Get Data from API" позволяет получить данные от внешней службы или сервера и вывести список объектов заданного типа. Если вы добавите в ваше приложение какие-то плагины, которые предоставляют данные, вы увидите соответствующие опции выпадающего меню "Поставщик данных по API/"API provider".

У каждого API разные параметры и интерфейс предложит вам ввести нужные значения. Например, для API от Google Places необходимо ввести значение того, что вы ищете ("кафе", "ресторан" и т.д.) и адрес. Здесь, как и при поиске, вы можете использовать динамические выражения, чтобы данные из API тоже были динамическими.

![](https://manual.bubble.is/assets/Desktop%202017-03-14%20at%208.35.15%20PM.png)

Обратитесь к главе Плагины (!!!ЛНК!!!), чтобы получить больше информации по плагинам.

### Текущий пользователь

Значение "Текущий пользователь"/"Current User" представляет пользователя, который в данный момент находится в системе. Оно позволяет вам получить доступ к различным полям, которые заданы в типе Пользователь, в дополнение к встроенным полям, описанным выше (!!!ЛНК!!!).

### Результат предыдущих действий

В рабочих процессах, когда действие выводит какие-то данные, вам может понадобиться обратиться к результату предыдущих операций в последующих действий. Например, вы можете создать сущность типа "заказ", и вам нужен ID этого заказа, чтобы послать его письмом. Источник данных "Результат предыдущего действия"/"Result from Previous action" позволит вам это реализовать.

### Сущность родительского элемента и сущность текущей ячейки

Это одни аз самых распространенных источников данных. В Bubble элементы-контейнеры могут иметь прикрепленную к ним сущность, и все вложенные элементы смогут иметь к ней доступ. Вы можете изменять сущность, находящуюся в группе с помощью редактирования поля источника данных или действием "Отобразить данные в группу"/"Display Data in group".

![](https://manual.bubble.is/assets/Desktop%202017-03-14%20at%205.37.29%20PM.png)

Повторяющаяся группа функционирует подобным образом. К каждой ячейке прикреплена сущность, которую можно использовать в качестве источника данных.

## Операции со списками

В Bubble есть несколько операций, которые можно применять к спискам. В частности, вы можете сортировать и фильтровать списки сущностей. Эти действия отличаются от поисковых ограничений так как они срабатывают после того, как список получен из базы данных, и в следствие могут привести к снижению производительности. Больше про настройки списков можете прочитать в справочнике (!!!ЛНК!!!).

### Редактирование динамических выражений

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

Также у Bubble есть несколько инструментов для облегчения работы с длинными выражениями. Вы можете найти их в контекстном меню, нажав правой кнопкой мыши на выражение. В частности, вы можете копировать/вставлять выражения, вставлять динамические выражения при работе с текстовым выражением с динамической частью, или же отобразить элемент или действие, на которое ссылается выражение (если такое имеется).![](https://manual.bubble.is/assets/Desktop%202017-03-24%20at%2011.30.59%20AM.png)
