פיתוח מודול שאלות ותשובות (FAQ) מותאם אישית ל-1C-Bitrix
תארו לעצמכם: קטלוג לקוחות עם 500 שאלות, ה-bitrix:catalog.list הסטנדרטי מציג את כולן ברשימה אחת, אין חיפוש תשובות, ואין אנליטיקה. המשתמש מחפש תשובה בקושי, לא מוצא אותה, ועוזב למתחרה. נתקלנו בפרויקט כזה באחד מהמקרים שלנו — חנות מקוונת עם מאות שאלות על משלוח, תשלום והחזרות. בלוק המידע הסטנדרטי לא עמד בזה: העמוד נטען לאט, העורכים בזבזו שעות על סידור ידני, והמנהלים קיבלו עשרות פניות זהות בצ'אט. פיתחנו מודול ייעודי שפותר את הבעיות האלה. הניסיון שלנו עם Bitrix עולה על 10 שנים ו-20+ פרויקטים מיושמים. המודול משתמש ב-ORM (מיפוי אובייקט-יחסי, ויקיפדיה) לפעולות נתונים ותומך בחיפוש טקסט מלא.
מגבלות בלוק המידע הסטנדרטי לשאלות ותשובות
בלוק מידע עם שדות 'שאלה' ו'תשובה' הוא פתרון מהיר אבל לא ניתן להרחבה. נקודות הכאב העיקריות:
- אין חיפוש טקסט מלא בתשובות — החיפוש של Bitrix מסתכל רק על כותרות העמודים.
- אין קיבוץ לפי קטגוריות עם אקורדיון — כל השאלות מושלכות לרשימה אחת.
- אין אנליטיקה: מה מחפשים, מה לא עוזר.
- אין טופס 'שאל שאלה' ישירות בעמוד.
מודול מותאם אישית סוגר את כל הפערים האלה. הוא כולל מודלי ORM, חיפוש AJAX עם הדגשה, הצבעות, מיקרודאטה ודוחות.
איך אנחנו פותרים את הבעיות האלה
אנחנו בונים את המודול על Bitrix ORM (QuestionTable, CategoryTable, SearchLogTable). זה נותן טיפוסיות קפדנית, אירועים ושאילתות נוחות. החיפוש מיושם דרך AJAX עם סינון לפי %QUESTION% ו-%ANSWER%, ולעומסים גבוהים, אינדקס טקסט מלא ב-MySQL/PostgreSQL.
איך להאיץ חיפוש עם אלפי שאלות?
חיפוש %LIKE% סטנדרטי ב-MySQL מאט עם יותר מ-1000 רשומות. במודול אנחנו מיישמים שתי רמות:
-
חיפוש AJAX מהיר — שאילתה דרך
QuestionTable::getList()עם פילטר%QUESTION%ו-%ANSWER%(עד 1000 רשומות). -
אינדקס טקסט מלא — במעבר ל-PostgreSQL (או MySQL 5.7+), צרו עמודת
fts_vectorעםtsvector, המעודכנת דרך טריגר. חיפוש עםMATCH ... AGAINSTמהיר פי 10 מ-LIKE.
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);
} מה נותן סימון Schema.org?
סימון 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); } של Schema.org (ויקיפדיה: Schema.org) נוצר אוטומטית לכל שאלה. זה מאפשר ל-Yandex ו-Google להציג תשובות ישירות בסניפט, מה שמעלה את שיעור הקליקים. היישום מכניס FAQPage ו-itemscope ל-HTML. שילבנו אותו ברכיב הפלט ללא צורך בהגדרות נוספות. הזמינו את המודול עם מיקרודאטה וקבלו חיזוק בתנועה אורגנית.
מה כלול בפיתוח המודול?
| רכיב | תיאור |
|---|---|
| מודלי ORM | טבלאות לקטגוריות, שאלות, הצבעות, יומן חיפוש |
| חיפוש AJAX | חיפוש בשאלות ותשובות עם הדגשה |
| אקורדיון | קיבוץ לפי קטגוריות עם CSS טהור, ללא JavaScript |
| מונה צפיות | מתעדכן דרך AJAX |
| הצבעה 'עזר/לא עזר' | סטטיסטיקה למיון וזיהוי תשובות בעייתיות |
| טופס 'שאל שאלה' | שומר טיוטות לפרסום |
| סימון Schema.org FAQPage | נוצר אוטומטית לכל השאלות |
| אנליטיקה | דוחות על חיפושים ריקים, שאלות פופולריות, הצבעות שליליות |
| ממשק ניהול | ניהול קטגוריות, שאלות, צפייה בסטטיסטיקה |
לוח זמנים לפיתוח
| שלב | משך |
|---|---|
| טבלאות ORM, מודלי קטגוריה ושאלה | 0.5 יום |
| חיפוש AJAX עם הדגשה | יום אחד |
| רכיב אקורדיון, Schema.org | יום אחד |
| מוני צפיות, הצבעות | 0.5 יום |
| טופס 'שאל שאלה' | 0.5 יום |
| אנליטיקה ודוחות | יום אחד |
| ממשק ניהול | יום אחד |
| בדיקות | 0.5 יום |
| סה"כ | 6 ימי עבודה |
הוספת חיפוש טקסט מלא דרך PostgreSQL itemprop מוסיפה +יום אחד.
דוגמת יישום
כאשר שאלה נפתחת, המונה גדל:
QuestionTable::update($questionId, ['VIEWS' => new \Bitrix\Main\DB\SqlExpression('VIEWS + 1')]); לאחר הקריאה, המשתמש מצביע 'זה עזר' או 'לא עזר'. סטטיסטיקת ההצבעות משמשת למיון (שאלות שימושיות גבוה יותר) ולשכתוב תשובות לא ברורות.
האקורדיון מיושם עם tsvector/QuestionTable::update($questionId, ['VIEWS' => new \Bitrix\Main\DB\SqlExpression('VIEWS + 1')]); — ממוקד על ידי מנועי חיפוש, ללא צורך ב-JavaScript. אם קיים details, הסעיף נפתח אוטומטית.
סימון summary של Schema.org נוצר אוטומטית:
<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> אנליטיקה ודוחות
בהתבסס על ?q=slug-voprosa, אנחנו בונים דוחות:
- שאילתות מובילות ללא תוצאות — מה המשתמשים מחפשים ולא מוצאים.
- השאלות הנצפות ביותר בתקופה.
- שאלות עם אחוז גבוה של 'לא עזר'.
הנתונים האלה עוזרים לעורכים לשפר תוכן.
יישום שלב-אחר-שלב של חיפוש טקסט מלא
- צרו עמודת
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ב-fts_vectorבמתודתfts_vector. - הגדירו רלוונטיות באמצעות משקלי שדות (לדוגמה, משקל שאלה > תשובה).
- בדקו ביצועים עם 10,000 רשומות.
למה לבחור בנו
- התיעוד הרשמי של 1C-Bitrix מאשר את השיטות המומלצות שאנחנו משתמשים בהן.
- 10+ שנות ניסיון בפיתוח Bitrix ו-Bitrix24.
- מומחים מוסמכים — אנחנו מבטיחים איכות קוד ועמידה בלוחות זמנים.
- תהליך שקוף — אתם תמיד רואים את סטטוס הפרויקט.
- תמיכה ל-30 יום לאחר המסירה — הדרכה חינם למנהלים.
העריכו את הפרויקט שלכם — צרו קשר לייעוץ. נחשב את העלות ואת לוח הזמנים. קבלו הצעה אישית היום.

