Skip to main content
الإجراءات تقرأ السلة وتغيّرها. توجد تحت window.aftersell.cart.actions.
تُنفَّذ الإجراءات بعد جاهزية السلة، داخل ready() أو داخل معالج حدث.
قبل تحميل السلة، تكون الإجراءات مجرد بدائل صورية (stubs). يسجّل كل منها تحذيرًا في وحدة التحكم يذكر اسم الإجراء، مثل cart.actions.addItem() called before the cart loaded، ولا يفعل شيئًا. الإجراءات غير المتزامنة تظل تُرجع Promise يُحل، لذا تعمل سلسلة .then() بشكل طبيعي بدلًا من رمي خطأ؛ وتُرجع getCart() القيمة null وتُرجع formatMoney() سلسلة فارغة.لا يتعطل شيء إذا استدعيت إجراءً مبكرًا جدًا، لكن لا يحدث شيء أيضًا. راقب وحدة التحكم بحثًا عن ذلك التحذير عندما يبدو أن إجراءً لا يفعل شيئًا.

كل الإجراءات

استدعاء إجراء من داخل معالج cart_updated قد يسبب حلقة لا نهائية. اقرأ القاعدتين أولًا.

الدرج

open وclose

يفتحان أو يغلقان درج السلة. كلاهما متزامن ولا يأخذ أي وسيطات.

القراءة

getCart()

يُرجع كائن السلة الحالي، أو null قبل تحميلها. النتيجة نسخة، لذا فإن تعديلها لن يغيّر السلة الحقيقية.
لأنها لقطة لحظية، لا تحتفظ بالنتيجة؛ بل اقرأها من جديد في كل مرة تحتاج فيها إلى بيانات حديثة. داخل معالج حدث تكون السلة الحديثة موجودة لديك بالفعل كحمولة، لذا يكون getCart() زائدًا هناك.

formatMoney(cents)

ينسّق مبلغًا بالوحدات الصغرى باستخدام تنسيق العملة الخاص بمتجرك. كل سعر في SDK يكون بالسنتات، لذا فهذه هي طريقة تحويله إلى شيء يمكنك عرضه.
تجاوز التنسيق باستخدام configure({ money_format }).

تغيير السلة

تحدد إجراءات البنود البند عبر key الخاص بـ Shopify، وليس عبر معرّف المتغير، لأن السلة يمكن أن تحتوي على المتغير نفسه في عدة بنود بخصائص مختلفة. اقرأه من getCart().items[n].key.

addItem(variantId, quantity?)

يضيف متغيرًا إلى السلة. القيمة الافتراضية لـ quantity هي 1. يُحل بعد استقرار السلة.
إضافة متغير موجود بالفعل في السلة تزيد كمية ذلك البند بدلًا من إنشاء بند ثانٍ، طالما أن البند الموجود لا يحمل خصائص بند (line item properties). البند الذي يحمل خصائص هو بند مستقل، لذا تحصل على بند جديد.

removeItem(key)

يزيل بندًا بالكامل.

updateItemQuantity(key, quantity)

يحدد كمية بند. تمرير 0 يزيل البند.
المثال الثاني آمن للتشغيل من cart_updated لأن فحص > 1 يكون خاطئًا في التمريرة الثانية. راجع القاعدتين.

replaceLineVariant(key, variantId)

يبدّل متغير بند مع الاحتفاظ بكميته وخصائصه. مفيد لمبدّل مقاس أو نكهة داخل السلة.
تُعاد ضبط خطة البيع الخاصة بالبند عند التبديل. يتحول بند الاشتراك إلى شراء لمرة واحدة ما لم تُعِد تطبيق خطة.
التبديل هو إضافة يتبعها إزالة، وليس تعديلًا في المكان، لذا فالنتيجة بند جديد: يحصل على key جديد ويستقر في نهاية السلة. أعد قراءة getCart() بعد ذلك بدلًا من إعادة استخدام المفتاح الذي مررته.

إعادة التحميل

refresh()

يعيد جلب السلة من Shopify. استخدمه بعد أن يغيّر شيءٌ خارج SDK السلةَ ولم يلحظ الدرج ذلك.
في معظم الأحيان لا تحتاج إلى هذا، إذ يستمع Aftersell بالفعل إلى أحداث السلة القياسية في Shopify ويعيد الجلب من تلقاء نفسه. الجأ إليه عندما يتجاوز تكامل مخصص تلك الأحداث.

visualRefresh()

يعيد تشغيل تحويلات العرض دون إعادة جلب السلة من Shopify. نادرًا ما تحتاج إليه: تسجيل (أو إلغاء تسجيل) تحويل بند أو مقارِن أو مُثري أو أيٍّ من خطافي الاشتراك يشغّل واحدًا نيابةً عنك. فقط خطافا الإضافة إلى السلة لا يفعلان ذلك، لأنهما لا يغيّران أي شيء معروض بالفعل على الشاشة. الجأ إليه عندما يتغير شيء يعتمد عليه تحويل ما دون أن تتغير السلة نفسها:

ملاحظات وحالات حدّية

  • تُحل الإجراءات غير المتزامنة عند استقرار التغيير. انتظار أحدها يتيح لك ترتيب العمل بعد أن تكون السلة قد تحدّثت فعلًا.
  • يُرجع getCart() نسخة. تعديلها لا يؤثر على السلة الحقيقية.
  • لا يوجد إجراء لأكواد الخصم. الأكواد المطبَّقة قابلة للقراءة على السلة (discountCodes وtotalDiscount) وعلى مستوى البند (discountAllocations)؛ ويطبّقها المتسوقون عبر بلوك Discount code.
  • لا يوجد إجراء لسمات السلة أو الملاحظات. السمات قابلة للقراءة على كائن السلة؛ ويكتب المتسوقون الملاحظات عبر بلوك Notes.
  • لإخفاء بند بدلًا من إزالته، استخدم registerLineTransform. الإزالة تغيّر إجمالي المتسوق؛ أما الإخفاء فلا.

إلى أين تذهب بعد ذلك