יישום 'פריטים שנצפו' ב-1C-Bitrix

בעיה: אין רכיב מובנה של 'פריטים שנצפו' המשתמש פותח כרטיס מוצר ולא רואה שכבר צפה בו. ההמרה יורדת ב-30–40% כי אין טריגר לעניין חוזר. ב-Bitrix הסטנדרטי אין רכיב מוכן להיסטוריית צפייה. מודול 'התאמה אישית' קיים
השירותים שאנו מציעים
מציג 1 מתוך 1כל 1626 השירותים
יישום 'פריטים שנצפו' ב-1C-Bitrix
פשוט
~1 יום

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1460
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    פיתוח אתר לחברת FIXPER
    1019
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • image_crm_dolbimby_434_0.webp
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1164

בעיה: אין רכיב מובנה של 'מוצרים שנצפו'

המשתמש פותח כרטיס מוצר ולא רואה שכבר צפה בו. ההמרה יורדת ב-30–40% כי אין טריגר לעניין חוזר. ב-Bitrix הסטנדרטי, אין רכיב מוכן להיסטוריית צפייה. מודול ה-"פרסונליזציה" קיים רק בגרסת Enterprise, אבל הפונקציונליות שלו לא מאפשרת ניהול גמיש של נתונים.

אנחנו מיישמים בלוק "מוצרים שנצפו" במפתח מלא: מבחירת שיטת האחסון ועד לבדיקות סופיות עם מטמון. המהנדסים שלנו פרסו למעלה מ-50 פתרונות כאלה לחנויות עם קטלוגים של עד 100,000 מוצרים. עם ניסיון של 10+ שנים ב-Bitrix ו-5+ שנים בשוק (מאז 2015), אנחנו מבטיחים ביצועים גם בפרויקטים בעומס גבוה. עלות הפיתוח נעה בדרך כלל בין $500 ל-$1,500, ומספקת עלייה של 25% בצפיות חוזרות ושיפור של 15% בהמרה. עבור חנות טיפוסית עם 50,000 מוצרים, ההשקעה מחזירה את עצמה תוך 3 חודשים באמצעות שיפור של 15% בהמרה.

הפתרון שלנו מכסה את כל ההיבטים של היסטוריית צפייה ב-1C-Bitrix, מבלוק דינמי Bitrix ועד אינטגרציה עם אנליטיקת Bitrix, ומבטיח פרסונליזציית מטמון Bitrix, היסטוריית מסחר אלקטרוני Bitrix ופיתוח מודול צפייה Bitrix.

גישות אחסון: השוואה

עוגיות, סשנים ומסד נתונים — שלוש אפשרויות עם פשרות שונות. עוגיות מהירות פי 10 ממסד נתונים בזמן טעינה אבל מוגבלות ל-4 KB (~200 מזההי מוצר). סשנים לא דורשים הגדרה אבל מתאפסים בסגירת הדפדפן. מסד נתונים מספק אנליטיקה מלאה אבל מוסיף עומס לשרת. אנחנו משלבים: עוגיות לתצוגה מיידית, כתיבה אסינכרונית למסד נתונים לדוחות. במקרה אחד, הגישה ההיברידית הזו השיגה שיעור פגיעות מטמון של 95% והפחיתה את עומס השרת ב-15%.

קריטריון עוגיות סשן מסד נתונים
מהירות טעינה <10 ms <10 ms 50–100 ms
קיבולת אחסון עד 4 KB עד כמה MB בלתי מוגבלת
משך שימור 30 ימים עד סוף הסשן קבוע
תמיכה באנליטיקה לא לא כן

יתרונות טעינת בלוק ב-AJAX

אם כרטיס המוצר במטמון (וכך צריך להיות), בלוק סטטי של "מוצרים שנצפו" יהיה זהה לכולם. בקשת AJAX לאחר רינדור הדף טוענת נתונים אישיים מבלי לנקות את המטמון. בקשת JavaScript ו-XML אסינכרונית מביאה מטען JSON מנקודת קצה ייעודית, עם זמן תגובה של בדרך כלל <50 ms. זמן ביצוע הרכיב הוא מתחת ל-10 ms. טכניקה זו שומרת על רינדור בצד השרת ומניפולציית DOM לתוכן מותאם אישית.

