לקוח רוצה לבנות כיסא: עור שחור, משענת גב מתכווננת, חריטת שם. קטלוגים מסורתיים עם מאות SKU מוגדרים מראש לא עובדים כאן — שילובי פרמטרים יכולים לעלות על 500,000. אחסון כל אחד כמוצר נפרד אינו ריאלי. הפתרון הוא קונפיגורטור מוצר שמחשב דינמית את התוכן, תמחור דינמי, וזמינות של קבוצות אפשרויות.
אנחנו מתכננים ומיישמים קונפיגורטורים כאלה על Laravel ו-PostgreSQL. לאחסון גמיש של חוקים אנו משתמשים ב-JSONB. התוצאה: במקום 50,000 SKU סטטיים אתה מנהל קונפיגורטור אחד, והלקוח מרכיב מוצר מותאם אישית בכמה קליקים. עם ניסיון של למעלה מ-10 שנים במסחר אלקטרוני ו-50+ פרויקטים מוצלחים, הצוות שלנו מספק פתרונות חזקים. פתרון הקונפיגורטור שלנו מתחיל ב-$5,000 ויכול להפחית את עלויות ניהול ה-SKU בעד 90%. לקבלת הערכת פרויקט, צור קשר איתנו.
איך קונפיגורטור מוצר מתמודד עם מיליוני שילובים
המטרה היא לא לרשום כל וריאנט כ-SKU נפרד, אלא לתאר את המוצר כקבוצה של קבוצות אפשרויות. קבוצה אחת יכולה להיות תפריט נפתח (חומר), אחרת מתג (צבע), ושלישית שדה טקסט (חריטה). השילובים מחושבים תוך כדי תנועה, לא מאוחסנים במסד הנתונים. המערכת מתמודדת עם עד מיליון שילובים ללא ירידה בביצועים.
| קריטריון | SKU מבוססי טבלה | קונפיגורציה דינמית |
|---|---|---|
| מספר שילובים | עד כמה אלפים | מ-10,000 עד מיליונים |
| ניהול מלאי | לכל SKU בנפרד | ייצור לפי הזמנה |
| השפעת מחיר של אפשרויות | מוגדר מראש | כל אפשרות יכולה לשנות מחיר |
| ויזואליזציה | מוגבלת | אפשרית בזמן אמת |
קונפיגורציה דינמית מפחיתה את עומס הניהול ב-90% ומאיצה השקות מוצרים חדשים. בהשוואה ל-SKU מבוססי טבלה, גישה דינמית זו יעילה פי 5. מהנתונים שלנו, יישום קונפיגורטור יכול להפחית משמעותית את עלויות ניהול המבחר ולהגדיל את ערך ההזמנה הממוצע באמצעות התאמה אישית של מוצרים. בממוצע, הלקוחות שלנו רואים עלייה של 20% בשיעור ההמרה וירידה של 30% בהחזרות מוצרים.
איך מחיר הקונפיגורציה מחושב
המחיר מחושב בצד השרת, לא בצד הלקוח. אנו מיישמים מחלקת ConfiguratorPriceCalculator שלוקחת את המחיר הבסיסי ומסכמת מודיפיקטורים מאפשרויות נבחרות. עבור קלט חופשי (טקסט, מספר), תוספת קבועה לכל קבוצה. סוגי מודיפיקטורים:
- הוספה — הוסף סכום
- הכפלה — הגדל באחוז מהסכום הכולל הנוכחי
- קבוע — החלף את המחיר הבסיסי בערך חדש
class ConfiguratorPriceCalculator
{
public function calculate(ConfiguratorProduct $configurator, array $selectedOptions): PriceBreakdown
{
$base = $configurator->base_price;
$breakdown = [['label' => 'Базовая цена', 'amount' => $base]];
$total = $base;
foreach ($selectedOptions as $groupId => $selection) {
$group = $configurator->optionGroups->find($groupId);
if ($group->type === 'text' || $group->type === 'number') {
$modifier = $group->text_price_modifier ?? 0;
} else {
$option = ConfiguratorOption::findOrFail($selection);
$modifier = $this->resolveModifier($option, $total);
}
if ($modifier != 0) {
$breakdown[] = [
'label' => $group->name . ($group->type !== 'text' ? ': ' . $option->label : ''),
'amount' => $modifier,
];
$total += $modifier;
}
}
return new PriceBreakdown($total, $breakdown);
}
private function resolveModifier(ConfiguratorOption $option, float $currentTotal): float
{
return match($option->modifier_type) {
'add' => $option->price_modifier,
'multiply' => $currentTotal * ($option->price_modifier_pct / 100),
'fixed' => $option->price_modifier - $currentTotal,
};
}
}החלק של הלקוח מציג מחיר ראשוני, אבל בעת הוספה לעגלה, תמיד מתבצע חישוב מחדש בצד השרת — לעולם אל תסמוך על קוד לקוח לפעולות פיננסיות.
אילו חוקי תלות הקונפיגורטור תומך?
חלק מהאפשרויות עשויות לדרוש בחירה באפשרות אחרת (requires), לשלול אחת את השנייה (excludes), או לפתוח אפשרויות חדשות (enables). מנוע החוקים מיושם במחלקת class ConfiguratorPriceCalculator { public function calculate( ConfiguratorProduct $configurator, array $selectedOptions ): PriceBreakdown { $base = $configurator->base_price; $breakdown = [['label' => 'Базовая цена', 'amount' => $base]]; $total = $base; foreach ($selectedOptions as $groupId => $selection) { $group = $configurator->optionGroups->find($groupId); if ($group->type === 'text' || $group->type === 'number') { $modifier = $group->text_price_modifier ?? 0; } else { $option = ConfiguratorOption::findOrFail($selection); $modifier = $this->resolveModifier($option, $total); } if ($modifier != 0) { $breakdown[] = [ 'label' => $group->name . ($group->type !== 'text' ? ': ' . $option->label : ''), 'amount' => $modifier, ]; $total += $modifier; } } return new PriceBreakdown($total, $breakdown); } private function resolveModifier(ConfiguratorOption $option, float $currentTotal): float { return match($option->modifier_type) { 'add' => $option->price_modifier, 'multiply' => $currentTotal * ($option->price_modifier_pct / 100), 'fixed' => $option->price_modifier - $currentTotal, }; } } ועובד גם בצד הלקוח (משוב מיידי) וגם בצד השרת (ולידציה קפדנית). אפשרויות תלויות נתמכות במלואן.
| סוג חוק | תיאור | דוגמה |
|---|---|---|
| requires | אם אפשרות A נבחרה, אפשרות B חייבת להיבחר גם כן | בחירת עור → צבע נדרש |
| excludes | אפשרויות A ו-B אינן תואמות | עור אמיתי וחיפוי תקציבי |
| enables | אפשרות A מפעילה אפשרות B (אם A לא נבחרה, B אינה זמינה) | בחירת חריטה פותחת שדה טקסט |
איך הקונפיגורציה נשמרת בעגלה?
הקונפיגורציה מתווספת לפריט בעגלה כאובייקט JSON בשדה ConfiguratorRuleEngine מסוג configuration. המחיר מוקפא באותו רגע כדי למנוע משינויי מחיר להשפיע על פריטים שכבר נבחרו. כמו כן, נוצר SKU קונפיגורציה ייחודי עבור ההזמנה.
ALTER TABLE cart_items ADD COLUMN configuration JSONB;
ALTER TABLE order_items ADD COLUMN configuration JSONB;
ALTER TABLE order_items ADD COLUMN configuration_sku VARCHAR(255);דוגמה לקונפיגורציה שמורה:
{
"configurator_id": 5,
"groups": {
"1": {
"option_id": 12,
"label": "Кожа натуральная"
},
"2": {
"option_id": 7,
"label": "Чёрный"
},
"3": {
"type": "text",
"value": "Иван Иванов"
}
},
"sku": "CHAIR-LEATH-BLK-CUST",
"price_at_add": 4850.00
}ה-REST API מספק נקודות קצה לאחזור סכמת הקונפיגורטור, חישוב מחדש של מחיר, ולידציה של קבוצות אפשרויות, והוספה לעגלה.
איך לנהל את הקונפיגורטור בפאנל הניהול?
מנהל יכול ליצור ולערוך קונפיגורטורים דרך הממשק ללא מפתח. יכולות:
- יצירת קבוצות אפשרויות עם סוגים (בחירה, טקסט, מספר)
- הגדרת חוקי תלות דרך ממשק משתמש
- בקרת סדר ונראות
- תצוגה מקדימה של הקונפיגורטור לפני פרסום
זה מאפשר לעסק לעדכן באופן עצמאי מבחר וחוקי תמחור. עדכון ויזואלי בזמן אמת משנה את תמונת המוצר ככל שנבחרות אפשרויות.
מה כלול בעבודה
כחלק מיישום הקונפיגורטור, אנו מספקים:
- תיעוד: תיאור ארכיטקטורה, סכמת מסד נתונים, מפרט API (פורמט OpenAPI).
- ממשק ניהול: הלקוח מקבל גישה לפאנל ניהול קונפיגורטורים שבו הוא יכול ליצור ולערוך אפשרויות ללא מתכנת.
- אינטגרציית עגלה: מודול מוכן להוספת קונפיגורציות לעגלה, שמירת היסטוריה ויצירת SKU קונפיגורציה ייחודי.
- הדרכה: מפגש של שעתיים למנהלים על שימוש בפאנל הניהול; הקלטה והוראות כתובות.
- תמיכה: תחזוקה חינם למשך 30 יום לאחר המסירה — תיקוני באגים וייעוץ.
לוח זמנים ליישום
| שלב | זמן |
|---|---|
| סכמה בסיסית + API לחישוב מחיר מחדש + הוספה לעגלה | 5–7 ימים |
| חוקי תלות (requires/excludes) | 2–3 ימים |
| ממשק ניהול | 3–4 ימים |
| תצוגה מקדימה ויזואלית (שינוי תמונה בעת בחירת אפשרות) | 2–3 ימים |
| אינטגרציה עם מערכת הזמנות ייצור | +3–5 ימים |
פרויקט טיפוסי אורך 2 עד 4 שבועות בהתאם למורכבות החוקים והוויזואליזציה. כל קונפיגורטור מוצר תומך בעד 10 קבוצות אפשרויות עם 50 אפשרויות בכל אחת. צור קשר כדי לדון בפרטים.







