laravel extendable basket menyediakan beberapa kelas abstrak yang mengimplementasikan fungsionalitas keranjang e-commerce dasar. Kelas-kelas ini harus diperluas oleh aplikasi Anda.
Instal saja versi terbaru menggunakan composer.
composer require divineomega/laravel-extendable-basket
Anda perlu melakukan berbagai langkah pengaturan untuk menggunakan paket ini.
Dua tabel database diperlukan untuk menyimpan data keranjang dan item keranjang. Secara default ini disebut baskets
dan basket_items
. Paket ini menyediakan migrasi database untuk membuat tabel ini.
Untuk menjalankan migrasi ini, masukkan perintah artisan berikut.
php artisan migrate
Sekarang Anda perlu membuat dua model terkait, satu untuk menyimpan detail keranjang dan satu lagi untuk menyimpan detail item keranjang. Dua contoh model ditunjukkan di bawah ini. Mereka dapat dimodifikasi atau ditambahkan sesuai kebutuhan.
Buat model Keranjang.
# 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 ' );
}
}
Buat model BasketItem.
# 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 ' );
}
}
Apa pun yang dapat dimasukkan ke dalam keranjang yang disediakan perpustakaan ini dianggap 'basketable'. Anda dapat membuat model Eloquent yang ada dapat dimasukkan ke dalam keranjang hanya dengan membuatnya mengimplementasikan antarmuka Basketable
.
Misalnya, jika Anda memiliki model Product
, Anda dapat mengubahnya sebagai berikut.
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
Perhatikan bahwa setiap model keranjang harus memiliki metode getPrice()
dan getName()
yang mengembalikan harga numerik dan nama tekstual dari keranjang tersebut.
Bagian ini menjelaskan penggunaan fungsi keranjang dan item keranjang yang disediakan oleh paket ini. Ini mengasumsikan Anda telah melakukan instalasi dan pengaturan yang diperlukan, dengan cara yang ditentukan di atas.
Ingatlah untuk use
model keranjang dan/atau item keranjang yang telah Anda buat, jika diperlukan.
Dari mana saja di aplikasi Anda, Anda bisa mendapatkan keranjang saat ini. Jika saat ini tidak ada keranjang di sesi tersebut, keranjang akan dibuat.
$ basket = Basket:: getCurrent ();
Jika Anda perlu membuang keranjang saat ini dan membuat keranjang baru, misalnya setelah pengguna melakukan pemesanan, Anda dapat menggunakan metode getNew
.
$ basket = Basket:: getNew ();
Metode ini pada dasarnya berfungsi ganda seperti mengosongkan keranjang.
Metode statis getCurrent
dan getNew
menyimpan ID keranjang saat ini dalam sesi tersebut. Jika Anda tidak menginginkan hal ini, Anda dapat mengelola keranjang sendiri, seperti yang Anda lakukan pada model Eloquent lainnya.
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
Setelah mendapatkan keranjang saat ini, Anda dapat dengan mudah menambahkan item ke dalamnya menggunakan metode add
keranjang. Anda perlu menyediakannya dengan jumlah dan model keranjang apa pun.
Secara opsional, Anda juga dapat menyediakan serangkaian data meta item keranjang, yang dapat digunakan untuk menyimpan informasi tentang variasi suatu produk.
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
Mendapatkan barang dari keranjang dan model keranjang yang dikandungnya dapat dilakukan dengan mudah. Lihat contoh di bawah ini.
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
Setiap item keranjang memiliki kuantitas yang terkait dengannya. Ini diatur ketika item ditambahkan ke keranjang, tetapi nanti dapat dimodifikasi melalui metode setQuantity
.
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
Item keranjang dapat dengan mudah dihapus hanya dengan menghapusnya. Lihat contoh berikut.
$ item = $ basket -> items -> first ();
$ item -> delete ();
Mendapatkan biaya unit item keranjang hanya melibatkan pemanggilan metode getPrice
dari model keranjang yang terkait dengan item keranjang. Lihat contoh di bawah ini.
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
Kelas item keranjang menyediakan metode getPrice
yang mendapatkan total baris. Ini hanyalah harga keranjang dikalikan dengan jumlah item keranjang. Contoh kode di bawah ini menunjukkan cara menggunakan metode ini.
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
Ada satu metode di kelas keranjang yang dapat menjumlahkan semua jumlah item keranjang. Panggil saja metode getTotalNumberOfItems
, sebagai berikut.
$ numItems = $ basket -> getTotalNumberOfItems ();
Metode getSubtotal
disediakan di kelas keranjang yang menyediakan total semua item dalam keranjang. Lihat contoh berikut.
$ subtotal = $ basket -> getSubtotal ()
Jika Anda ingin menambahkan biaya pengiriman atau diskon, Anda dapat membuat metode getTotal
baru di kelas keranjang Anda. Metode ini dapat memanggil metode getSubtotal
, lalu memodifikasi dan mengembalikannya, sesuai keinginan Anda.
Contoh kelas Basket yang mengimplementasikan ide ini ditunjukkan di bawah.
# 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 ;
}
}