תארו לעצמכם חנות רהיטים מקוונת עם מאות מק"טים, שבה כל שילוב של בד ורגליים הוא מוצר נפרד עם מחיר ומלאי משלו. בווקומרס, זה היה דורש תריסר תוספים ועקיפות. Drupal Commerce 2.x מתמודד עם זה ישירות מהקופסה. ארכיטקטורה המבוססת על תוספים ותצורות YAML מאפשרת לכם לתאר בצורה גמישה כל היררכיית מוצרים. Drupal Commerce הוא לא רק עגלת קניות; זהו מסגרת ללוגיקת מסחר אלקטרוני מורכבת.
בעיות שאנחנו פותרים
מודולי Drupal סטנדרטיים לא תמיד מכסים לוגיקת מסחר אלקטרוני מורכבת. לדוגמה, מוצר עם וריאציות מרובות (צבע, גודל) ומחירים שונים. או הנחות רב-רמתיות המבוססות על היסטוריית הזמנות. לקוחות מגיעים אלינו לעתים קרובות לאחר ניסיונות כושלים להתאים את ווקומרס ל-Drupal. כאשר נדרשת אינטגרציה של 1C ברמת ההזמנות והמלאי, Commerce 2.x מתפקד טוב יותר.
אבל זה לא הכל. מקרה אמיתי: לקוח מוכר רהיטים עם עשרות שילובי בדים ורגליים. כל שילוב הוא מק"ט נפרד עם מחיר ומלאי. ב-Commerce 2.x, זה מטופל באמצעות וריאציות מוצר ושדות מותאמים אישית באמצעות Field API. דוגמה נוספת: צריך לאחד הזמנה אחת ממוצרים בחנויות שונות (multi-store). Commerce Stores תומך באופן טבעי בעגלות נפרדות ופרופילי תשלום. החיסכון בפיתוח ברור: אין צורך לכתוב מודולים מותאמים אישית לכל משימה.
למה Commerce 2.x עדיף על Commerce 1.x?
Commerce 2.x נכתב מחדש לחלוטין עבור גרסאות Drupal חדשות יותר ואינו תואם לגרסה הראשונה. הבדלים עיקריים:
| קריטריון | Commerce 1.x (D7) | Commerce 2.x (D8+) |
|---|---|---|
| ארכיטקטורה | Rules + Features | תוספים + תצורת YAML |
| ניהול מצב | Rules | State Machine |
| ריבוי אתרים | מורכב | חנויות ישירות מהקופסה |
| API | מבוסס Hook | OOP + אירועים |
אם הפרויקט שלכם עדיין על Drupal 7, תצטרכו להשתמש ב-Commerce 1.x legacy או לבצע הגירה עם עיצוב מחדש מלא. הניסיון שלנו מראה שהגירה מ-Commerce 1.x ל-2.x אורכת 2–4 שבועות בהתאם להתאמות אישיות.
איך אנחנו עושים את זה: מקרה קונקרטי
עבדנו עם קמעונאי רהיטים שהיו לו 500+ מק"טים ו-30 אפשרויות בד. לכל וריאנט בד היה מחיר ורמת מלאי משלו. הלקוח נזקק ל:
- שדות וריאציה מותאמים אישית (בד, סוג רגליים)
- אינטגרציה עם 1C לניהול מלאי
- חיפוש פקטורי למאפייני מוצר
- תהליך קופה דו-שלבי (כתובת + תשלום)
בנינו את הפתרון על Drupal 10 ו-Commerce 2.x. וריאציות מוצר נוצרו פרוגרמטית, והשתמשנו במודול composer require drupal/commerce drupal/commerce_price drupal/commerce_store \ drupal/commerce_product drupal/commerce_order drupal/commerce_cart \ drupal/commerce_checkout drupal/commerce_payment drupal/commerce_tax drush en commerce commerce_product commerce_cart commerce_checkout \ commerce_payment commerce_tax commerce_order -y drush cr לניהול מלאי רב-מחסני. תהליך הקופה הותאם אישית עם שני שלבים: כתובת משלוח ותשלום. החיפוש הפקטורי השתמש ב-Search API עם Solr. תוצאה: זמן הקופה ירד מ-4 שלבים ל-2, זמן העלאת המוצרים ירד ב-60%, ושגיאות סנכרון המלאי ירדו ב-90%.
הגירה מ-Commerce 1.x? הנה מה לעשות
הגירה היא לא רק העברת נתונים; זהו עיבוד מחדש של לוגיקת עסקית. Commerce 1.x ו-2.x אינם תואמים: מודולים, hooks, מבנה מסד נתונים – הכל שונה. אנחנו מפתחים תוכנית הגירה הכוללת: ביקורת פונקציונליות קיימת, ייצוא נתונים ל-CSV/JSON, כתיבת סקריפטים להגירה על Migrate API, הקמת חנות חדשה מאפס. לאחר ההגירה, הזמנות ומלאי מועברים, ותהליכי קופה מותאמים אישית נכתבים מחדש לארכיטקטורת התוספים.
התקנה בסיסית באמצעות Composer
composer require drupal/commerce drupal/commerce_price drupal/commerce_store \
drupal/commerce_product drupal/commerce_order drupal/commerce_cart \
drupal/commerce_checkout drupal/commerce_payment drupal/commerce_tax
drush en commerce commerce_product commerce_cart commerce_checkout \
commerce_payment commerce_tax commerce_order -y
drush cr מודולים נוספים
לשערי תשלום: `composer require drupal/commerce_stripe drupal/commerce_paypal`. למלאי: `commerce_stock`. ל-1C: `commerce_1c`. לחיפוש: `search_api` + `search_api_solr`.הגדרת חנות וסוגי מוצרים
צרו חנות ב-/admin/commerce/config/stores. הגדירו מטבע בסיס, מדינת ברירת מחדל ורשימת מדינות למשלוח.
מוצרים ב-Commerce מחולקים למוצר (כרטיס) ווריאציה (מק"ט עם מחיר). צרו סוגי מוצרים וסוגי וריאציות דרך הניהול. ליצירה פרוגרמטית, השתמשו בקוד:
use Drupal\commerce_price\Price;
use Drupal\commerce_product\Entity\Product;
use Drupal\commerce_product\Entity\ProductVariation;
$variation = ProductVariation::create([
'type' => 'default',
'sku' => 'CHAIR-BLK-L',
'price' => new Price('1499.00', 'RUB'),
'field_color' => ['target_id' => $colorTermId],
'field_size' => 'L',
]);
$variation->save();
$product = Product::create([
'type' => 'default',
'title' => 'Кресло офисное',
'stores' => [$storeId],
'variations' => [$variation],
]);
$product->save();
לקטלוג, השתמשו ב-Views. הגדירו מסננים לפי מחיר, מאפיינים, חנות. לחיפוש פקטורי, חברו את Search API ו-Solr.
התאמת תהליך הקופה ללוגיקת העסקית שלכם
Commerce 2.x מאפשר לכם להתאים אישית את תהליך הקופה באמצעות Checkout Flows. ניתן להוסיף או להסיר שלבים: התחברות, כתובת משלוח, תשלום, אישור. אם אתם צריכים שדה לא סטנדרטי, כמו הערת הזמנה, צרו תוסף:
/**
* @CommerceCheckoutPane(
* id = "custom_gift_note",
* label = @Translation("Gift note"),
* default_step = "order_information",
* )
*/
class GiftNotePane extends CheckoutPaneBase {
public function buildPaneForm(array $pane_form, FormStateInterface $form_state, array &$complete_form): array {
$pane_form['gift_note'] = [
'#type' => 'textarea',
'#title' => $this->t('Сообщение получателю'),
'#rows' => 3,
];
return $pane_form;
}
}חברו שערי תשלום: Stripe, PayPal, YooKassa דרך מודולים מתאימים. התצורה כוללת מפתחות API ובחירת מצב (בדיקה/חי). אנו מבטיחים תמיכה בגרסאות Drupal העדכניות ביותר.
ניהול מלאי ומסים
Commerce אינו כולל ניהול מלאי ישירות מהקופסה – השתמשו במודול use Drupal\commerce_price\Price; use Drupal\commerce_product\Entity\Product; use Drupal\commerce_product\Entity\ProductVariation; $variation = ProductVariation::create([ 'type' => 'default', 'sku' => 'CHAIR-BLK-L', 'price' => new Price('1499.00', 'RUB'), 'field_color' => ['target_id' => $colorTermId], 'field_size' => 'L', ]); $variation->save(); $product = Product::create([ 'type' => 'default', 'title' => 'Кресло офисное', 'stores' => [$storeId], 'variations' => [$variation], ]); $product->save(); . הוא מוסיף שדה רמת מלאי לווריאציות ותומך במספר מחסנים.
use Drupal\commerce_stock\StockServiceManagerInterface;
$stockService = \Drupal::service('commerce_stock.service_manager')
->getService($productVariation);
$level = $stockService->getStockLevel($productVariation, $locations);
$stockService->createTransaction(
$productVariation,
$locationId,
[],
100,
new Price('0', 'RUB'),
'RUB',
TRANSACTION_TYPE_IN,
[]
);מסים מוגדרים דרך מודול /** * @CommerceCheckoutPane( * id = "custom_gift_note", * label = @Translation("Gift note"), * default_step = "order_information", * ) */ class GiftNotePane extends CheckoutPaneBase { public function buildPaneForm(array $pane_form, FormStateInterface $form_state, array &$complete_form): array { $pane_form['gift_note'] = [ '#type' => 'textarea', '#title' => $this->t('Сообщение получателю'), '#rows' => 3, ]; return $pane_form; } } . צרו סוג מס, הגדירו שיעור ואזורים. לדוגמה, מע"מ 20% לבלארוס. Commerce מחיל אוטומטית את השיעור בהתבסס על כתובת הלקוח.
מה כלול בעבודה
- ניתוח דרישות ומפרט טכני
- התקנת Drupal ו-Commerce על האחסון
- הגדרת חנות, סוגי מוצרים ווריאציות
- פיתוח שלבי קופה מותאמים אישית (במידת הצורך)
- הגדרת שער תשלום ומסים
- אינטגרציית מלאי
- הגדרת קטלוג עם חיפוש
- בדיקות והדרכת מנהלים
- תיעוד מערכת
- אחריות לחודש
הערכות זמנים
| שלב | זמן |
|---|---|
| התקנה והגדרת חנות | 2–3 ימים |
| התאמת קופה | 2 ימים |
| אינטגרציית שער תשלום | 1–3 ימים |
| ניהול מלאי | 1–2 ימים |
| קטלוג עם חיפוש פקטורי | 2–4 ימים |
| מסים | 1–2 ימים |
חנות עובדת בסיסית אורכת 1.5 עד 2 שבועות. פרויקט מורכב עם לוגיקה מותאמת אישית אורך 3 עד 5 שבועות. קבלו הערכה ראשונית: נעזור לכם להבין אילו מודולים נדרשים וכמה זמן ייקח הפיתוח. צרו קשר כדי לדון בפרטים.







