שעון ספירה לאחור למבצעים ב-1C-Bitrix: פיתוח ואינטגרציה

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

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

שאלות נפוצות

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

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1466
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1019
  • פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    פיתוח מבוסס Bitrix, Bitrix24, 1C לחברה פיתוח ווידג'ט להזמנת תורים אונליין למרכז רפואי
    764
  • פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    פיתוח על בסיס 1C Enterprise עבור MIRSANBEL
    882
  • פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    פיתוח אתר על CRM Bitrix24 עבור DOLBIMBY
    811
  • פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    פיתוח על בסיס Bitrix24 עבור חברת TECHNOTORGKOMPLEKS
    1167

אנו מפתחים טיימר ספירה לאחור מותאם אישית ויעיל למבצעים ב-1C-Bitrix שמגביר את ההמרה ב-15–25%. תרחיש טיפוסי: בכרטיס מוצר עם הנחה מוגבלת, יש להציג את הזמן שנותר עד לסיום המבצע. מנגנון ההנחות המובנה של Bitrix קובע תקופת תוקף, אך ספירה לאחור חזותית בצד הלקוח דורשת יישום נפרד באמצעות רכיבים ו-JavaScript. בפרויקט אחד, שילבנו טיימר עבור 250 מוצרים ברשימה — ללא מצב אצווה, העמוד נטען תוך 15 שניות. לאחר אופטימיזציה — 0.3 שניות. גישה זו חוסכת עד 40% מזמן הטעינה. טיימר מיושם כראוי מגביר את ההמרה בשל אפקט הדחיפות והלחץ הפסיכולוגי של זמינות מוגבלת של המוצר. אנו מיישמים גישה מקיפה לסנכרון שרת-לקוח, אופטימיזציית ביצועים ואינטגרציה עם מערכת Bitrix.

מקור נתונים: היכן לקבל את תאריך הסיום

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

  • הנחות קטלוג — טבלה b_catalog_discount, שדות ACTIVE_FROM ו-ACTIVE_TO. נשלפים באמצעות \Bitrix\Catalog\DiscountTable::getList() עם פילטר ACTIVE = Y ו-ACTIVE_TO > NOW().
  • כללי סל — טבלה b_sale_discount, שדות דומים. API: \Bitrix\Sale\Internals\DiscountTable::getList().
  • מאפיין מוצר — ניתן ליצור מאפיין אינפובלוק PROMO_END_DATE מסוג "תאריך/שעה" ולמלא אותו ידנית או אוטומטית כאשר מוצר מקושר למבצע.

בפועל, אנו ממליצים לשלב את כל הגישות: להנחות פשוטות על מוצר אחד או שניים בקטלוג, השתמשו במאפיין מוצר; לכללי סל מערכתיים, השתמשו בטבלת b_sale_discount. זה מבטיח גמישות מלאה ומפשט את ניהול המבצעים עבור מנהלים.

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

ארכיטקטורת רכיב

אנו יוצרים רכיב מותאם אישית local:sale.countdown ב-/local/components/local/sale.countdown/ עם תמיכה מלאה במטמון. המבנה הסטנדרטי:

  • class.php — לוגיקת בחירת נתונים.
  • templates/.default/template.php — סימון HTML.
  • templates/.default/script.js — לוגיקת ספירה לאחור ב-JavaScript.
  • .parameters.php — פרמטרי רכיב הניתנים להגדרה.

פרמטרי רכיב:

פרמטר סוג תיאור
SOURCE_TYPE רשימה מקור: catalog_discount, sale_discount, iblock_property
DISCOUNT_ID int מזהה הנחה (לקטלוג/מכירה)
IBLOCK_ID int מזהה אינפובלוק (למאפיין מוצר)
ELEMENT_ID int מזהה אלמנט (למאפיין מוצר)
PROPERTY_CODE מחרוזת קוד מאפיין עם תאריך סיום
DISPLAY_FORMAT רשימה פורמט: ימים+שעות+דקות+שניות או שעות+דקות+שניות
ACTION_ON_EXPIRE רשימה פעולה עם תום הזמן: הסתר / הצג הודעה
CACHE_TIME int זמן מטמון

ב-class.php, הרכיב שולף את תאריך הסיום מהמקור הנבחר ומעביר חותמת זמן לתבנית:

$this->arResult['TIMESTAMP_END'] = (new \Bitrix\Main\Type\DateTime($endDate))->getTimestamp(); 

מדוע הטיימר חייב להיות מקושר להנחות אמיתיות?

