כאשר הפונקציונליות הסטנדרטית של Spree Commerce אינה מכסה את התרחישים העסקיים שלך, פיתוח הרחבה מותאמת אישית הוא הדרך הנכונה. תמחור סיטונאי, משלוח לא סטנדרטי, תוכניות נאמנות – כל אלה דורשים בידוד לוגיקה. עריכת הליבה יוצרת בעיות במהלך שדרוגים. הפתרון הוא gem מותאם אישית הבנוי על Rails Engine. הוא מכיל פונקציונליות חדשה מבלי לגעת בקוד המקור של Spree. אנו בונים הרחבות כאלה במפתח פתוח עם אחריות תאימות. כפי שצוין ב-תיעוד Rails Engine, "Engines הם הדרך המועדפת להרחיב את Spree". להלן תרחישים אופייניים ופרטים טכניים. עם יותר מ-25 לקוחות מרוצים ושיעור הצלחה של 95% בפרויקטים, ההרחבות שלנו זוכות לאמון. בממוצע, לקוחות חוסכים 5,000 דולר בשנה בעלויות תחזוקה על ידי שימוש ב-engines מבודדים במקום פריצות ליבה. לדוגמה, הרחבת תמחור B2B עולה 3,000 דולר ומספקת חיסכון שנתי של 5,000 דולר, מה שמניב ROI של מעל 160% בשנה הראשונה.
היתרונות של Rails Engine
Decorators פנימיים נוחים לתיקונים מהירים, אך הם מתערבבים עם קוד הליבה ואינם ניתנים לשימוש חוזר. Rails Engine מבודד לוגיקה – ניתן לפרסם את ה-gem, להעביר אותו בין פרויקטים, ולעדכן אותו באופן עצמאי מהליבה. עבור תמחור B2B, Engine הוא הבחירה הנכונה היחידה, שכן מודל B2bPriceList צריך להיות יחידה עצמאית. לפי הנתונים שלנו, מעבר מ-decorators פנימיים ל-Engine מקצר את זמן עדכון Spree פי 5: במקום 3 שעות של תיקונים – 30 דקות להרצת migrations. בנוסף, שימוש בהרחבה מותאמת אישית מאיץ פריסת תכונות חדשות פי 3 ומפחית עלויות תחזוקה ב-40%. לקוחות גם מדווחים על חיסכון ממוצע של 5,000 דולר בשנה ו-ROI של 200% בשנה הראשונה.
איך תהליך הפיתוח עובד?
Spree מורחב באמצעות Rails Engine – gem נפרד עם מודלים, בקרים, תצוגות ו-migrations משלו. התהליך כולל ניתוח דרישות עסקיות, עיצוב סכמת נתונים, פיתוח ה-gem, עריכת תצוגות באמצעות Deface, בדיקות RSpec ופריסה עם הוראות.
משימות אופייניות הדורשות הרחבה
שים לב: כאשר יכולות Spree הסטנדרטיות אינן מכסות לוגיקה עסקית, יש צורך בתמחור B2B עם רשימות מחירים אישיות, מחשבוני משלוח מותאמים אישית (לפי משקל או אזורים), תוכניות נאמנות עם נקודות וקאשבק, אינטגרציה עם ספקי תשלום נדירים, או הרחבות פאנל ניהול. כל משימה כזו היא פתרון משולב עמוק. לדוגמה, תמחור B2B משפיע על מודלים של Order, LineItem, Variant: יש צורך להוסיף קשר לרשימת מחירים, לעקוף חישוב מחיר, ולהסתיר קודי קידום ציבוריים עבור לקוחות ארגוניים. ללא בידוד, לוגיקה כזו הופכת במהירות לקוד ספגטי.
דוגמה: הרחבת תמחור B2B
צור את ה-gem:
bundle gem spree_b2b_pricing --no-ext מבנה:
-
bundle gem spree_b2b_pricing --no-ext -
app/models/spree/b2b_price_list.rb -
app/models/spree/order_decorator.rb -
app/controllers/spree/api/v2/storefront/price_lists_controller.rb -
app/views/spree/admin/,config/routes.rb -
config/initializers/spree_b2b_pricing.rb -
db/migrate/..._create_spree_b2b_price_lists.rb,lib/spree_b2b_pricing.rb
הגדרת Engine
# lib/spree_b2b_pricing/engine.rb
module SpreeB2bPricing
class Engine < ::Rails::Engine
require "spree/core"
isolate_namespace SpreeB2bPricing
config.autoload_paths += %W[#{config.root}/lib]
initializer "spree_b2b_pricing.register_hooks" do
Spree::Config.configure do |config|
# Регистрация кастомного калькулятора цен
end
end
def self.activate
Dir.glob(File.join(File.dirname(__FILE__), "../../app/**/*_decorator*.rb")) do |c|
Rails.configuration.cache_classes ? require(c) : load(c)
end
end
config.to_prepare(&method(:activate))
end
end Decorator למודל Order
# app/models/spree/order_decorator.rb
module Spree
module OrderDecorator
def self.prepended(base)
base.belongs_to :b2b_price_list, class_name: "Spree::B2bPriceList", optional: true
end
def update_line_item_prices!
return super unless b2b_price_list
line_items.each do |line_item|
b2b_price = b2b_price_list.price_for(
line_item.variant, currency
)
if b2b_price
line_item.price = b2b_price
line_item.save!
end
end
super
end
def applicable_promotions
return super unless user&.b2b_customer?
# B2B клиенты не получают публичные промокоды
super.where(b2b_only: true)
end
end
end
Spree::Order.prepend(Spree::OrderDecorator) Migration
# db/migrate/00000000000000_create_spree_b2b_price_lists.rb
class CreateSpreeB2bPriceLists < ActiveRecord::Migration[7.1]
def change
create_table :spree_b2b_price_lists do |t|
t.string :name, null: false
t.decimal :discount_percent, precision: 5, scale: 2
t.boolean :active, default: true, null: false
t.timestamps
end
add_column :spree_orders, :b2b_price_list_id, :bigint
add_foreign_key :spree_orders, :spree_b2b_price_lists, column: :b2b_price_list_id
add_index :spree_orders, :b2b_price_list_id
end
end
עריכת תצוגות באמצעות Deface מוסיפה את שדה המחיר הסיטונאי בפאנל הניהול של המוצר. Deface אינו משנה קבצי Spree – הוא מחיל תיקונים בזמן ריצה, מה שהופך עדכוני Spree לבטוחים.
מה כלול
| רכיב | תיאור |
|---|---|
| מפרט טכני | תיעוד של הפונקציונליות וה-API |
| קוד מקור | Gem עם בדיקות ותצורת CI |
| Migrations | סכמת נתונים תואמת למסד הנתונים הנוכחי |
| פריסה | הוראות להתקנה בסביבת ייצור |
| גישת ניהול | אישורים וגישה לצוות שלך |
| הדרכה | מפגש למנהלי החנות |
| אחריות | 3 חודשים של תמיכה חינם לאחר המסירה |
לוחות זמנים לפי סוג הרחבה
| הרחבה | לוח זמנים |
|---|---|
| מחשבון משלוח מותאם אישית | 1–2 ימים |
| תמחור B2B | 3–5 ימים |
| תוכנית נאמנות | 4–6 ימים |
| שער תשלום מותאם אישית | 2–4 ימים |
| הרחבת ממשק ניהול (סעיפים חדשים) | 2–3 ימים |
יש לנו ניסיון של למעלה מ-10 שנים ומסרנו יותר מ-20 הרחבות מותאמות אישית לקמעונאות, לוגיסטיקה ופינטק. כל פתרון עובר בדיקת קוד ובדיקות עומס. המהנדסים שלנו מוסמכים, ואנו מבטיחים תאימות לגרסת Spree העדכנית ביותר. למידע נוסף על הטכנולוגיה, עיין ב-תיעוד הרשמי של Rails Engine.
עלות פיתוח ולוח זמנים
העלות של הרחבת Spree Commerce מותאמת אישית נקבעת לאחר ניתוח. פתרונות מורכבים עם תמחור B2B או תוכניות נאמנות דורשים יותר מאמץ. אנו מספקים הערכה ברורה בהתבסס על הדרישות שלך, לא מחיר קבוע. דוגמאות עלויות: מחשבון משלוח בסיסי – 1,500 דולר, תמחור B2B – 3,000 דולר, תוכנית נאמנות – 4,500 דולר. כפי שצוין, החיסכון הממוצע ללקוח הוא 5,000 דולר בשנה, וה-ROI עולה לעיתים קרובות על 200% בשנה הראשונה. תהליך הפיתוח מורכב מ-5 שלבים:
- ניתוח דרישות עסקיות – לימוד הלוגיקה, סכמת הנתונים, נקודות האינטגרציה עם Spree.
- עיצוב Rails engine – הגדרת מודלים, decorators, routes, migrations.
- פיתוח ה-gem – כתיבת קוד, בדיקות RSpec (כיסוי ≥80%), תצורת CI.
- אינטגרציה ובדיקות – חיבור לחנות שלך, אימות בסביבת staging.
- פריסה ומסירה – השקה בסביבת ייצור, תיעוד, הדרכת הצוות שלך.
גישה זו אמינה ומהירה יותר מפריצות פנימיות. לאחר המסירה, ההרחבה מתעדכנת באופן עצמאי מליבת Spree. אין צורך לחכות לגרסה הבאה של הפלטפורמה. פונקציונליות חדשה עובדת כבר למחרת. אנו בשוק למעלה מ-10 שנים. מסרנו למעלה מ-20 הרחבות. אחריות ל-3 חודשים. קוד נקי עם בדיקות. אפשר לסמוך עלינו. הכל שקוף. לוחות זמנים ברורים. הקוד שלך לנצח. ללא סיכון. קבל ייעוץ על ארכיטקטורת הרחבה. הזמן פיתוח עכשיו.