בתיעוד הרשמי של 1C-Bitrix, מתואר המנגנון לטעינת רכיבים אסינכרונית באמצעות AJAX.

תרחיש בלוק סטטי בלוק AJAX
מטמון דף ניקוי מלא בכל צפייה נשמר
עומס שרת מינימלי קל (בקשת RESTful אחת)
פרסונליזציה לא כן
פרטים טכניים של הגדרת מטמון

כדי להבטיח ביצועים מקסימליים, הרכיב local:catalog.viewed נרשם ב-epilog.php עם מטמון מושבת (הרכיב תמיד דינמי). דף המוצר נשמר במטמון באמצעות מנגנונים סטנדרטיים, והבלוק נטען באמצעות בקשה נפרדת לבקר שקורא עוגיות ומחזיר קטע HTML.

הבטחת אי-הכללת המוצר הנוכחי

בעת יצירת רשימת המזהים בדף המוצר, אנחנו מסירים את הפריט הנוכחי המועבר דרך ELEMENT_ID. זה מונע כפילויות: המשתמש לא רואה את אותו מוצר שהוא כבר צופה בו.

שילוב עוגיות ומסד נתונים לביצועים אופטימליים

גישה היברידית מספקת את הביצועים והאנליטיקה הטובים ביותר. עוגיות מאחסנות את 20 הצפיות האחרונות — מספיק לתצוגה מהירה. בקשת רקע אסינכרונית כותבת נתונים למסד הנתונים, שם הם משמשים לדוחות. לדוגמה, בפרויקט עם קטלוג של 50,000 מוצרים, זמן טעינת הבלוק היה 20 ms, וכתיבת מסד הנתונים התרחשה ללא חסימת תגובת המשתמש. זה גם מאפשר פרסונליזציית קטלוג וניתוח היסטוריית מסחר אלקטרוני, ומהווה בסיס לפיתוח מודול צפייה מתקדם של Bitrix.

יישום: רכיב וכתיבת עוגיות

כתיבת עוגיות בעת צפייה במוצר

הוסף JavaScript לתבנית catalog.element:

(function() { var elementId = <?= (int)$arResult['ID'] ?>; var cookieName = 'bx_viewed'; var maxItems = 20; var viewed = []; try { var raw = document.cookie.match(/bx_viewed=([^;]+)/); if (raw) viewed = JSON.parse(decodeURIComponent(raw[1])); } catch(e) {} viewed = viewed.filter(function(id) { return id !== elementId; }); viewed.unshift(elementId); if (viewed.length > maxItems) viewed = viewed.slice(0, maxItems); var expires = new Date(Date.now() + 30 * 24 * 3600 * 1000).toUTCString(); document.cookie = cookieName + '=' + encodeURIComponent(JSON.stringify(viewed)) + '; expires=' + expires + '; path=/; SameSite=Lax'; })(); 

לאחר מכן, העוגיה מכילה את המזהים של 20 המוצרים האחרונים שנצפו. משך חיים — 30 ימים.

רכיב תצוגה להיסטוריה

רכיב מותאם אישית (function() { var elementId = <?= (int)$arResult['ID'] ?>; var cookieName = 'bx_viewed'; var maxItems = 20; var viewed = []; try { var raw = document.cookie.match(/bx_viewed=([^;]+)/); if (raw) viewed = JSON.parse(decodeURIComponent(raw[1])); } catch(e) {} viewed = viewed.filter(function(id) { return id !== elementId; }); viewed.unshift(elementId); if (viewed.length > maxItems) viewed = viewed.slice(0, maxItems); var expires = new Date(Date.now() + 30 * 24 * 3600 * 1000).toUTCString(); document.cookie = cookieName + '=' + encodeURIComponent(JSON.stringify(viewed)) + '; expires=' + expires + '; path=/; SameSite=Lax'; })(); קורא את העוגיה בשרת וטוען פריטים:

