מודול ביקורות ודירוג מותאם אישית עבור 1C-Bitrix
לעתים קרובות אנו נתקלים בלקוחות שמנסים לאסוף ביקורות באמצעות רכיבים סטנדרטיים כמו bitrix:catalog.element.vote ו-bitrix:forum. התוצאה גרועה: פורום ללא ניהול, דירוגים ללא אימות רכישה, ואין נתונים מובנים עבור Schema.org. מודול ביקורות ראוי הוא סיפור אחר: ביקורות מאומתות, דירוג רב-קריטריוני, ניהול, תגובות מוכר, ומיקרו-נתוני כוכבים מצטברים. הצוות שלנו, עם ניסיון של למעלה מ-10 שנים בפיתוח 1C-Bitrix ו-40+ פרויקטים מוצלחים, מציע מודול מותאם אישית שמכסה את כל הפערים הללו.
למה פתרונות סטנדרטיים לא מספיקים
ל-Bitrix יש רכיב bitrix:catalog.element.vote להצבעות ו-bitrix:forum המקושר לאלמנטים — אלה הם אבני הבניין שבדרך כלל משמשים לביקורות. חסרה להם בדיקה מובנית של הזמנות בתשלום, אין ניהול, אין דירוגים רב-קריטריוניים. מיקרו-נתונים לא נוצרים, מה שמונע ממך את היתרון ה-SEO של תגי כוכבים. המודול שלנו מטפל בכל החסרונות הללו.
איך פועל אימות רכישה
החלק היקר ביותר בביקורת הוא תג "קונה מאומת". אנו בודקים מול b_sale_order:
public function isVerifiedPurchase(int $userId, int $productId): bool {
$order = \Bitrix\Sale\Internals\BasketTable::getList([
'select' => ['ORDER_ID'],
'filter' => [
'=PRODUCT_ID' => $productId,
'=ORDER.USER_ID' => $userId,
'=ORDER.PAYED' => 'Y',
'=ORDER.CANCELED' => 'N',
],
'limit' => 1,
])->fetch();
return (bool)$order;
}בעת יצירת ביקורת, ניתן להעביר public function isVerifiedPurchase(int $userId, int $productId): bool { $order = \Bitrix\Sale\Internals\BasketTable::getList([ 'select' => ['ORDER_ID'], 'filter' => [ '=PRODUCT_ID' => $productId, '=ORDER.USER_ID' => $userId, '=ORDER.PAYED' => 'Y', '=ORDER.CANCELED' => 'N', ], 'limit' => 1, ])->fetch(); return (bool)$order; } במפורש — ואז האימות הוא חד-משמעי. ללא order_id, אנו בודקים כל הזמנה בתשלום שמכילה את המוצר הזה.
ניהול והגנה מפני ספאם
כל הביקורות נוצרות עם סטטוס order_id ונכנסות לתור ניהול. שתי מצבים אפשריים:
- ניהול ידני — מנהל מאשר/דוחה כל ביקורת.
- אישור אוטומטי — ביקורות מקונים מאומתים מתפרסמות אוטומטית; אחרות נכנסות לתור.
סינון ספאם משתמש בהיוריסטיקות פשוטות: קישורים בגוף הטקסט, אותיות גדולות מוגזמות, טקסט כפול, מילות עצירה. ביקורות חשודות מקבלות סטטוס pending.
class SpamDetector {
public function check(string $text): SpamResult {
if (preg_match('/https?:\/\//i', $text)) {
return SpamResult::spam('Ссылки запрещены');
}
if (similar_text($text, $this->getLastReview($text)) > 80) {
return SpamResult::spam('Дубликат');
}
foreach ($this->stopWords as $word) {
if (mb_stripos($text, $word) !== false) {
return SpamResult::suspicious();
}
}
return SpamResult::clean();
}
} דירוג רב-קריטריוני
מוצרים יכולים לכלול מספר קריטריוני דירוג (לדוגמה, "איכות", "תואם לתיאור", "מהירות משלוח"). הדירוג הכולל הוא הממוצע של כל הקריטריונים:
SELECT entity_id, AVG(rr.value) AS avg_rating, COUNT(DISTINCT r.id) AS review_count
FROM b_vendor_review r
JOIN b_vendor_review_rating rr ON rr.review_id = r.id
WHERE r.entity_type = 'product' AND r.status = 'approved'
GROUP BY entity_id;הנתונים המצטברים נשמרים במטמון עם תג spam ומתאפסים כאשר ביקורת חדשה מאושרת.
מיקרו-נתוני Schema.org
להשפעת SEO, דירוגים מצטברים חייבים להופיע במיקרו-נתונים. לפי ויקיפדיה: Schema.org, השתמש ב-class SpamDetector { public function check(string $text): SpamResult { if (preg_match('/https?:\/\//i', $text)) return SpamResult::spam('Ссылки запрещены'); if (similar_text($text, $this->getLastReview($text)) > 80) return SpamResult::spam('Дубликат'); foreach ($this->stopWords as $word) { if (mb_stripos($text, $word) !== false) return SpamResult::suspicious(); } return SpamResult::clean(); } } עבור מוצרים:
<div itemscope itemtype="https://schema.org/Product">
<span itemprop="name">Название товара</span>
<div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
<span itemprop="ratingValue">4.7</span>
<span itemprop="reviewCount">143</span>
</div>
</div>הרכיב SELECT entity_id, AVG(rr.value) AS avg_rating, COUNT(DISTINCT r.id) AS review_count FROM b_vendor_review r JOIN b_vendor_review_rating rr ON rr.review_id = r.id WHERE r.entity_type = 'product' AND r.status = 'approved' GROUP BY entity_id; יוצר את הבלוק הזה מנתוני המטמון. אתרים עם מיקרו-נתונים רואים עד פי 5 יותר קליקים על תגי כוכבים — הוכח בפועל. אתה מקבל כוכבים בתוצאות החיפוש.
הצבעת שימושיות
משתמשים יכולים לסמן ביקורת כ"מועילה" או "לא מועילה". הגנה מפני מניפולציות:
- הצבעה אחת לכל IP ליום.
- משתמשים מחוברים: הצבעה אחת לכל ביקורת לנצח.
- דירוג השימושיות משפיע על סדר הצגת הביקורות.
תהליך הפיתוח
- ניתוח ועיצוב מודל נתונים (טבלאות ORM).
- פיתוח מודול: בלוקי מידע, קריטריונים, אימות.
- ניהול, סינון ספאם, הצבעות.
- אינטגרציה עם מיקרו-נתונים ורכיבי אתר.
- בדיקות והשקה.
השוואה: סטנדרטי מול המודול שלנו
| תכונה | פורום סטנדרטי | המודול שלנו |
|---|---|---|
| אימות רכישה | לא | לפי הזמנה בתשלום |
| ניהול | לא | ידני / אישור אוטומטי |
| דירוג רב-קריטריוני | לא | כן (כל קריטריון) |
| מיקרו-נתוני Schema.org | לא | AggregateRating, Product |
| סינון ספאם | לא | היוריסטיקות, מילות עצירה |
| תגובות מוכר | דרך הפורום | מובנה |
לוח זמנים
| שלב | משך |
|---|---|
| טבלאות ORM, מודל ביקורות | יום אחד |
| אימות רכישה, אינטגרציית מכירות | יום אחד |
| ניהול, סינון ספאם | יומיים |
| דירוג רב-קריטריוני, צבירה | יום אחד |
| מיקרו-נתוני Schema.org | חצי יום |
| הצבעת שימושיות | חצי יום |
| תגובות מוכר, התראות | יום אחד |
| רכיבי אתר | יומיים |
| ממשק ניהול + תור ניהול | יום אחד |
| בדיקות | יום אחד |
סה"כ: 11 ימי עבודה. ייבוא ביקורות מ-Yandex.Market או פלטפורמות אחרות מוסיף 1–2 ימים.
מה כלול
- מודול ביקורות עם טבלאות ORM, רכיבים וממשק ניהול.
- אימות רכישה, ניהול, הגדרת סינון ספאם.
- דירוג רב-קריטריוני ומיקרו-נתוני Schema.org.
- הצבעת שימושיות ותגובות מוכר.
- תיעוד והדרכת צוות.
- תמיכה לאחר ההשקה.
טעויות נפוצות בפיתוח מודול ביקורות
- שימוש בפורום הסטנדרטי ללא שינויים — אין ניהול, אין ספאם.
- התעלמות ממיקרו-נתונים — אובדן יתרון SEO.
- ללא מטמון של דירוג מצטבר — עומס על מסד הנתונים.
- בדיקת אימות שגויה — מאפשרת ביקורות מזויפות.
צור קשר כדי לדון בפרויקט שלך ולקבל הערכה מדויקת. אנו עובדים עם Bitrix למעלה מ-10 שנים ומבטיחים תוצאה איכותית.