אם התאריך מקודד קשיח בתבנית, הטיימר לא יתעדכן כאשר המבצע משתנה בלוח הניהול. הרכיב שולף דינמית ACTIVE_TO ממסד הנתונים, משתמש במטמון מתויג, ומתאפס כאשר ההנחה משתנה באמצעות מטפלי אירועים. שגיאת סנכרון יכולה לעלות עד $900–1.3k ברווח אבוד עקב מבצע שגוי.

כיצד לסנכרן זמן בין לקוח לשרת?

שעוני לקוח עשויים להיות שונים משעוני שרת — זה קריטי עבור טיימר. פתרון: השרת מעביר לא רק $this->arResult['TIMESTAMP_END'] = (new \Bitrix\Main\Type\DateTime($endDate))->getTimestamp(); , אלא גם TIMESTAMP_END — זמן השרת הנוכחי. JavaScript מחשב את ההפרש ומתקן את הספירה לאחור:

const serverNow = parseInt(container.dataset.serverTime); const clientNow = Math.floor(Date.now() / 1000); const drift = serverNow - clientNow; const remaining = endTime - (Math.floor(Date.now() / 1000) + drift); 

עדכון ה-DOM כל שנייה באמצעות TIMESTAMP_SERVER עובד. אך עבור מספר טיימרים בעמוד (רשימת מוצרים עם מבצעים), עדיף לולאת const serverNow = parseInt(container.dataset.serverTime); const clientNow = Math.floor(Date.now() / 1000); const drift = serverNow - clientNow; const remaining = endTime - (Math.floor(Date.now() / 1000) + drift); אחת שמעדכנת את כל הטיימרים במעבר אחד. עצה מעשית: הסטייה מגיעה לעיתים קרובות ל-5-7 שניות במחשבים חלשים, לכן תמיד יש להחיל תיקון, גם אם השרת והלקוח בדרך כלל מסונכרנים.

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

אינטגרציה עם מטמון מרוכב

המטמון המרוכב של Bitrix (autocomposite) מאחסן את כל עמוד ה-HTML. טיימר עם חותמת זמן שרת ב-HTML שובר את המטמון: כל כניסה הופכת לייחודית.

פתרון — הצב את בלוק הטיימר באזור דינמי. ב-requestAnimationFrame:

$frame = new \Bitrix\Main\Page\Frame('countdown_' . $this->arParams['DISCOUNT_ID']); $frame->begin(); // HTML таймера $frame->end(); 

בתוך האזור הדינמי, ה-HTML מתעדכן בכל בקשה, בעוד שאר העמוד מוגש מהמטמון.

חלופה — אל תפלטו את חותמת הזמן ב-HTML כלל. במקום זאת, אחסנו אותה בנקודת קצה נפרדת (remaining <= 0) ש-JavaScript מבקש פעם אחת בטעינת העמוד. העמוד נשמר במטמון מלא; נתוני הטיימר נטענים בנפרד.

דוגמה למטפל איפוס מטמון הנחות
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'catalog', 'OnAfterCatalogDiscountUpdate', function ($discountId) { \Bitrix\Main\Data\Cache::clearCacheByTag('catalog_discount_' . $discountId); } ); 

קוד זה מנקה את המטמון המתויג כאשר הנחה משתנה, ומבטיח שהטיימר תמיד מעודכן.

כיצד פועל מצב אצווה עבור רשימות מוצרים?

משימה נפרדת היא הצגת טיימרים בעמוד קטלוג עם 20-50 מוצרים. לכל אחד עשוי להיות מבצע משלו עם מועד אחרון שונה. הרכיב נקרא בתוך לולאת template.php — זה גורם למספר שאילתות SQL.

אופטימיזציה: יישמו מצב אצווה ב-$frame = new \Bitrix\Main\Page\Frame('countdown_' . $this->arParams['DISCOUNT_ID']); $frame->begin(); // HTML таймера $frame->end(); . הרכיב מקבל מערך /ajax/countdown.php, שולף את כל התאריכים בשאילתה אחת, ומחזיר מערך של חותמות זמן. בתבנית \Bitrix\Main\EventManager::getInstance()->addEventHandler( 'catalog', 'OnAfterCatalogDiscountUpdate', function ($discountId) { \Bitrix\Main\Data\Cache::clearCacheByTag('catalog_discount_' . $discountId); } ); — קריאה אחת במקום N. בדיקות הראו שעבור 50 מוצרים, זמן השליפה יורד מ-0.5 שניות ל-0.01 שניות.

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

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

לוחות זמנים ליישום

אפשרות היקף לוח זמנים
טיימר פשוט רכיב אחד, הנחה אחת, נקודת קצה סטטית מ-3 עד 4 ימים
פתרון מלא מצב אצווה, תאימות מרוכבת, סנכרון עם כללים, איפוס מטמון אוטומטי מ-7 עד 10 ימים

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