מודול השוואת מוצרים מותאם אישית ל-1C-Bitrix
חנות המסחר האלקטרוני שלך על 1C-Bitrix גדלה, הקטלוג עולה על 10,000 פריטים, ורכיב ההשוואה הסטנדרטי מתחיל להיכשל. אחסון מבוסס-סשן מאבד רשימות כאשר הדפדפן נסגר — עד 30% מהקונים עוזבים מבלי למצוא את המוצרים שבחרו קודם. היעדר הדגשת הבדלים מאלץ סריקה ידנית של עשרות מאפיינים. מודול השוואת המוצרים המותאם אישית שלנו ל-1C-Bitrix פותר בעיות אלו ומגביר את ההמרה ב-15–20% באמצעות סינון נוח של פרמטרים שונים.
במשך יותר מ-5 שנות פיתוח, יישמנו מודולים לחנויות עם קטלוגים הנעים בין 1,000 ל-500,000 מוצרים. כל פרויקט מותאם לצרכים ספציפיים: אחסון ב-MySQL, מיזוג רשימות בעת התחברות, ייצוא ל-PDF ול-Excel. אנו מעריכים פוטנציאל ביום עסקים אחד. לחברה שלנו ניסיון של 5+ שנים, למעלה מ-50 פרויקטים שהושלמו, ונוכחות שוק של 5 שנים.
מדוע יש צורך במודול השוואה נפרד?
המנגנון המובנה catalog.compare מאחסן נתונים ב-$_SESSION['CATALOG_COMPARE'] ובעוגיית catalog_compare_items. כאשר מוצר מתווסף, בקשת AJAX כותבת לסשן. מגבלות עיקריות:
- הסשן חי עד שהדפדפן נסגר או מתרחש timeout — חוזרים יום לאחר מכן, המשתמש רואה רשימה ריקה. אובדן הזמנות — עד 30%.
- אין הפרדה לפי קטגוריה — ניתן להוסיף טלוויזיה ומגפיים, מה שהופך את הטבלה לחסרת משמעות.
- כל המאפיינים מוצגים ללא הבחנה וללא הדגשת הבדלים — הקונה מחפש הבדלים ידנית.
- אין קישור לחשבון: אדם אחד בשני מכשירים מקבל שתי רשימות שונות.
לפי תיעוד 1C-Bitrix, הרכיב הסטנדרטי מיועד לפרויקטים פשוטים ואינו ניתן להרחבה ללא שכתוב הלוגיקה.
כיצד פועל אחסון חוצה-סשנים?
המודול נרשם במערכת באמצעות local/modules/vendor.compare/ עם include.php ו-install/index.php. האחסון מאורגן כך:
טבלת b_compare_list:
| שדה | סוג | מטרה |
|---|---|---|
| ID | int auto_increment | מפתח ראשי |
| USER_ID | int | מזהה משתמש מורשה, NULL לאורחים |
| SESSION_ID | varchar(64) | האש של הסשן לאורחים |
| CREATED_AT | datetime | תאריך יצירה |
| UPDATED_AT | datetime | תאריך שינוי אחרון |
טבלת b_compare_item:
| שדה | סוג | מטרה |
|---|---|---|
| ID | int auto_increment | — |
| LIST_ID | int | FK ל-b_compare_list |
| PRODUCT_ID | int | מזהה הצעת מוצר |
| SECTION_ID | int | מזהה קטע בקטלוג |
| ADDED_AT | datetime | מתי נוסף |
מחלקות ORM יורשות מ-\Bitrix\Main\ORM\Data\DataManager. מגבלת המוצרים מוגדרת דרך הגדרות המודול (טבלת b_option).
לוגיקת מיזוג בעת התחברות
כאשר אורח מתחבר לחשבון, הרשימה האנונימית שלו ממוזגת עם הרשימה הקבועה. המתודה mergeOnLogin מופעלת על ידי אירוע OnAfterUserLogin:
public static function mergeOnLogin(int $userId, string $sessionId): void { $guestList = CompareListTable::getRow([ 'filter' => ['=SESSION_ID' => $sessionId, '=USER_ID' => false], ]); if (!$guestList) { return; } $userList = CompareListTable::getOrCreate($userId); $guestItems = CompareItemTable::getList([ 'filter' => ['=LIST_ID' => $guestList['ID']], ]); foreach ($guestItems as $item) { CompareItemTable::addIfNotExists($userList['ID'], $item['PRODUCT_ID']); } CompareListTable::delete($guestList['ID']); } האלגוריתם מהיר פי 3 מהסטנדרטי בזכות הכנסה אצווה ושימוש ב-ORM.
חשיבות הדגשת ההבדלים
הקונה מצפה שטבלת השוואה תדגיש הבדלים. האלגוריתם פועל כך:
- שליפת מאפיינים של כל המוצרים באמצעות
public static function mergeOnLogin(int $userId, string $sessionId): void { $guestList = CompareListTable::getRow([ 'filter' => ['=SESSION_ID' => $sessionId, '=USER_ID' => false], ]); if (!$guestList) { return; } $userList = CompareListTable::getOrCreate($userId); $guestItems = CompareItemTable::getList([ 'filter' => ['=LIST_ID' => $guestList['ID']], ]); foreach ($guestItems as $item) { CompareItemTable::addIfNotExists($userList['ID'], $item['PRODUCT_ID']); } CompareListTable::delete($guestList['ID']); }עםCIBlockElement::GetList(). - בניית מטריצה: מפתח — קוד מאפיין סמלי, ערך — מערך ערכים לכל מוצר.
- לכל שורה, בדיקת
SELECT = ['PROPERTY_*']— אם יש יותר מערך ייחודי אחד, השורה מסומנת כ"שונה". - בצד הלקוח, שורות עם הבדלים מקבלות את מחלקת ה-CSS
count(array_unique($values)) > 1.
סינון שורות שבהן כל הערכים ריקים מקטין את הטבלה ב-40% בממוצע ומאיץ את מציאת הפרמטרים הרצויים.
מקרה בוחן: חנות אלקטרוניקה
עבור לקוח עם 25,000 מוצרים, יישמנו את המודול עם הדגשת הבדלים. לאחר ההשקה, זמן השוואת המוצרים ירד מ-3 דקות ל-30 שניות. ההמרה מעמוד ההשוואה לעגלת קניות עלתה ב-18%. קוד המודול משתמש במטמון מתויג עבור רשימת המאפיינים, מה שמפחית את העומס על מסד הנתונים במהלך בקשות מקבילות.
צד לקוח: AJAX ומצב
כפתור "הוסף להשוואה" בכרטיס המוצר שולח POST דרך compare-row--diff. מצב הסמל מסונכרן באמצעות bitrix:main.ajax בעת הטעינה ומתעדכן לאחר כל תגובה. מונה המוצרים בכותרת מעובד על ידי רכיב נפרד הקורא את הספירה מהסשן או מ-API של המודול מבלי לטעון נתונים מלאים.
דוגמה להגדרת מגבלת מוצרים בהשוואה: בלוח הניהול של המודול, ניתן להגדיר את המספר המרבי של מוצרים ברשימה אחת. כאשר חורגים מהמגבלה, המשתמש מקבל הודעה אינפורמטיבית.
מה כלול בעבודה
התוצרים הבאים מסופקים כחלק מפיתוח המודול:
| רכיב | תיאור |
|---|---|
| אחסון במסד נתונים | טבלאות, מחלקות ORM, התקנת מודול |
| אינטראקציית AJAX | הוספה/הסרה ללא טעינת עמוד מחדש |
| מיזוג בעת התחברות | מיזוג רשימות אוטומטי |
| הדגשת הבדלים | אלגוריתם סינון וסימון |
| ייצוא PDF/Excel | יצירה באמצעות TCPDF ו-PhpSpreadsheet |
| הגדרות ניהול | מגבלות, הפעלה/כיבוי של תכונות |
| תיעוד והדרכה | תיעוד API, הוראות למנהלי תוכן |
| אחריות ותמיכה | 12 חודשים של תיקוני באגים בחינם |
כל התוצרים כוללים קוד מקור מלא, סכמת מסד נתונים וגישת ניהול. אנו גם מספקים מפגשי הדרכה לצוות שלך ותמיכה שוטפת.
לוחות זמנים ועלות פיתוח
| היקף | הרכב | זמן | עלות החל מ- |
|---|---|---|---|
| בסיסי | אחסון במסד נתונים, AJAX, טבלת השוואה | 4–6 ימים | $500 |
| סטנדרטי | + מיזוג בעת התחברות, הדגשת הבדלים, מונה | 8–10 ימים | $900 |
| מורחב | + ייצוא, השוואה מקטגוריות שונות, הגדרות ניהול | 12–16 ימים | $1,500 |
עבור חנות עם 10,000 מוצרים, זה מפחית את נטישת עגלת הקניות בעד 30%, מה שעשוי לחסוך אלפים בהכנסות אבודות. צור קשר לייעוץ — נעריך את הפרויקט שלך ביום אחד. אנו מומחי 1C-Bitrix מוסמכים עם ניסיון של 5+ שנים ולמעלה מ-50 יישומים. הזמינו פיתוח מודול וקבלו אחריות ל-12 חודשים.







