כאשר לקוח פותח כרטיס מוצר באתר בגדים, הוא רואה טבלת מידות — אך ב-60% מהמקרים הוא בוחר במידה הלא נכונה. שכתבנו את הלוגיקה: במקום טבלה סטטית — אלגוריתם דינמי שמבוסס על גובה, משקל והיקפים, נותן מידה ספציפית תוך התחשבות בגזרת הבגד. במשך למעלה מ-10 שנים, יישמנו יותר מ-50 יועצי מידות כאלה על 1C-Bitrix. לאחר היישום, שיעור ההחזרות עקב "לא התאים" יורד ב-15–20%, וההמרה לעגלה מדף המוצר עולה ב-12–18%.
לפי פרויקט אחד, דיוק ההמלצות עלה מ-60% ל-85%, וההשקעה בפיתוח מחזירה את עצמה תוך 2–3 חודשים הודות להפחתת הלוגיסטיקה והזמנות חוזרות. עם ערך החזרה ממוצע של $20 (מותאם למטבע מקומי), הפחתה של 18% חוסכת $5,400 לכל 1,000 הזמנות.
אלגוריתם ההתאמה עובד על בסיס פרמטרים
ראשית, אנו מקשרים שלוש קבוצות נתונים:
- מדידות לקוח (גובה, משקל, היקפים)
- טבלת מידות מוצר: עבור כל מידה, אנו מגדירים טווחי מדידה פיזיים תוך התחשבות בגזרה (צמודה – תוספת צרה, אוברסייז – רחבה)
- מלאי: אנו בודקים אם המידה המומלצת במלאי, אחרת אנו מציעים חלופה
נקודת מפתח — טווחי מדידה, לא ערכים מדויקים. מידה 46 מתאימה להיקף חזה 88–92 ס"מ, לא בדיוק 90. רוחב הטווח תלוי בסוג הגזרה: גזרה צמודה — ±2 ס"מ, אוברסייז — ±5 ס"מ. אם כל המדידות נופלות בטווח אחד — המידה נחשבת אידיאלית. אם המדידות מפוזרות בין שתי מידות סמוכות — האלגוריתם בוחר את הגדולה או הקטנה יותר בהתאם לגזרה ולהעדפות (לדוגמה, לגזרה צמודה, בוחר את הקטנה יותר).
התאמה לפי פרמטרים עולה על טבלת מידות סטטית
| קריטריון | טבלת מידות סטטית | התאמה אלגוריתמית לפי פרמטרים |
|---|---|---|
| דיוק | ~60% (הלקוח בוחר) | ~85% (המערכת מחשבת) |
| סוג גזרה נחשב | לא | צמודה/רגילה/אוברסייז |
| חלופה | אין | הצעת מידה שכנה אוטומטית |
| אינטגרציית מלאי | לא | בדיקה לאחר ההמלצה |
| התאמה אישית | לא | שמירת מדידות בחשבון |
ארכיטקטורת נתונים
אנו מרחיבים את מבנה טבלת המידות עם פרמטרי סובלנות נוספים. אנו משתמשים בבלוק HL לאחסון הכללים:
CREATE TABLE b_size_fit_rules ( ID SERIAL PRIMARY KEY, CHART_ID INT NOT NULL REFERENCES b_size_charts(ID), SIZE_RU VARCHAR(10), CHEST_MIN NUMERIC(5,1), CHEST_MAX NUMERIC(5,1), WAIST_MIN NUMERIC(5,1), WAIST_MAX NUMERIC(5,1), HIPS_MIN NUMERIC(5,1), HIPS_MAX NUMERIC(5,1), HEIGHT_MIN SMALLINT, HEIGHT_MAX SMALLINT, WEIGHT_MIN SMALLINT, WEIGHT_MAX SMALLINT, FIT_TYPE VARCHAR(20) -- 'slim', 'regular', 'oversized' ); אלגוריתם ההמלצה
// SizeFitAdvisor.php class SizeFitAdvisor { public function recommend(array $measurements, int $chartId, string $fitType = 'regular'): array { $rules = SizeFitRulesTable::getList([ 'filter' => ['=CHART_ID' => $chartId, '=FIT_TYPE' => $fitType], 'order' => ['SIZE_RU' => 'ASC'], ])->fetchAll(); $scores = []; foreach ($rules as $rule) { $score = 0; $matched = 0; foreach (['CHEST', 'WAIST', 'HIPS'] as $param) { if (!isset($measurements[$param])) continue; $val = (float) $measurements[$param]; $min = (float) $rule[$param . '_MIN']; $max = (float) $rule[$param . '_MAX']; if ($val >= $min && $val <= $max) { $score++; } elseif ($val < $min) { $score -= ($min - $val) / 10; } else { $score -= ($val - $max) / 10; } $matched++; } if ($matched > 0) { $scores[$rule['SIZE_RU']] = $score / $matched; } } arsort($scores); $best = array_key_first($scores); $next = array_keys($scores)[1] ?? null; return ['primary' => $best, 'alternative' => $next, 'scores' => $scores]; } } האלגוריתם מחזיר לא רק מידה אחת אלא המלצה ראשית וחלופה. זה חשוב: אם המידה הראשית לא זמינה, הצג את החלופה עם הערה כמו 'אם 46 לא זמין, קח 48 — זה יתאים למבנה הגוף שלך.'
בדיקת זמינות המידה המומלצת
לאחר קבלת ההמלצה, השרת בודק את המלאי של הצעות עם מידה זו. אם הפריט אזל מהמלאי, מיד מוצעת מידה חלופית. הלוגיקה מיושמת באמצעות CREATE TABLE b_size_fit_rules ( ID SERIAL PRIMARY KEY, CHART_ID INT NOT NULL REFERENCES b_size_charts(ID), SIZE_RU VARCHAR(10), CHEST_MIN NUMERIC(5,1), CHEST_MAX NUMERIC(5,1), WAIST_MIN NUMERIC(5,1), WAIST_MAX NUMERIC(5,1), HIPS_MIN NUMERIC(5,1), HIPS_MAX NUMERIC(5,1), HEIGHT_MIN SMALLINT, HEIGHT_MAX SMALLINT, WEIGHT_MIN SMALLINT, WEIGHT_MAX SMALLINT, FIT_TYPE VARCHAR(20) -- 'slim', 'regular', 'oversized' ); הסטנדרטי עם סינון לפי מאפיין מידה ומלאי.
טופס התאמה בכרטיס המוצר
טעויות אופייניות ביישום הטופס:
- שאלת כל המדידות בבת אחת — מפחידה לקוחות. עדיף להשתמש בסקר שלב-אחר-שלב עם פס התקדמות.
- אי בדיקת מלאי לפני הצגת התוצאה — המשתמש מתאכזב.
- התעלמות מסוג הגזרה — בגדים צמודים ורפויים דורשים טבלאות שונות.
טופס חד-שלבי (כל המדידות בבת אחת) — ללקוחות מנוסים:
<form class="size-advisor-form"> <div class="form-row"> <label>Рост (см): <input type="number" name="height" min="140" max="220"></label> <label>Вес (кг): <input type="number" name="weight" min="40" max="200"></label> </div> <div class="form-row"> <label>Обхват груди (см): <input type="number" name="chest" min="60" max="160"></label> <label>Обхват талии (см): <input type="number" name="waist" min="50" max="150"></label> <label>Обхват бёдер (см): <input type="number" name="hips" min="70" max="170"></label> </div> <label>Посадка: <select name="fit_type"> <option value="slim">Облегающая</option> <option value="regular" selected>Стандартная</option> <option value="oversized">Свободная</option> </select> </label> <button type="submit">Подобрать размер</button> </form> בקשת AJAX לבקר PHP
הטופס שולח נתונים לשרת כי:
- אלגוריתם ההתאמה רץ בצד השרת — נתונים לא נחשפים למתחרים
- השרת בודק מיד את המלאי ומחזיר תשובה סופית
- ניתן להתאים אישית את התוצאה (שמירת מדידות למשתמשים מחוברים)
// SizeAdvisorController.php public function recommendAction(): array { $measurements = [ 'CHEST' => (float) $this->request->getPost('chest'), 'WAIST' => (float) $this->request->getPost('waist'), 'HIPS' => (float) $this->request->getPost('hips'), ]; $fitType = $this->request->getPost('fit_type', 'regular'); $productId = (int) $this->request->getPost('product_id'); $chartId = $this->getChartForProduct($productId); $advisor = new SizeFitAdvisor(); $result = $advisor->recommend($measurements, $chartId, $fitType); $availability = $advisor->checkAvailability($result['primary'], $productId); if (is_object(global_user()) && !global_user()->IsGuest()) { UserMeasurementsTable::saveForUser(global_user()->GetID(), $measurements); } return [ 'recommended_size' => $result['primary'], 'alternative_size' => $result['alternative'], 'available' => $availability['available'], 'offers' => $availability['offers'], ]; } שמירת מדידות בחשבון האישי
אם המשתמש מחובר, המדידות נשמרות בטבלה נפרדת וממולאות מראש בפעם הבאה שבה משתמשים ביועץ — אפילו על מוצר אחר. בחשבון האישי, יש סעיף 'המדידות שלי' לעריכה ידנית.
מה כלול בעבודה
- תיעוד להגדרת טבלאות מידות וכללי חישוב
- קוד מקור של המודול עם הערות
- גישה למאגר Git עם היסטוריית שינויים
- הוראות להעלאת מידות דרך פאנל הניהול של Bitrix
- הדרכה למנהלי תוכן (שעה אחת אונליין)
- תמיכה טכנית למשך 14 ימים לאחר ההשקה
לוחות זמנים
| אפשרות | מה כלול | משך |
|---|---|---|
| יועץ בסיסי | טופס, אלגוריתם, תוצאה | 1–2 שבועות |
| עם בדיקת מלאי | + אינטגרציה עם נקודות מכירה, מלאי | 2–3 שבועות |
| + חשבון אישי עם מדידות | + שמירת פרופיל | +1 שבוע |
יועץ מידות המבוסס על מדידות מספק את ההמלצה המדויקת ביותר וממזער את הסבירות להחזרות. בין כל כלי התאמת המידות, זהו הכלי עתיר העבודה ביותר אך גם היעיל ביותר. צרו קשר לקבלת הערכת עלות ולוחות זמנים לפרויקט שלכם. קבלו תוכנית מפורטת לשילוב היועץ בקטלוג שלכם. הזמינו פיתוח, ואנחנו נראה לכם כמה תחסכו בהחזרות.







