Фильтр элементов

Как правило, списки на инфоблоках содержат много элементов и не всегда нужно отображать их все.

Параметр "Фильтр элементов" позволяет указать условие для отбора элементов списка. Те элементы, которые не подходят под условие - не будут отображаться.

Данный параметр появится только после выбора списка. 



Чтобы добавить условие нажмите на плюсик.

Откроется форма для настройки условия. На данный момент доступен только один тип условие "Поле списка" - он позволяет отфильтровать список по содержимому поля.

Содержимое поле можно проверить разными способами, которые зависят от типа поля:
  • Заполнено - проверяет, указано значение или нет (доступно для типов "Список" и "Привязка к элементам").
  • Равно - проверяет на полное соответствие с указанным значением (доступно для всех типов).
  • Совпадает с - проверяет на соответствие с элементом списка (доступно для типов "Список" и "Привязка к элементам").
  • Содержит - проверяет на вхождение подстроки (доступно для типов "Строка").
  • Больше - если значение поля больше указанного значения в условии (доступно для типов "Число" и "Счётчик").
  • Меньше - если значение поля меньше указанного значения в условии (доступно для типов "Число" и "Счётчик").
  • Больше либо равно - если значение поля больше, либо равно указанному значению в условии (доступно для типов "Число" и "Счётчик").
  • Меньше либо равно - если значение поля меньше, либо равно указанному значению в условии (доступно для типов "Число" и "Счётчик").

В текстовом поле напротив типа сравнения (не доступно при выборе "Заполнено" и "Совпадает с") указывается значение с которым нужно сравнить содержимое поля. Рядом с ним есть кнопка с троеточием - она открывает меню с переменными. Выбранная переменная подставляется в текстовое поле в виде кода переменной в двойных фигурных скобках. При проверке условия чат-бот заменит этот код на значение переменной. Обратите внимание, что переменные типа "Привязка к элементу списка" и "Привязка к значению свойства типа Список" имеют подменю, где можно указать, что именно подставить в поле. Например, в случае с переменной "Привязка к значению свойства типа Список" это может быть либо ID, либо название. А в случае с "Привязка к элементу списка", либо ID, либо любое другое поле списка (при условии, что вы указали "Список по умолчанию" в настройках для этой переменной.




После сохранения формы появится краткое описание условия, при нажатии на которое откроется форма для его редактирования.

Фильтр элементов поддерживает фильтрацию сразу по нескольким условиям. Чтобы добавить ещё одно условие - нажмите снова на плюсик.





Чтобы убрать условие - нажмите на крестик справа от его краткого описания.
Чтобы добавить отрицание (например, превратить "равно" в "не равно" или "больше" в "меньше") - нажмите на три вертикальных точки и выберите "Добавить отрицание".



После этого перед кратким описанием условия появится приписка "не", это значит, что условие выполнится наоборот.



Чтобы убрать отрицание - снова нажмите на три вертикальных точки и выберите "Убрать отрицание".





Например, есть задача - вывести список мероприятий для конкретного города.

Предположим, у нас есть список на инфоблоках "Мероприятия".

У этого списка три поля: название, описание, город. Город - поле типа "список".



Создаём узел в котором предлагаем выбрать один из городов.



Для каждого варианта создаём связанный с ним узел и указываем тип ответа "Ожидать ответ из предустановленного списка":
  • Выбрать из - список на инфоблоках.
  • Список - указываем наш список "Мероприятия".
  • Отображаемое поле - Название.
  • Фильтр элементов - добавляем одно условие с городом. Выбираем поле "Город", тип сравнения "совпадает с", после выбора которого появится список вариантов, выбираем нужный нам город.


  • Запись в переменную - выбираем переменную с типом "Привязка к элементу списка".
  • При ответе не по списку - запускаем другой узел (возвращаем обратно к выбору города).



В действиях бота после ответа переводим в другой узел в котором выводим описание выбранного мероприятия.



В итоге получаем такой набор узлов. Спрашиваем город - выводим список мероприятия для этого города - выводим описание выбранного мероприятия.






Чат-бот спрашивает город клиента и предлагает варианты на выбор.



Клиент выбирает Москву и чат-бот выводит ему список мероприятий у которых поле "Город" совпадает с "Москва", в данном случае их всего два. После выбора клиентом мероприятия - чат-бот выводит его описание.



Клиент выбирает Нижний Новгород и чат-бот выводит ему список мероприятий у которых поле "Город" совпадает с "Нижний Новгород", в данном случае их тоже два. Выбор по порядковому номеру также работает.




Но что делать, если городов много, а создавать под каждый город отдельный узел слишком хлопотно?

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



А в списке с мероприятиями создать поле "Город" с типом "Привязка к элементам". Привязать это поле к списку с городами.






Далее, в узле с выбором города вместо "Задать варианты ответов вручную" выбрать "Ожидать ответ из предустановленного списка":
  • Выбрать из - список на инфоблоках.
  • Список - указываем наш список "Города".
  • Отображаемое поле - Название.
  • Фильтр элементов -нам нужны все города, поэтому оставляем фильтр пустым.
  • Запись в переменную - выбираем переменную с типом "Привязка к элементу списка".
  • При ответе не по списку - отправляем сообщение и просим снова выбрать город.



Затем в действиях бота после ответа переводим в другой узел в котором выводим список мероприятий:
  • Выбрать из - список на инфоблоках.
  • Список - указываем наш список "Мероприятия".
  • Отображаемое поле - Название.
  • Фильтр элементов - добавляем одно условие с городом. Выбираем поле "Город", тип сравнения "Равно", после выбора которого появится текстовое поле, где мы указываем с чем сравнивать. Нажимает на кнопку рядом с иконкой троеточия, появится список переменных, в одну из них мы сохранили выбранный город. Выбираем переменную с городом и в текстовое поле подставится её код. Сохраняем условие.





  • Запись в переменную - выбираем переменную с типом "Привязка к элементу списка".
  • При ответе не по списку - запускаем другой узел (возвращаем обратно к выбору города).



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



В действиях бота после ответа переводим в другой узел в котором выводим описание выбранного мероприятия.

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




Чат-бот предлагает клиенту выбрать город из предустановленного списка.



Клиент выбирает Челябинск и чат-бот выводит список мероприятий этого города, в данном случае всего одно. Код переменный с городом чат-бот заменил на его название.