توفر laravel extendable basket العديد من الفئات المجردة التي تنفذ وظائف سلة التجارة الإلكترونية الأساسية. يجب أن يتم تمديد هذه الفئات من خلال التطبيق الخاص بك.
فقط قم بتثبيت أحدث إصدار باستخدام الملحن.
composer require divineomega/laravel-extendable-basket
تحتاج إلى تنفيذ خطوات الإعداد المختلفة للاستفادة من هذه الحزمة.
يلزم وجود جدولين لقاعدة البيانات لتخزين بيانات عناصر السلة والسلة. بشكل افتراضي، تُسمى هذه baskets
و basket_items
. توفر هذه الحزمة عمليات ترحيل قاعدة البيانات لإنشاء هذه الجداول.
لتشغيل عمليات الترحيل هذه، أدخل الأمر الحرفي التالي.
php artisan migrate
أنت الآن بحاجة إلى إنشاء نموذجين مرتبطين، أحدهما للاحتفاظ بتفاصيل السلة والآخر للاحتفاظ بتفاصيل عناصر السلة. يتم عرض نموذجين نموذجيين أدناه. ويمكن تعديلها أو إضافتها حسب الضرورة.
إنشاء نموذج سلة.
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items (): HasMany
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
}
إنشاء نموذج سلة العناصر.
# app/BasketItem.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models BasketItem as BasketItemModel ;
class BasketItem extends BasketItemModel
{
public function basket (): BelongsTo
{
return $ this -> belongsTo ( ' AppBasket ' );
}
}
أي شيء يمكن وضعه في السلة التي توفرها هذه المكتبة يعتبر "قابلاً للسلة". يمكنك جعل أي نموذج Eloquent موجودًا قابلاً للسلة ببساطة عن طريق جعله ينفذ الواجهة Basketable
.
على سبيل المثال، إذا كان لديك نموذج Product
، فيمكنك تغييره على النحو التالي.
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
لاحظ أن أي نماذج قابلة للسلة يجب أن تحتوي على getPrice()
وطريقة getName()
التي تُرجع سعرًا رقميًا واسمًا نصيًا للسللة، على التوالي.
يصف هذا القسم استخدام وظيفة السلة وعناصر السلة التي توفرها هذه الحزمة. يفترض أنك قمت بإجراء التثبيت والإعداد المطلوبين، بالطريقة المحددة أعلاه.
تذكر أن use
نماذج عناصر السلة و/أو السلة التي قمت بإنشائها، عند الضرورة.
من أي مكان في التطبيق الخاص بك، يمكنك الحصول على السلة الحالية. إذا لم تكن هناك سلة موجودة حاليًا في الجلسة، فسيتم إنشاء واحدة.
$ basket = Basket:: getCurrent ();
إذا كنت بحاجة إلى تجاهل السلة الحالية وإنشاء سلة جديدة، على سبيل المثال بعد قيام المستخدم بتقديم طلب، فيمكنك استخدام طريقة getNew
.
$ basket = Basket:: getNew ();
تعمل هذه الطريقة بشكل أساسي على إفراغ السلة.
تقوم الطرق الثابتة getCurrent
و getNew
بتخزين معرف السلة الحالي في الجلسة. إذا كنت لا تريد ذلك، يمكنك إدارة السلال بنفسك، كما تفعل مع أي نموذج Eloquent.
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
بعد الحصول على السلة الحالية، يمكنك بسهولة إضافة عناصر إليها باستخدام طريقة add
الخاصة بالسلة. تحتاج إلى تزويدها بكمية وأي نموذج قابل للسلة.
اختياريًا، يمكنك أيضًا توفير مجموعة من البيانات التعريفية لعنصر السلة، والتي يمكن استخدامها لتخزين معلومات حول الاختلافات في المنتج.
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
يمكن بسهولة الحصول على العناصر من السلة والنموذج القابل للسلة الذي تحتوي عليه. انظر المثال أدناه.
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
كل عنصر في السلة له كمية مرتبطة به. يتم تعيينه عند إضافة عنصر إلى السلة، ولكن يمكن تعديله لاحقًا عبر طريقة setQuantity
.
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
يمكن بسهولة إزالة عناصر السلة بمجرد حذفها. انظر المثال التالي.
$ item = $ basket -> items -> first ();
$ item -> delete ();
يتضمن الحصول على تكلفة الوحدة لعنصر السلة فقط استدعاء طريقة getPrice
للنموذج القابل للسلة المرتبط بعنصر السلة. انظر المثال أدناه.
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
توفر فئة عناصر السلة طريقة getPrice
التي تحصل على إجمالي السطر. وهذا ببساطة هو سعر السلة مضروبًا في كمية عنصر السلة. يوضح رمز المثال أدناه كيفية استخدام هذه الطريقة.
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
توجد طريقة واحدة في فئة السلة يمكنها جمع كافة كميات عناصر السلة. فقط اتصل بالطريقة getTotalNumberOfItems
، كما يلي.
$ numItems = $ basket -> getTotalNumberOfItems ();
يتم توفير طريقة getSubtotal
في فئة السلة التي توفر إجمالي كافة العناصر الموجودة في السلة. انظر المثال التالي.
$ subtotal = $ basket -> getSubtotal ()
إذا كنت ترغب في إضافة تكاليف التوصيل أو الخصومات، فيمكنك إنشاء طريقة getTotal
جديدة في فئة السلة الخاصة بك. يمكن لهذه الطريقة استدعاء طريقة getSubtotal
، ثم تعديلها وإعادتها بأي طريقة تريدها.
يظهر أدناه مثال على فئة السلة التي تنفذ هذه الفكرة.
# app/Basket.php
<?php
namespace App ;
use DivineOmega LaravelExtendableBasket Models Basket as BasketModel ;
class Basket extends BasketModel
{
public function items ()
{
return $ this -> hasMany ( ' AppBasketItem ' );
}
public function getTotal ()
{
$ deliveryCost = 3.99 ;
return $ this -> getSubtotal () + $ deliveryCost ;
}
}