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

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Розробка модуля FAQ 1С-Бітрікс
Середня
~1-2 тижні
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Розробка модуля 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-pytannya потрібна секція розкривається автоматично через атрибут 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 день.