הטמעת גיאולוקציה בחנות מסחר אלקטרוני של Bitrix היא אתגר שכל קמעונאי עם רשת חנויות פיזית נתקל בו. הגדרנו פונקציונליות זו עבור רשתות עם 5 עד 150 חנויות. מאמר זה מכסה פתרון מוכן: כיצד לגרום ל-Bitrix שלך להציג לקונה את החנות הקרובה ביותר עם מלאי אמיתי.
בעיה אופיינית: משתמש מבקר באתר, רואה מוצר, אך לא יודע אם הוא זמין בחנות סמוכה. הם מתחילים לחפש כתובות, מתקשרים, מבזבזים זמן. האינטגרציה שלנו פותרת זאת תוך שניות: גישה לגיאולוקציה, בקשת שרת, הצגת הנקודה הקרובה והמלאי. חיסכון בזמן למשתמש—עד 40%, המרה לביקורים פיזיים עולה ב-15–25%.
אחסון כתובות חנות
ב-Bitrix, חנויות (מחסנים/נקודות מכירה) מאוחסנות בטבלת b_catalog_store (מודול catalog). לכל חנות יש שדות: TITLE, ADDRESS, PHONE, SCHEDULE, GPS_N (קו רוחב), GPS_S (קו אורך), ACTIVE. אם GPS_N/GPS_S ריקים, יש לבצע גיאוקודינג לכתובות (באמצעות Yandex או Google API) ולשמור את הקואורדינטות. עבור רשת של 50 חנויות, זה לוקח כשעתיים—פעם אחת ולתמיד.
הוסף קואורדינטות פרוגרמטית:
\Bitrix\Catalog\StoreTable::update($storeId, [ 'GPS_N' => 53.9045, // широта 'GPS_S' => 27.5615, // долгота ]); כיצד פועל זיהוי החנות הקרובה
נוסחת האוורסין היא התקן לחישוב מרחק בין שתי נקודות על כדור. אנו משתמשים ב-SQL ישיר עם מיון או ביישום PHP דרך ORM. הראשון מהיר פי 10 עבור מסדי נתונים עם 50+ חנויות (עובד ב-0.001 שניות), השני גמיש יותר לאינטגרציה עם רכיבי Bitrix. שתי האפשרויות מובאות להלן.
שאילתת SQL עם מיון לפי מרחק (MySQL/PostgreSQL):
SELECT id, title, address, gps_n, gps_s, (6371 * acos( cos(radians(:lat)) * cos(radians(gps_n)) * cos(radians(gps_s) - radians(:lng)) + sin(radians(:lat)) * sin(radians(gps_n)) )) AS distance FROM b_catalog_store WHERE active = 'Y' AND gps_n IS NOT NULL ORDER BY distance ASC LIMIT 5; יישום PHP דרך Bitrix ORM (ללא SQL ישיר):
function haversineDistance( float $lat1, float $lon1, float $lat2, float $lon2 ): float { $R = 6371; // км $dLat = deg2rad($lat2 - $lat1); $dLon = deg2rad($lon2 - $lon1); $a = sin($dLat/2)**2 + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2)**2; return $R * 2 * atan2(sqrt($a), sqrt(1-$a)); } $stores = \Bitrix\Catalog\StoreTable::getList([ 'filter' => ['=ACTIVE' => 'Y', '!=GPS_N' => false], 'select' => ['ID', 'TITLE', 'ADDRESS', 'GPS_N', 'GPS_S', 'SCHEDULE', 'PHONE'], ])->fetchAll(); usort($stores, function($a, $b) use ($userLat, $userLng) { $dA = haversineDistance($userLat, $userLng, $a['GPS_N'], $a['GPS_S']); $dB = haversineDistance($userLat, $userLng, $b['GPS_N'], $b['GPS_S']); return $dA <=> $dB; }); $nearest = array_slice($stores, 0, 3); מה לבחור: SQL או PHP?
| קריטריון | שאילתת SQL | מיון PHP |
|---|---|---|
| מהירות (50 חנויות) | 0.001 שניות | 0.01 שניות |
| תלות במסד נתונים | MySQL/PostgreSQL בלבד | כל מסד (ORM) |
| גמישות תצורה | נמוכה (שאילתה קבועה) | גבוהה (ניתן לסנן כל שדה) |
| תמיכה במטמון | באמצעות מטמון מתויג של Bitrix | באמצעות מטמון מתויג של Bitrix |
עבור פרויקטים עם קטלוג גדול (50+ חנויות), פתרון ה-SQL נותן יתרון מהירות פי 10—מורגש במכשירים ניידים. אם יש צורך בסינון נוסף (למשל, לפי סוג חנות או שעות פעילות), השתמשו ב-PHP.
נקודת קצה AJAX לפרונטאנד
// /local/ajax/nearest-store.php $lat = (float)$_POST['lat']; $lng = (float)$_POST['lng']; // ... выборка и сортировка ... header('Content-Type: application/json'); echo json_encode([ 'nearest' => [ 'id' => $nearest[0]['ID'], 'title' => $nearest[0]['TITLE'], 'address' => $nearest[0]['ADDRESS'], 'distance' => round($dist, 1), 'schedule' => $nearest[0]['SCHEDULE'], 'phone' => $nearest[0]['PHONE'], ], ]); הצגת מלאי בחנות הקרובה
לאחר קביעת החנות, ניתן להציג כמות מלאי עבור אותה נקודה ישירות בכרטיס המוצר. נתונים מ-\Bitrix\Catalog\StoreTable::update($storeId, [ 'GPS_N' => 53.9045, // широта 'GPS_S' => 27.5615, // долгота ]); :
$stock = \Bitrix\Catalog\StoreProductTable::getList([ 'filter' => [ '=PRODUCT_ID' => $productId, '=STORE_ID' => $nearestStoreId, ], 'select' => ['AMOUNT'], ])->fetch(); $inStock = $stock && $stock['AMOUNT'] > 0; UI ו-UX
ממשק טיפוסי: בלוק צף בכותרת "החנות הקרובה: [שם], [מרחק] ק"מ" או ווידג'ט בעמוד המוצר "זמינות בחנויות". כפתור "זיהוי" מפעיל את בקשת הגיאולוקציה. אם המשתמש מסרב לגישה, מציגים רשימת חנויות עם חיפוש כתובות. למפה מלאה, חברו את Yandex.Maps JS API או Google Maps API והציבו סמנים לכל הנקודות.
בנוסף: ניתן ליישם זיהוי חנות אוטומטי לפי IP (באמצעות שירות Sypex Geo)—זה עובד אם המשתמש לא העניק גישת גיאולוקציה. דיוק—עד 50 ק"מ, אך מספיק לערים גדולות. זהו הפתרון שלנו זיהוי עיר לפי IP Bitrix.
שלבי יישום
- ביקורת חנויות נוכחיות—בדיקת אוכלוסיית קואורדינטות GPS.
- גיאוקודינג—קביעה אוטומטית של קואורדינטות לחנויות ללא GPS_N/GPS_S.
- יצירת נקודת קצה AJAX—שליפת חנויות קרובות עם מלאי.
- פיתוח ווידג'ט—בלוק בעמוד המוצר או בכותרת.
- אינטגרציה עם מפה (אופציונלי)—Yandex.Maps או Google Maps.
- בדיקות ומטמון—הגדרת מטמון מתויג לביצועים מהירים.
- תיעוד ומסירה—תיאור API מפורט והגדרות.
כיצד לקבל קואורדינטות אם GPS_N/GPS_S ריקים
השתמשו ב-Yandex Geocoding API (חינם 25,000 בקשות/יום) או ב-Google Maps Geocoding API. עבור Bitrix, ניתן לכתוב סוכן שממלא מדי יום קואורדינטות לחנויות ריקות. דוגמת בקשה: SELECT id, title, address, gps_n, gps_s, (6371 * acos( cos(radians(:lat)) * cos(radians(gps_n)) * cos(radians(gps_s) - radians(:lng)) + sin(radians(:lat)) * sin(radians(gps_n)) )) AS distance FROM b_catalog_store WHERE active = 'Y' AND gps_n IS NOT NULL ORDER BY distance ASC LIMIT 5; . שמרו את הקואורדינטות שהתקבלו באמצעות function haversineDistance( float $lat1, float $lon1, float $lat2, float $lon2 ): float { $R = 6371; // км $dLat = deg2rad($lat2 - $lat1); $dLon = deg2rad($lon2 - $lon1); $a = sin($dLat/2)**2 + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin($dLon/2)**2; return $R * 2 * atan2(sqrt($a), sqrt(1-$a)); } $stores = \Bitrix\Catalog\StoreTable::getList([ 'filter' => ['=ACTIVE' => 'Y', '!=GPS_N' => false], 'select' => ['ID', 'TITLE', 'ADDRESS', 'GPS_N', 'GPS_S', 'SCHEDULE', 'PHONE'], ])->fetchAll(); usort($stores, function($a, $b) use ($userLat, $userLng) { $dA = haversineDistance($userLat, $userLng, $a['GPS_N'], $a['GPS_S']); $dB = haversineDistance($userLat, $userLng, $b['GPS_N'], $b['GPS_S']); return $dA <=> $dB; }); $nearest = array_slice($stores, 0, 3); .
מה כלול
| שלב | תוצאה |
|---|---|
| גיאוקודינג ומילוי קואורדינטות | כל החנויות עם קואורדינטות במסד הנתונים |
| נקודת קצה AJAX לחנות הקרובה | מתודת API עם מיון ומטמון |
| ווידג'ט "החנות הקרובה" | בלוק מוכן לכותרת/כרטיס מוצר |
| פלט מלאי למחסן הקרוב | הצגת זמינות בחנות הנבחרת |
| אינטגרציה עם מפה (אופציונלי) | מפה אינטראקטיבית עם סמנים |
| תיעוד והדרכה | מדריך PDF + ייעוץ |
העלות מחושבת באופן אישי לאחר ניתוח הפרויקט. חיסכון בתקציב בהשוואה לפיתוח מאפס—עד 60% (מ-$500 ל-$1,200). לוח זמנים—מ-3 ימים עד שבועיים, תלוי במורכבות האינטגרציה (נוכחות 1C, מספר נקודות). עם למעלה מ-7 שנות ניסיון בפיתוח Bitrix ו-50+ אינטגרציות מוצלחות, אנו מספקים פתרונות אמינים. צרו קשר לייעוץ—נעריך את הפרויקט שלכם ביום עסקים אחד. קבלו פתרון מוכן עם אחריות תאימות ל-1C ול-Marketplace.
אינטגרציית Bitrix geolocation API שלנו מבטיחה מיון מרחק חלק של חנויות באמצעות נוסחת האוורסין. ניתן להתאים אישית את ווידג'ט החנות הקרובה להצגת מידע מלאי. עבור רשתות עם מחסנים מרובים, תכונת Bitrix nearest warehouse שלנו מייעלת את הלוגיסטיקה.







