laravel extendable basket 기본 전자상거래 바구니 기능을 구현하는 여러 추상 클래스를 제공합니다. 이러한 클래스는 애플리케이션에 의해 확장되어야 합니다.
작곡가를 사용하여 최신 버전을 설치하십시오.
composer require divineomega/laravel-extendable-basket
이 패키지를 사용하려면 다양한 설정 단계를 수행해야 합니다.
장바구니 및 장바구니 항목 데이터를 저장하려면 두 개의 데이터베이스 테이블이 필요합니다. 기본적으로 이러한 항목은 baskets
및 basket_items
라고 합니다. 이 패키지는 이러한 테이블을 생성하기 위한 데이터베이스 마이그레이션을 제공합니다.
이러한 마이그레이션을 실행하려면 다음 artisan 명령을 입력하세요.
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 ' );
}
}
이 도서관에서 제공하는 바구니에 담을 수 있는 모든 것은 '바구니에 담을 수 있는' 것으로 간주됩니다. 간단하게 Basketable
인터페이스를 구현함으로써 기존 Eloquent 모델을 바구니화 가능하게 만들 수 있습니다.
예를 들어 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
메소드를 호출한 다음 원하는 방식으로 이를 수정하고 반환할 수 있습니다.
이 아이디어를 구현하는 Basket 클래스의 예는 다음과 같습니다.
# 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 ;
}
}