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

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

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

База знань відрізняється від FAQ глибиною структури: це ієрархія розділів, повноцінні статті з форматуванням, пошуком і версіонуванням. FAQ — плоский список відповідей на конкретні питання. База знань — це документація, посібники, інструкції з перехресними посиланнями. Будувати її на інфоблоках можна, але розділ «Історія змін», «Версія для друку», «Оцінка корисності» та інтеграція з підтримкою — це вже окрема розробка.

Модель даних

Модуль vendor.knowledgebase:

  • b_vendor_kb_section — розділи: id, parent_id, name, slug, description, sort, icon, access_level (public/registered/group), is_active
  • b_vendor_kb_article — статті: id, section_id, title, slug, body (HTML/Markdown), excerpt, author_id, status (draft/review/published), views, helpful_count, not_helpful_count, created_at, updated_at, published_at
  • b_vendor_kb_revision — версії статей: id, article_id, body, author_id, created_at, change_summary
  • b_vendor_kb_attachment — файли до статей: id, article_id, file_id, name
  • b_vendor_kb_tag і b_vendor_kb_article_tag — теги та зв'язки

Версіонування статей

При кожному збереженні створюється нова ревізія:

class ArticleService
{
    public function update(int $articleId, array $fields, int $editorId, string $changeSummary = ''): void
    {
        $current = ArticleTable::getById($articleId)->fetch();

        // Зберігаємо попередню версію
        RevisionTable::add([
            'ARTICLE_ID'     => $articleId,
            'BODY'           => $current['BODY'],
            'AUTHOR_ID'      => $editorId,
            'CHANGE_SUMMARY' => $changeSummary ?: 'Оновлення',
            'CREATED_AT'     => new DateTime(),
        ]);

        // Оновлюємо основний запис
        ArticleTable::update($articleId, array_merge($fields, [
            'UPDATED_AT' => new DateTime(),
        ]));
    }

    public function rollback(int $articleId, int $revisionId): void
    {
        $revision = RevisionTable::getById($revisionId)->fetch();
        $this->update($articleId, ['BODY' => $revision['BODY']], 0, 'Відкат до ревізії #' . $revisionId);
    }
}

Історія версій зберігається безстроково. Для економії місця старі ревізії можна архівувати агентом (залишати N останніх + щомісячні знімки).

Ієрархія розділів та навігація

Розділи будують дерево необмеженої вкладеності (суміжні списки, parent_id). Breadcrumbs і бічна навігація будуються рекурсивно по дереву. Для продуктивності дерево цілком кешується з тегом kb_tree:

$tree = \Vendor\KB\TreeBuilder::getTree(); // з кешу або з БД
// При зміні будь-якого розділу: Cache::invalidateTag('kb_tree')

Повнотекстовий пошук

Пошук по заголовках і тілу статей через PostgreSQL:

-- При публікації/оновленні статті
UPDATE b_vendor_kb_article
SET fts_vector = to_tsvector('ukrainian', title || ' ' || strip_tags(body))
WHERE id = :id;

-- Пошуковий запит
SELECT id, title, ts_headline('ukrainian', body, q) AS excerpt
FROM b_vendor_kb_article, to_tsquery('ukrainian', :query) q
WHERE fts_vector @@ q AND status = 'published'
ORDER BY ts_rank(fts_vector, q) DESC
LIMIT 20;

Результат видається з автоматично сформованим excerpt з підсвіченням збігів (ts_headline).

Розмежування доступу

Розділ access_level:

  • public — доступно всім
  • registered — тільки авторизованим користувачам
  • group — тільки користувачам із зазначеної групи Бітрікс (поле access_groups у розділі)

Спадкування: якщо розділ обмежено, всі його дочірні розділи і статті автоматично обмежені. Перевірка при відображенні — у middleware компонента.

Версія для друку та PDF

Компонент vendor:kb.article.print віддає сторінку без навігації, оптимізовану для друку. Генерація PDF — через mPDF, посилання «Завантажити PDF» додається до кожної статті. PDF кешується у файловій системі і скидається при оновленні статті.

Інтеграція з тікет-системою

При перегляді статті — блок «Не знайшли відповідь? Відкрити тікет». Тікет створюється в vendor.tickets (модуль тікет-системи) з передзаповненим полем «посилання на статтю KB». Це дозволяє підтримці бачити контекст звернення.

Терміни розробки

Етап Термін
ORM-таблиці, ієрархія розділів 1 день
Версіонування статей, відкат 2 дні
Повнотекстовий пошук (PostgreSQL tsvector) 2 дні
Розмежування доступу 1 день
Версія для друку, PDF 1 день
Компоненти сайту (список, стаття, пошук) 2 дні
Адміністративний інтерфейс 2 дні
Тестування 1 день

Разом: 12 робочих днів. Інтеграція з тікет-системою — +1 день.