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 ' );
}
}
สร้างแบบจำลอง 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 ' );
}
}
สิ่งใดก็ตามที่สามารถใส่ลงในตะกร้าที่ห้องสมุดจัดเตรียมไว้ให้จะถือเป็น 'ตะกร้า' คุณสามารถทำให้โมเดล 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
เก็บ ID ตะกร้าปัจจุบันในเซสชัน หากคุณไม่ต้องการสิ่งนี้ คุณสามารถจัดการตะกร้าด้วยตัวเองได้ เช่นเดียวกับที่คุณทำกับโมเดล 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 ;
}
}