Разработка модуля FAQ 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Разработка модуля FAQ 1С-Битрикс
Средняя
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1177
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    811
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Разработка на базе Битрикс, Битрикс24, 1С для компании Development of an Online Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Разработка модуля FAQ 1С-Битрикс

FAQ на Битрикс чаще всего делают через инфоблок с двумя полями — вопрос и ответ — и компонент bitrix:catalog.list в упрощённой версии. Проблемы начинаются, когда вопросов становится больше 50: нет полнотекстового поиска по ответам, нет группировки по разделам с аккордеоном, нет аналитики по тому, какие вопросы смотрят чаще, нет возможности задать вопрос прямо из FAQ-страницы. Специализированный модуль решает каждую из этих задач.

Модель данных

Модуль vendor.faq:

  • b_vendor_faq_category — категории: id, name, slug, sort, is_active, questions_count (денормализованный счётчик)
  • b_vendor_faq_question — вопросы: id, category_id, question, answer (HTML), slug, sort, views, is_active, is_featured, created_at, updated_at
  • b_vendor_faq_vote — голоса «помогло/не помогло»: id, question_id, user_id, ip, value, created_at
  • b_vendor_faq_search_log — лог поиска: id, query, results_count, created_at

Полнотекстовый поиск

Стандартный поиск Битрикс через bitrix:search.title индексирует страницы, а не записи. Для FAQ нужен мгновенный поиск по вопросам и ответам без перезагрузки страницы:

// AJAX-эндпоинт поиска
public function search(string $query): array
{
    $query = mb_strtolower(trim($query));

    // Логируем запрос для аналитики
    SearchLogTable::add(['QUERY' => $query]);

    $result = QuestionTable::getList([
        'select' => ['ID', 'QUESTION', 'ANSWER', 'CATEGORY_ID'],
        'filter' => [
            'IS_ACTIVE' => 'Y',
            [
                'LOGIC' => 'OR',
                '%QUESTION' => $query,
                '%ANSWER'   => $query,
            ],
        ],
        'limit' => 10,
        'order' => ['IS_FEATURED' => 'DESC', 'VIEWS' => 'DESC'],
    ])->fetchAll();

    // Подсвечиваем совпадения в результатах
    return array_map(fn($q) => $this->highlight($q, $query), $result);
}

Для крупных баз (1000+ вопросов) поиск через %LIKE% в PostgreSQL заменяется на полнотекстовый индекс (tsvector). Колонка fts_vector обновляется триггером при изменении вопроса или ответа.

Счётчик просмотров и рейтинг

При открытии вопроса счётчик инкрементируется через AJAX:

QuestionTable::update($questionId, ['VIEWS' => new \Bitrix\Main\DB\SqlExpression('VIEWS + 1')]);

После прочтения пользователь может оценить ответ: «Это помогло» / «Не помогло». Статистика голосов используется для двух целей: сортировка (полезные вопросы выше) и выявление проблемных ответов (много отрицательных — нужно переписать).

Структура аккордеона

Компонент vendor:faq.list рендерит вопросы с группировкой по категориям. Аккордеон реализован на CSS (:details/:summary) без JavaScript — работает без JS, индексируется без проблем. При наличии GET-параметра ?q=slug-voprosa нужная секция раскрывается автоматически через атрибут open.

Форма «Задать вопрос»

Если пользователь не нашёл ответ в поиске, форма предлагает задать вопрос. Вопрос сохраняется в b_vendor_feedback_submission (интеграция с модулем обратной связи) или напрямую в b_vendor_faq_question со статусом draft для последующей публикации. Администратор может опубликовать его в FAQ, если вопрос интересен широкой аудитории.

Schema.org FAQPage

Для продвижения в поиске важна микроразметка:

<div itemscope itemtype="https://schema.org/FAQPage">
  <div itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
    <h3 itemprop="name">Как оформить возврат?</h3>
    <div itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
      <div itemprop="text">Для оформления возврата...</div>
    </div>
  </div>
</div>

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

Аналитика

Из b_vendor_faq_search_log строится отчёт:

  • Топ поисковых запросов без результатов — что ищут, но не находят
  • Популярные вопросы по просмотрам за период
  • Вопросы с высоким процентом «не помогло»

Эти данные помогают редактору понять, какие вопросы добавить и какие ответы переписать.

Сроки разработки

Этап Срок
ORM-таблицы, модель категорий и вопросов 0.5 дня
AJAX-поиск с подсветкой 1 день
Аккордеон-компонент, Schema.org 1 день
Счётчики просмотров, голосование 0.5 дня
Форма «задать вопрос» 0.5 дня
Аналитика и отчёты 1 день
Административный интерфейс 1 день
Тестирование 0.5 дня

Итого: 6 рабочих дней. Подключение полнотекстового поиска через PostgreSQL tsvector — +1 день.