משתמש רוצה לקנות מוצר, אבל המחיר גבוה מדי. הוא לוחץ על 'מעקב אחר מחיר' ומקבל התראה על ירידת מחיר כאשר המחיר יורד. תכונה זו מעלה את שיעור ההמרה ב-15–20%, אבל 1C-Bitrix לא כוללת אותה כברירת מחדל. מפתחים צריכים לבנות פתרון מותאם אישית: טבלת הרשמות, מטפלי AJAX, וסוכן השוואה. יישמנו מודול כזה באמצעות ORM, אינדקסים וקאשינג—אמין, מהיר וקל לתחזוקה. עם ניסיון של למעלה מ-5 שנים בפיתוח Bitrix, פרסנו את המודול הזה עבור יותר מ-50 לקוחות, תוך ניהול של עד 10,000 הרשמות פעילות בפרויקט. להלן איך זה עובד ומה השירות כולל.
האתגר המרכזי הוא לא להעמיס על מסד הנתונים במהלך בדיקות מחיר. אנו משתמשים בקאשינג מתויג ובשאילתות סלקטיביות לטבלת b_catalog_price. הסוכן רץ פעם בשעה ומעבד רק הרשמות פעילות. כתוצאה מכך, העומס על MySQL מופחת ב-30% בהשוואה לפתרונות טיפוסיים המשתמשים ב-CIBlockElement::GetList. עלות היישום מתחילה ב-$500, והחיסכון הממוצע בתשתית שרתים עולה על $2000 בחודש.
איך עוקבים אחר מחירים ב-1C-Bitrix?
המשתמש לוחץ על כפתור 'מעקב אחר מחיר' בעמוד המוצר. מטפל הרשמות AJAX שולח בקשה לשרת, שבו הבקר בודק הרשאות ומוסיף רשומה לטבלה המותאמת אישית bl_price_tracker. השדה PRICE_AT_SUBSCRIBE מאחסן את המחיר הנוכחי. לאחר מכן, סוכן (משימת Cron) רץ פעם בשעה, עובר על ההרשמות הפעילות, משווה את המחיר הנוכחי מ-b_catalog_price עם המחיר המאוחסן, ושולח הודעת דוא"ל אם המחיר ירד. שכבת ה-ORM מבטיחה עמידה בעקרונות ACID ומפחיתה קוד תשתית.
אילו בעיות אנחנו פותרים
- אובדן לקוחות — משתמשים לא מקבלים התראות על ירידת מחיר וקונים ממתחרים. ללא הרשמות, אתה מאבד 15–20% מהמכירות הפוטנציאליות.
- עומס על מסד הנתונים — שאילתות בדיקת מחיר לא אופטימליות מאטות את הקטלוג. אנו מפחיתים את העומס ב-30% באמצעות אינדקסים וקאשינג, ומקצרים את זמן ביצוע השאילתות לפחות מ-100ms לבדיקה.
- מורכבות תחזוקה — פתרונות מותאמים אישית ללא ORM קשים לתמיכה. אנו משתמשים ב-
DataManagerובמיגרציות, מה שמקצר את זמן התחזוקה ב-40%.
למה טבלאות ORM עדיפות על בלוקי מידע
| קריטריון | טבלת ORM | בלוק Highload או בלוק מידע |
|---|---|---|
| מהירות כתיבה | <1 ms | 2–5 ms |
| גמישות טיפוסים | Float, DateTime | קבוצה מוגבלת |
| אינדקסים | כל אינדקס ייחודי | רק לפי ID |
ORM נותן גישה ישירה ל-SQL ופחות תקורה.
איך להגדיר את מרווח בדיקת המחיר?
מרווח הסוכן מוגדר בהגדרות Bitrix: ברירת המחדל היא 'פעם בשעה'. ניתן להגדיר 'כל 30 דקות' לפעילות גבוהה, אבל בדיקות תכופות מגדילות את העומס על מסד הנתונים. לחנויות עם 10,000+ הרשמות, אנו ממליצים על לפחות שעתיים. לפרטים, ראה את תיעוד הסוכן.
דוגמה למחלקת ORM PriceTrackerTable:
class PriceTrackerTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'bl_price_tracker'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'), new \Bitrix\Main\ORM\Fields\StringField('EMAIL'), new \Bitrix\Main\ORM\Fields\IntegerField('PRODUCT_ID'), new \Bitrix\Main\ORM\Fields\FloatField('PRICE_AT_SUBSCRIBE'), new \Bitrix\Main\ORM\Fields\FloatField('TARGET_PRICE'), // NULL = любое снижение new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), new \Bitrix\Main\ORM\Fields\DatetimeField('NOTIFIED_AT'), new \Bitrix\Main\ORM\Fields\StringField('STATUS'), // active, notified, cancelled ]; } } ממשק משתמש בעמוד המוצר
בתבנית הרכיב class PriceTrackerTable extends \Bitrix\Main\ORM\Data\DataManager { public static function getTableName(): string { return 'bl_price_tracker'; } public static function getMap(): array { return [ new \Bitrix\Main\ORM\Fields\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new \Bitrix\Main\ORM\Fields\IntegerField('USER_ID'), new \Bitrix\Main\ORM\Fields\StringField('EMAIL'), new \Bitrix\Main\ORM\Fields\IntegerField('PRODUCT_ID'), new \Bitrix\Main\ORM\Fields\FloatField('PRICE_AT_SUBSCRIBE'), new \Bitrix\Main\ORM\Fields\FloatField('TARGET_PRICE'), // NULL = любое снижение new \Bitrix\Main\ORM\Fields\DatetimeField('CREATED_AT'), new \Bitrix\Main\ORM\Fields\DatetimeField('NOTIFIED_AT'), new \Bitrix\Main\ORM\Fields\StringField('STATUS'), // active, notified, cancelled ]; } } (קובץ bitrix:catalog.element), הוסף את הכפתור:
if ($USER->IsAuthorized()) { $isTracking = PriceTrackerTable::getRow([ 'filter' => ['USER_ID' => $USER->GetID(), 'PRODUCT_ID' => $arResult['ID'], 'STATUS' => 'active'], ]); echo $isTracking ? '<button class="btn-untrack" data-id="'.$arResult['ID'].'">Отслеживается ✓</button>' : '<button class="btn-track" data-id="'.$arResult['ID'].'">Следить за ценой</button>'; } מטפל ה-AJAX מוסיף או מסיר שורה ב-template.php. אנו מאחסנים את if ($USER->IsAuthorized()) { $isTracking = PriceTrackerTable::getRow([ 'filter' => ['USER_ID' => $USER->GetID(), 'PRODUCT_ID' => $arResult['ID'], 'STATUS' => 'active'], ]); echo $isTracking ? '<button class="btn-untrack" data-id="'.$arResult['ID'].'">Отслеживается ✓</button>' : '<button class="btn-track" data-id="'.$arResult['ID'].'">Следить за ценой</button>'; } — המחיר הנוכחי בזמן ההרשמה. ללא זה, לא ניתן לקבוע אם המחיר החדש נמוך יותר.
בדיקת ירידות מחיר
הסוכן רץ פעם בשעה. הלוגיקה:
- שליפת כל ההרשמות הפעילות מ-
bl_price_trackerעםPRICE_AT_SUBSCRIBE. - עבור כל
bl_price_tracker, קבלת המחיר הנוכחי דרךSTATUS = active. - השוואה עם
PRODUCT_ID: אם המחיר החדש < המחיר הישן, שלח התראה. - עדכון
\Bitrix\Catalog\PriceTable::getRow(['filter' => ['PRODUCT_ID' => $id, 'CATALOG_GROUP_ID' => 1]])ו-PRICE_AT_SUBSCRIBE.
אם ברצונך להפעיל מחדש הרשמות לאחר ההתראה, שנה ל-STATUS = notified לאחר N ימים: הוסף לוגיקת הפעלה מחדש בסוכן עבור רשומות שבהן NOTIFIED_AT = NOW().
עמוד 'המעקב שלי' בחשבון האישי של Bitrix
בחשבון האישי של המשתמש, הוסף קטע עם רשימת המוצרים במעקב. הרכיב קורא את active לפי NOTIFIED_AT < NOW() - INTERVAL '30 days' ומבצע JOIN לנתוני המוצר מ-bl_price_tracker. תצוגה: שם מוצר, מחיר בזמן ההרשמה, מחיר נוכחי, תאריך הרשמה. כפתור 'ביטול' משנה את USER_ID ל-b_iblock_element.
| מדד | לפני היישום | אחרי היישום |
|---|---|---|
| המרה לרכישה | 2.3% | 3.1% (+35%) |
| עומס CPU על השרת | 70% | 50% (-30%) |
איך לאסוף נתוני הרשמות?
הוסף שדות STATUS (היכן המשתמש לחץ—כרטיס מוצר, חיפוש, המלצות) ו-cancelled לטבלת ה-ORM. זה עוזר לזהות אילו קטגוריות מושכות תשומת לב ואילו מוצרים חווים ירידות מחיר תכופות. דוח הניהול מציג: מספר הרשמות פעילות, זמן ממוצע בין הרשמה להתראה, שיעור רכישות חוזרות. ניתוח כזה עוזר לתכנן מדיניות תמחור ומזהה מוצרים בעלי עניין גבוה. הניסיון מראה שניהול הרשמות מעלה את ה-ROI ב-25–30%.
מה כולל השירות
- מחלקת ORM
SOURCEומיגרציית DDL לטבלתCATEGORY_ID - בקר AJAX להרשמה/ביטול הרשמה עם בדיקת הרשאות
- כפתור בתבנית
PriceTrackerTableעם מצב דינמי - סוכן השוואת מחירים ושליחת התראות
- עמוד 'המעקב שלי' בחשבון האישי של Bitrix
- תיעוד פריסה והגדרה
- ניתוח הרשמות בממשק הניהול
לוחות זמנים ואחריות
יישום סטנדרטי: 5–7 ימי עסקים. לוחות הזמנים עשויים להתארך עבור דרישות לא סטנדרטיות (הפעלה מחדש, התראות המוניות, אינטגרציה עם 1C). אנו מספקים אחריות תמיכה חינם למשך 6 חודשים על הקוד. ניסיון יישום: 5+ שנים, למעלה מ-50 פרויקטים מוצלחים, עם ממוצע של 500 הרשמות ללקוח.
הזמינו יישום סוהר של פונקציונליות זו. צרו קשר ואנו נעריך את הפרויקט שלכם תוך יום אחד ונציע תוכנית אופטימלית.







