← العودة للفهرس

منتجات المتجر

صفحة المنتج على موقع Marvel (Next.js). تجمع SKU واحداً أو عدة Variants تحت اسم واحد. Is visible = on شرط النشر على الموقع.

المجموعة: Products & Categories اسم القائمة: Storefront Products الرابط: /admin/storefront-products الأيقونة: حقيبة تسوق الخطوة 9 — الأخيرة

الغرض ومنطق العمل

Product = SKU للمخزون. Storefront Product = واجهة العميل على الموقع. نمطان للربط:

  1. رابط مباشر: product_id على Storefront Product → SKU واحد بلا variants.
  2. Variants: عدة SKUs (18W، 24W…) تحت صفحة واحدة. كل Variant يربط product_id ويحمل attributes_json.
Product.is_visible (inventory) ≠ Storefront.is_visible (website). كلاهما مطلوب لظهور صحيح.

راجع خريطة إنشاء المنتج.

الارتباطات

الموردالحقلالأثر
Categories category_id — مطلوب يحدد الفئة والمواصفات المتاحة للـ Variants.
Products product_id أو Variants SKU للسعر والمخزون. Variant يمنع ربط نفس Product مرتين.
Comparison Groups comparison_group_id مجموعة المقارنة على الموقع.
Suppliers supplier_id مورد افتراضي للعرض.
Category Specs attributes_json مفاتيح Variant تُتحقق من specs حيث is_variant_attribute = true.
الموقع V2 /api/v2/storefront/products القائمة، التفاصيل، البحث، المقارنة.

صورة تقريبية — النموذج

Create Storefront Product
Panel Lights
— (optional)
Panel Compare
LED Panel Light Series
✓ Required for website
—
storefront/products

أقسام النموذج

القسمالحقول الرئيسيةملاحظات
Basic Information Category، product_id، comparison_group_id، supplier_id، name، name_ar، slug product_id يظهر منتجات الفئة غير المربوطة بvariant.
Content short_description، description (RichEditor) short_description_ar و description_ar موجودان في DB.
Media main_image، gallery_json Gallery = JSON array of URLs.
Storefront Settings is_visible، is_featured، sort_order is_visible = شرط ظهور /products/…
SEO seo_title، seo_description اختياري.

Variants RelationManager

في صفحة التعديل — تبويب Variants. كل variant = SKU منفصل على الموقع.

الحقلالتقنيملاحظات
Productproduct_idSKU مرتبط. مطلوب للسعر والمخزون.
Variant Labelvariant_labelمطلوب — مثل «18W Warm White».
SKUskuاختياري — مرجع إضافي.
Attributes JSONattributes_jsonمفاتيح = spec keys. يُتحقق من Category Specs (variant attribute + active).
Availabilityavailability_statusavailable / unavailable / coming_soon / discontinued.
Replacementreplacement_storefront_product_idبديل عند discontinued.
Is Defaultis_defaultvariant افتراضي للسعر. واحد فقط — يُلغى الآخر تلقائياً.
Is Visible / Sortis_visible, sort_orderترتيب العرض.
عند الحفظ: يتحقق النظام من attributes_json — مفاتيح صحيحة، specs مطلوبة مملوءة، is_variant_attribute فقط.

حل السعر على الموقع

ترتيب الأولوية في getDisplayPrice():

  1. Product مباشر على Storefront (product_id)
  2. Default visible variant
  3. أول variant available
  4. أول variant visible

خطوات النشر على الموقع

  1. أنشئ Products (SKUs) + Product Prices.
  2. Storefront Products → + New → Category → Name → Main Image.
  3. فعّل Visible.
  4. Save → Edit → Variants: أضف كل SKU مع attributes_json.
  5. عيّن variant واحداً Is Default.
  6. اختياري: Comparison Group للمقارنة.
  7. تحقق: /products/{slug} على الموقع.

أين يظهر؟

APIالاستخدام
GET /api/v2/storefront/homeFeatured products.
GET /api/v2/storefront/productsقائمة + فلاتر.
GET /api/v2/storefront/products/{slug}صفحة التفاصيل + variants.
POST /api/v2/storefront/products/compareمقارنة منتجات في نفس المجموعة.

أخطاء شائعة

المشكلةالسببالحل
404 على الموقعis_visible off أو slug خاطئفعّل Visible وتحقق من slug.
لا سعرVariant بلا product_id أو بلا Product Pricesاربط SKU وأضف أسعاراً.
attributes_json مرفوضمفتاح غير معرّف أو spec مطلوب ناقصراجع Category Specs (is_variant_attribute).
Product غير ظاهر في القائمةمرتبط بvariant آخرwhereDoesntHave storefrontVariants.