Задать вопрос
Diversia
@Diversia

Какой принцип создания живого поиска по элементам инфоблока для Битрикс?

Необходимо сделать живой поиск по элементам инфоблока в Битрикс. Есть форма в которой есть поле select. Данные в select должны подгружаться динамически из инфоблока. Инфоблок имеет около 10000 элементов. В качестве плагина для изменения вида select используется плагин bootstrap-select. Пользователь вводит фразу в select, далее должен подгружаться список найденного динамически. В форме есть другие поля, которые должны также сохраняться наряду с select. Select может быть несколько в форме (это важно).

Я предполагаю, что нужно через Jquery делать запрос к нужному файлу. В файле должен быть CIBlockElement::GetList. В зависимости от поисковой фразы должны изменятся поля option в select. С помощью Jquery нужно делать запрос к файлу и в option выводить (вставлять в select через селектор) список найденных элементов в инфоблоке (CIBlockElement::GetList).

Вопросы:
  • Правильно ли я описал логику работы? Как лучше реализовать живой поиск?
  • По какому событию начинать обращение к файлу для поиска?
  • Какой лучше использовать плагин для выборки элементов из select? Где-то видел, что при выборе элемента он добавлялся в список с крестиком (которые как тэги можно удалить по клику). Нужен с поддержкой bootstrap. Посоветуйте пожалуйста!
  • На сколько будет это быстро работать? Кешировать вывод не имеет смысла, т.е. поисковые фразы будет разные всегда. VPS начального уровня, но оптимизированный под Битрикс с PHP 7 (производительность 132 балла).
  • Вопрос задан
  • 760 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
rpsv
@rpsv
делай либо хорошо, либо никак
1. Создайте файл типа "/api/[что-то].list.php"
2. В нем опиши логику работы (CIBlockElement и вот это вот все).
3. В форме делайте запрос к данному файлу

Собственно этого будет достаточно.

Делать какой-то общий сервис, типа "iblock.list" не советую, так как передавать параметры запроса типа "IBLOCK_ID", "ID", ... в открытом виде вообще не круто. Можно конечно предварительно шифровать данные (например, AES), вот только нужен ли вам этот геморрой?

По поводу производительности: делайте поиск по подстроке (обычный LIKE). Если будет слишком долго, то можете создать полнотекстовый индекс по полю ( www.mysql.ru/docs/man/Fulltext_Search.html ) или сделайте обычный индекс и проводите поиск по начальной строке, т.е. LIKE "строка запроса%".
Ответ написан
Комментировать
babarun
@babarun Куратор тега 1С-Битрикс
Безумный план моих идей в руках больных людей
Я бы взял за основу компонент bitrix:search.title и переделал его шаблон.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы