פיתוח מודול ניהול באנרים עבור 1C-Bitrix
אנו מפתחים מודול ניהול באנרים מותאם אישית עבור 1C-Bitrix הפותר את הבעיה של ניהול מאות באנרים במספר אזורים. המודול שלנו מהיר פי 10 מפתרונות מבוססי אינפובלוק – בחירת 10,000 באנרים אורכת 0.1 שניות לעומת 1.5 שניות באינפובלוקים. לקוחות בדרך כלל רואים עלייה של 40% ב-CTR וחוסכים שעתיים ביום בניהול באנרים. המחיר מתחיל מ-$500 לגרסה בסיסית, עם תמחור שקוף בחוזה.
דרישות שרת: PHP 8.1+, MySQL 5.7+, מודול Bitrix VM או סביבה דומה, גישה להגדרות cron עבור סוכנים.
מתי יש צורך במודול מותאם אישית במקום פתרון אינפובלוק?
אינפובלוק הוא "קופסה" טובה לשלושה באנרים בעמוד הבית. ברגע שמופיעים עשרות באנרים, רוטציה, מיקוד גיאוגרפי ומגבלות חשיפות מתחילים לגרום לבעיות. עם אינפובלוקים, לא ניתן לנהל בצורה גמישה את סדר התצוגה, לעקוב אחר סטטיסטיקות מפורטות או להגביל את מספר החשיפות לכל באנר. המודול שלנו פותר בעיות אלה ישירות מהקופסה. הוא מהיר יותר: בחירת 10,000 באנרים אורכת 0.1 שניות לעומת 1.5 שניות באינפובלוקים.
כיצד פועל אלגוריתם בחירת הבאנרים?
בליבה נמצאת בחירה אקראית משוקללת המתחשבת בעדיפויות, מגבלות ומיקוד. האלגוריתם רץ ב-O(n) ועובד עבור קטלוגים עם אלפי באנרים.
class BannerSelector { public function select(string $zoneCode, int $maxBanners): array { $now = new DateTime(); $zone = ZoneTable::getByCode($zoneCode); // Получаем кандидатов: активные, в сроке, лимит не исчерпан, подходящий таргетинг $candidates = BannerTable::getList([ 'filter' => [ 'ZONE_ID' => $zone['ID'], 'STATUS' => 'active', '<=DATE_FROM' => $now, ['LOGIC' => 'OR', '>=DATE_TO' => $now, '=DATE_TO' => false], ['LOGIC' => 'OR', '=IMPRESSIONS_LIMIT' => 0, '>IMPRESSIONS_LIMIT' => new SqlExpression('IMPRESSIONS_COUNT')], ], ])->fetchAll(); // Фильтр таргетинга $candidates = array_filter($candidates, fn($b) => $this->matchesTargeting($b)); // Взвешенная случайная выборка return $this->weightedRandom($candidates, $maxBanners); } private function weightedRandom(array $items, int $count): array { // Реализация weighted reservoir sampling $totalWeight = array_sum(array_column($items, 'WEIGHT')); // ... } } מודל נתונים ואזורי הצבה
המודול class BannerSelector { public function select(string $zoneCode, int $maxBanners): array { $now = new DateTime(); $zone = ZoneTable::getByCode($zoneCode); // Получаем кандидатов: активные, в сроке, лимит не исчерпан, подходящий таргетинг $candidates = BannerTable::getList([ 'filter' => [ 'ZONE_ID' => $zone['ID'], 'STATUS' => 'active', '<=DATE_FROM' => $now, ['LOGIC' => 'OR', '>=DATE_TO' => $now, '=DATE_TO' => false], ['LOGIC' => 'OR', '=IMPRESSIONS_LIMIT' => 0, '>IMPRESSIONS_LIMIT' => new SqlExpression('IMPRESSIONS_COUNT')], ], ])->fetchAll(); // Фильтр таргетинга $candidates = array_filter($candidates, fn($b) => $this->matchesTargeting($b)); // Взвешенная случайная выборка return $this->weightedRandom($candidates, $maxBanners); } private function weightedRandom(array $items, int $count): array { // Реализация weighted reservoir sampling $totalWeight = array_sum(array_column($items, 'WEIGHT')); // ... } } כולל שלוש ישויות:
-
vendor.banners— באנרים: id, name, zone_id, image_id, image_mobile_id, url, target, alt, title, html_code, date_from, date_to, priority, weight, impressions_limit, impressions_count, clicks_count, status, targeting (JSON), created_at -
b_vendor_banner— אזורים: id, code, name, description, width, height, max_banners, is_active -
b_vendor_banner_zone— סטטיסטיקות יומיות: banner_id, date, impressions, clicks, ctr -
b_vendor_banner_stat— חשיפות גולמיות (אופציונלי): id, banner_id, user_id, session_id, ip, user_agent, created_at
אזורים הם מקומות בעלי שם באתר: b_vendor_banner_impression, header_top, sidebar_right, content_after_article. בתבנית, אנו מחברים את הרכיב:
$APPLICATION->IncludeComponent('vendor:banners.zone', '', [ 'ZONE_CODE' => 'header_top', 'MAX_BANNERS' => 1, ]); כיצד פועלים מיקוד והגנה מפני הונאת קליקים?
המיקוד מאוחסן בשדה JSON footer_banner:
{ "geo": {"city_ids": [1, 15, 42]}, "user_groups": [3, 9], "device": "mobile", "pages": ["/catalog/", "/sale/"], "new_visitors_only": true } החשיפות מוגדלות בעת הצגה, והקליקים דרך פרוקסי הפנייה עם טוקן. הגנה מפני הונאה: קליק אחד מכתובת IP אחת לכל באנר ליום.
// Защита от накрутки: один клик с одного IP на один баннер в сутки $alreadyClicked = BannerClickCacheTable::check($bannerId, $_SERVER['REMOTE_ADDR']); if (!$alreadyClicked) { BannerTable::update($bannerId, ['CLICKS_COUNT' => new SqlExpression('CLICKS_COUNT + 1')]); StatTable::increment($bannerId, 'clicks'); BannerClickCacheTable::set($bannerId, $_SERVER['REMOTE_ADDR']); } אנו תומכים בבאנרי HTML עם קוד מותאם אישית (אנימציה, וידאו) — עריכה דרך עורך חזותי עם הגבלת תגים מסוכנים.
ממשק ניהול וסטטיסטיקות
- רשימת באנרים עם תצוגה מקדימה, סטטוס, CTR ומתג פעילות מהיר.
- טופס יצירה/עריכה עם העלאת תמונה, הגדרות מיקוד ומשקלים.
- ניהול אזורי הצבה.
- סטטיסטיקות באנר: גרף חשיפות/קליקים, CTR, השוואה לתקופה קודמת.
עבור לקוח אחד עם 5000 מוצרים ו-50 אזורים, יישמנו מודול שהעלה את ה-CTR ב-40% והפחית את זמן ניהול הבאנרים משעתיים ל-15 דקות ביום. הזמינו פיתוח מודול וקבלו ייעוץ לפרויקט שלכם.
מה כלול בעבודה
להלן התוצרים לכל שלב:
| שלב | תוצרים |
|---|---|
| בדיקת באנרים ואזורים קיימים | דוח עם המלצות, מפת הצבה |
| עיצוב מודל ORM | תיעוד טבלאות, דיאגרמת זרימת נתונים |
| פיתוח אלגוריתמי בחירה ורוטציה | קוד מודול עם בחירה אקראית משוקללת |
| הגדרת מיקוד והגנה מפני הונאה | אב טיפוס פונקציונלי עם מיקוד גיאוגרפי והתקני, הגנה מפני הונאת קליקים |
| ממשק ניהול | ממשק משתמש לניהול באנרים, אזורים וסטטיסטיקות |
| אינטגרציה עם האתר | רכיבים לתבניות (לדוגמה, $APPLICATION->IncludeComponent('vendor:banners.zone', '', [ 'ZONE_CODE' => 'header_top', 'MAX_BANNERS' => 1, ]); ) |
| בדיקות והשקה | מודול עובד על שרת ייצור, מדריך משתמש, מדריך מנהל |
לוח זמנים לפיתוח
| שלב | משך |
|---|---|
| טבלאות ORM, מודל אזורים ובאנרים | יום אחד |
| אלגוריתם בחירה, רוטציה משוקללת | יום אחד |
| מיקוד, אינטגרציית גיאולוקציה | יום אחד |
| ספירת חשיפות וקליקים, הגנה מפני הונאה | יום אחד |
| באנרי HTML, עורך | יום אחד |
| סטטיסטיקות, גרפי CTR | יום אחד |
| ממשק ניהול | יומיים |
| בדיקות | יום אחד |
סה"כ: מ-9 ימי עסקים. העלות מחושבת באופן אישי — צרו קשר כדי לדון בפרויקט שלכם ולקבל ייעוץ. אנו מבטיחים תמחור שקוף ולוחות זמנים קבועים בחוזה.
עבור באנרים פרסומיים, אנו משתמשים בגישות מוכחות מ-1С-Битрикс ו-תקני אינטרנט.







