laravel extendable basket bietet mehrere abstrakte Klassen, die grundlegende E-Commerce-Korbfunktionen implementieren. Diese Kurse müssen durch Ihre Bewerbung erweitert werden.
Installieren Sie einfach die neueste Version mit Composer.
composer require divineomega/laravel-extendable-basket
Um dieses Paket nutzen zu können, müssen Sie verschiedene Einrichtungsschritte durchführen.
Zur Speicherung der Warenkorb- und Warenkorbartikeldaten sind zwei Datenbanktabellen erforderlich. Standardmäßig heißen diese baskets
und basket_items
. Dieses Paket stellt Datenbankmigrationen zum Erstellen dieser Tabellen bereit.
Um diese Migrationen auszuführen, geben Sie den folgenden Handwerkerbefehl ein.
php artisan migrate
Jetzt müssen Sie zwei verwandte Modelle erstellen, eines für die Warenkorbdetails und eines für die Details der Warenkorbartikel. Nachfolgend sind zwei Beispielmodelle dargestellt. Sie können bei Bedarf geändert oder ergänzt werden.
Erstellen Sie ein Basket-Modell.
# 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 ' );
}
}
Erstellen Sie ein BasketItem-Modell.
# 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 ' );
}
}
Alles, was in den von dieser Bibliothek bereitgestellten Warenkorb gelegt werden kann, gilt als „korbfähig“. Sie können jedes vorhandene Eloquent-Modell einfach Basket-fähig machen, indem Sie dafür sorgen, dass es die Basketable
-Schnittstelle implementiert.
Wenn Sie beispielsweise ein Product
hatten, können Sie es wie folgt ändern.
# app/Product.php
<?php
namespace App ;
use Illuminate Database Eloquent Model ;
use DivineOmega LaravelExtendableBasket Interfaces Basketable ;
class Product extends Model implements Basketable {
// ...
}
Beachten Sie, dass alle korbfähigen Modelle über eine getPrice()
und eine getName()
Methode verfügen müssen, die einen numerischen Preis bzw. einen Textnamen des korbfähigen Modells zurückgibt.
In diesem Abschnitt wird die Verwendung der von diesem Paket bereitgestellten Korb- und Korbartikelfunktionalität beschrieben. Es wird davon ausgegangen, dass Sie die erforderliche Installation und Einrichtung auf die oben beschriebene Weise durchgeführt haben.
Denken Sie daran, bei Bedarf die von Ihnen erstellten Warenkorb- und/oder Warenkorb-Artikelmodelle zu use
.
Von überall in Ihrer Bewerbung können Sie den aktuellen Warenkorb abrufen. Wenn in der Sitzung derzeit kein Warenkorb vorhanden ist, wird einer erstellt.
$ basket = Basket:: getCurrent ();
Wenn Sie den aktuellen Warenkorb verwerfen und einen neuen erstellen müssen, beispielsweise nachdem ein Benutzer eine Bestellung aufgegeben hat, können Sie die Methode getNew
verwenden.
$ basket = Basket:: getNew ();
Diese Methode dient im Wesentlichen dazu, den Korb zu leeren.
Die statischen Methoden getCurrent
und getNew
speichern die aktuelle Warenkorb-ID in der Sitzung. Wenn Sie dies nicht möchten, können Sie die Körbe wie bei jedem Eloquent-Modell selbst verwalten.
// Get new basket
$ basket = new Basket ();
// Get current basket
$ userBasketId = Auth:: user ()-> basket_id ;
$ basket = Basket:: find ( $ userBasketId );
Nachdem Sie den aktuellen Warenkorb erhalten haben, können Sie mit der add
-Methode des Warenkorbs ganz einfach Artikel hinzufügen. Sie müssen eine Menge und ein beliebiges Korbmodell angeben.
Optional können Sie auch eine Reihe von Warenkorbartikel-Metadaten bereitstellen, die zum Speichern von Informationen über Variationen eines Produkts verwendet werden können.
$ quantity = 5 ;
$ product = Product:: FindOrFail ( 1 );
$ basket -> add ( $ quantity , $ product );
$ basket -> add ( $ quantity , $ product , [ ' colour ' => ' red ' , ' size ' => ' medium ' ]);
Die Entnahme von Gegenständen aus dem Korb und dem darin enthaltenen Korbmodell ist einfach. Siehe das Beispiel unten.
foreach ( $ basket -> items as $ item ) {
$ product = $ item -> basketable ;
echo $ product -> name ;
}
Jedem Warenkorbartikel ist eine Menge zugeordnet. Sie wird festgelegt, wenn ein Artikel zum Warenkorb hinzugefügt wird, kann aber später über die Methode setQuantity
geändert werden.
$ item = $ basket -> items -> first ();
$ item -> setQuantity ( $ request -> quantity );
Korbartikel können ganz einfach durch einfaches Löschen entfernt werden. Siehe das folgende Beispiel.
$ item = $ basket -> items -> first ();
$ item -> delete ();
Um die Stückkosten eines Warenkorbartikels zu ermitteln, muss lediglich die getPrice
Methode des mit dem Warenkorbartikel verknüpften Korbmodells aufgerufen werden. Siehe das Beispiel unten.
$ item = $ basket -> items -> first ();
$ item -> basketable -> getPrice ();
Die Korbartikelklasse stellt eine getPrice
-Methode bereit, die die Zeilensumme abruft. Dies ist einfach der Preis des Warenkorbs multipliziert mit der Artikelmenge im Warenkorb. Der folgende Beispielcode zeigt, wie diese Methode verwendet wird.
$ item = $ basket -> items -> first ();
$ item -> getPrice ();
In der Korbklasse gibt es eine einzige Methode, die alle Warenkorbartikelmengen zusammenfassen kann. Rufen Sie einfach die Methode getTotalNumberOfItems
wie folgt auf.
$ numItems = $ basket -> getTotalNumberOfItems ();
In der Basket-Klasse wird eine getSubtotal
-Methode bereitgestellt, die die Gesamtsumme aller Artikel im Warenkorb bereitstellt. Siehe das folgende Beispiel.
$ subtotal = $ basket -> getSubtotal ()
Wenn Sie Versandkosten oder Rabatte hinzufügen möchten, können Sie in Ihrer Warenkorbklasse eine neue getTotal
-Methode erstellen. Diese Methode kann die getSubtotal
-Methode aufrufen und sie dann auf beliebige Weise ändern und zurückgeben.
Eine Beispiel-Basket-Klasse, die diese Idee implementiert, ist unten dargestellt.
# 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 ;
}
}