מודול בסיס ידע מותאם אישית ל-1C-Bitrix: ניהול גרסאות וחיפוש
כאשר בלוקי מידע נכשלים בטיפול בתיעוד
בסיס ידע גדל לעיתים קרובות מתוך כאוס: בלוקי מידע עם עשרות שדות, גרסאות שאבדו, חיפוש שלא מוצא שום דבר שימושי. עובדים מבזבזים עד 30% מזמן העבודה שלהם על חיפוש מידע — זהו הפסד ישיר. חברה פנתה אלינו לאחרונה: 5,000 מאמרים בבלוקי מידע, חיפוש באמצעות 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); } } לקח 30 שניות, גרסאות לא נשמרו, והגישה הוגבלה למנהלים בלבד. לאחר פריסת המודול, זמן החיפוש ירד ל-0.2 שניות, ועובדים מפרסמים כעת מאמרים בעצמם עם בקרת שינויים. שיעור תוצאות החיפוש הלא מספקות ירד ב-60%. לקוח אחר נתקל בבעיה: בעת אינטגרציה עם 1C באמצעות CommerceML, הנתונים עודכנו רק פעם ביום, והצוות עבד עם הוראות מיושנות. לאחר מעבר למודול ייעודי, הסנכרון הפך לכמעט מיידי, וזמן החיפוש אחר מידע קוצץ ב-40% נוספים. כאשר באתר שלך יש מאות הוראות ועובדים מבלים שעות בחיפוש, זהו אות ברור: אתה צריך מודול עם ניהול גרסאות, חיפוש טקסט מלא ובקרת גישה. אנו עוסקים בפיתוח Bitrix כבר למעלה מ-10 שנים ומבטיחים את איכותו של כל מודול. במאמר זה נסביר כיצד המודול פועל מבפנים ונראה מספרים אמיתיים. צור קשר לקבלת הערכת עלות ולוחות זמנים.
אילו בעיות פותר מודול בסיס ידע ייעודי?
בלוקי מידע סטנדרטיים חסרים:
- היסטוריית שינויים — אי אפשר לחזור לגרסה קודמת;
- חיפוש טקסט מלא — חיפוש
UPDATE b_vendor_kb_article SET fts_vector = to_tsvector('russian', title || ' ' || strip_tags(body)) WHERE id = :id; SELECT id, title, ts_headline('russian', body, q) AS excerpt FROM b_vendor_kb_article, to_tsquery('russian', :query) q WHERE fts_vector @@ q AND status = 'published' ORDER BY ts_rank(fts_vector, q) DESC LIMIT 20;איטי ולא מדויק; - בקרת גישה — קשה להסתיר קטעים ממשתמשים לא מורשים;
- אינטגרציית תמיכה — לקוח לא יכול ליצור כרטיס פנייה ישירות מתוך מאמר.
המודול Vendor.KnowledgeBase פותר את כל זה. כך הוא עובד.
כיצד אנו בונים את המודול: מחסנית טכנולוגית וארכיטקטורה
המודול בנוי על Bitrix ORM (טבלאות b_vendor_kb_*) תוך שימוש ב-PostgreSQL לחיפוש טקסט מלא. הוא תומך גם באינטגרציה עם 1C באמצעות CommerceML לסנכרון מאמרים עם מערכת הנהלת החשבונות. מחסנית טכנולוגית: PHP 8.1, Bitrix ORM, PostgreSQL 15, Redis לקאש. מידע נוסף על Bitrix ORM בתיעוד הרשמי.
מודל נתונים:
-
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— תגיות
כיצד מאורגן ניהול גרסאות מאמרים?
כל שמירה יוצרת גרסה חדשה. קוד השירות הוא ב-PHP 8.1 ומעלה:
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 האחרונות + תמונות מצב חודשיות). מידע נוסף על ניהול גרסאות: ויקיפדיה: ניהול גרסאות תוכנה.
כיצד פועל חיפוש טקסט מלא עם PostgreSQL?
החיפוש בכותרות ובגופי המאמרים מבוסס על וקטורי tsvector. PostgreSQL tsvector מהיר פי 3 מחיפוש LIKE רגיל על 10,000 מאמרים. מידע נוסף על הטכנולוגיה: חיפוש טקסט מלא בויקיפדיה. דוגמת SQL:
UPDATE b_vendor_kb_article SET fts_vector = to_tsvector('russian', title || ' ' || strip_tags(body)) WHERE id = :id;
SELECT id, title, ts_headline('russian', body, q) AS excerpt FROM b_vendor_kb_article, to_tsquery('russian', :query) q WHERE fts_vector @@ q AND status = 'published' ORDER BY ts_rank(fts_vector, q) DESC LIMIT 20;התוצאה כוללת התאמות מודגשות ודירוג. ה-tsvector נבנה בעת שמירת מאמר באמצעות טריגר במסד הנתונים, וסוכן אסינכרוני מעדכן את האינדקס פעם בדקה. חיפוש על פני 10,000 מאמרים אורך פחות מ-0.1 שניות.
מה מספקת בקרת הגישה?
לכל קטע יש רמת גישה:
-
public— לכולם. -
registered— רק למשתמשים מאומתים. -
group— רק למשתמשים בקבוצות Bitrix מוגדרות.
הירושה פועלת על העיקרון: אם קטע אב מוסתר, כל קטעי המשנה מקבלים אוטומטית את אותה רמה. הבדיקה מתבצעת ב-middleware של הרכיב. זה מבטיח שמסמכים סודיים לא נחשפים לאנשים לא מורשים.
גרסת הדפסה ו-PDF
הרכיב vendor:kb.article.print מציג דף ללא ניווט המותאם להדפסה. PDF נוצר באמצעות mPDF, נשמר בקאש במערכת הקבצים, ומושמד כאשר המאמר מתעדכן.
תהליך פיתוח המודול
רשימת בדיקה של השלבים:
- ניתוח דרישות ועיצוב סכמת גישה.
- עיצוב טבלאות ORM.
- יישום שכבת השירות (ניהול גרסאות, חיפוש).
- פיתוח הממשק הניהולי.
- יצירת רכיבי אתר.
- אינטגרציה עם מערכת כרטיסי פנייה (אופציונלי).
- בדיקות על נתונים אמיתיים.
- פריסה והדרכה.
מה כלול: תוצרים
| שלב | תוצאה |
|---|---|
| עיצוב | סכמת מסד נתונים, API, מבנה רכיבים |
| פיתוח | מודול מלא עם ORM, מיגרציות, סוכנים |
| ממשק ניהולי | ניהול קטעים, מאמרים, גרסאות |
| רכיבי אתר | רשימה, מאמר, חיפוש, הדפסה |
| אינטגרציית מערכת כרטיסים | כפתור "פתח כרטיס" במאמר |
| תיעוד | תיאור מודול, מדריך מנהל |
| הדרכה | הדגמה מקוונת של שעתיים לצוות שלך |
| תמיכה טכנית | 3 חודשים לאחר ההשקה |
השוואה בין KB מותאם אישית לפתרונות מוכנים
| קריטריון | מודול מותאם אישית | פתרונות SaaS (Confluence, HelpDesk) |
|---|---|---|
| אינטגרציה עם 1C-Bitrix | מלאה | חלקית או דרך API |
| בקרת גישה לפי קבוצות Bitrix | כן | לא |
| ניהול גרסאות | מלא | מוגבל |
| התאמה אישית | בלתי מוגבלת | מוגבלת על ידי הספק |
מודול מותאם אישית מספק אינטגרציה חלקה וגמישות — זה משתלם בקנה מידה גדול עם אלפי מאמרים. בקטלוג בדיקה של 10,000 מאמרים, המודול הראה זמן חיפוש נמוך פי 3 בהשוואה לפתרון בלוקי מידע. הפרויקט מחזיר את עצמו תוך 6–12 חודשים.
לוחות זמנים משוערים
| שלב | משך |
|---|---|
| טבלאות ORM, היררכיית קטעים | יום אחד |
| ניהול גרסאות מאמרים, חזרה לגרסה | יומיים |
| חיפוש טקסט מלא (PostgreSQL tsvector) | יומיים |
| בקרת גישה | יום אחד |
| גרסת הדפסה, PDF | יום אחד |
| רכיבי אתר (רשימה, מאמר, חיפוש) | יומיים |
| ממשק ניהולי | יומיים |
| בדיקות | יום אחד |
| סה"כ | 12 ימי עבודה |
| אינטגרציית מערכת כרטיסים | +יום אחד |
העלות מחושבת באופן פרטני לפי מורכבות. בקש ייעוץ — ניישם את בסיס הידע שלך תוך שבועיים.