// component.php $viewed = []; if (!empty($_COOKIE['bx_viewed'])) { $raw = json_decode($_COOKIE['bx_viewed'], true); if (is_array($raw)) { $viewed = array_map('intval', array_slice($raw, 0, 10)); } } if (empty($viewed)) { $this->AbortResultCache(); return; } $res = \CIBlockElement::GetList( [], ['ID' => $viewed, 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'], false, ['nTopCount' => 10], ['ID', 'NAME', 'PREVIEW_PICTURE', 'DETAIL_PAGE_URL', 'CATALOG_PRICE_1'] ); $items = []; while ($el = $res->GetNextElement()) { $fields = $el->GetFields(); $items[$fields['ID']] = $fields; } // Восстановить порядок просмотров $arResult = array_filter(array_map(fn($id) => $items[$id] ?? null, $viewed)); 

הרכיב צריך לעבוד עם מטמון המקושר למשתמש (או ללא מטמון לפרסונליזציה).

בקר AJAX לפרסונליזציה

כאשר העוגיה מתקבלת בשרת, אנחנו או מכניסים את הנתונים לתבנית או מחזירים קטע HTML דרך AJAX. הגישה השנייה מאפשרת לשמור את כל הדף במטמון ללא חריגים. כרטיסי מוצר נשמרים במטמון ברמת nginx — הבלוק נטען בנפרד.

איך אנחנו מגדירים בלוקים דינמיים במפתח מלא

דוגמה: עבור חנות מקוונת לחלקי רכב עם 30,000 מוצרים, יישמנו בלוק באמצעות עוגיות + מסד נתונים לאנליטיקה. טעינת AJAX שמרה על מטמון הכרטיס, ואירוע כתיבת מסד הנתונים סיפק דוחות על חזרות. ההמרה לצפייה חוזרת עלתה ב-25%. מקרה נוסף: חנות אלקטרוניקה עם 80,000 מוצרים — הפתרון ההיברידי הפחית את עומס השרת ב-15%.

מה כלול בעבודה

  • ניתוח ארכיטקטורת קטלוג: מספר מוצרים, מבנה בלוק מידע.
  • בחירת שיטת אחסון (עוגיות/מסד נתונים/היברידי).
  • יישום רכיב local:catalog.viewed עם מטמון.
  • אינטגרציה עם אנליטיקה: כתיבה למסד נתונים, אירוע // component.php $viewed = []; if (!empty($_COOKIE['bx_viewed'])) { $raw = json_decode($_COOKIE['bx_viewed'], true); if (is_array($raw)) { $viewed = array_map('intval', array_slice($raw, 0, 10)); } } if (empty($viewed)) { $this->AbortResultCache(); return; } $res = \CIBlockElement::GetList( [], ['ID' => $viewed, 'IBLOCK_ID' => CATALOG_IBLOCK_ID, 'ACTIVE' => 'Y'], false, ['nTopCount' => 10], ['ID', 'NAME', 'PREVIEW_PICTURE', 'DETAIL_PAGE_URL', 'CATALOG_PRICE_1'] ); $items = []; while ($el = $res->GetNextElement()) { $fields = $el->GetFields(); $items[$fields['ID']] = $fields; } // Восстановить порядок просмотров $arResult = array_filter(array_map(fn($id) => $items[$id] ?? null, $viewed)); .
  • הגדרת טעינת AJAX לבלוקים אישיים.
  • בדיקת עומס: הבלוק לא צריך להאט את הדף.
  • תיעוד והעברת קוד.

תהליך עבודה

  1. אנליטיקה — אנחנו חוקרים את סכמת בלוק המידע, מספר המוצרים, תרחישים.
  2. עיצוב — בוחרים אחסון, מתכננים מבנה מסד נתונים (אם נדרש).
  3. פיתוח — כותבים רכיב, לוגיקת קריאה/כתיבה, בקר AJAX.
  4. בדיקות — בודקים עבור משתמשים מחוברים ואנונימיים, מטמון.
  5. פריסה — מעלים לסביבת production, מנטרים לוגים.

לוחות זמנים — מ-3 עד 7 ימי עסקים. צור קשר להערכה חינמית של הפרויקט שלך — נכין הצעה תוך יום עסקים אחד. קבל ייעוץ — נראה איך זה עובד על הפרויקט שלך.

אנחנו מבטיחים סדר צפייה נכון, ללא כפילויות וביצועים.