All Projects → FriendsOfREDAXO → Shoppingcart

FriendsOfREDAXO / Shoppingcart

Licence: mit
REDAXO Warenkorb AddOn - Super flexibel, ohne Checkout

Projects that are alternatives of or similar to Shoppingcart

awesome-ecommerce
Collect and develop Open Source or Free Projects for building ecommerce platform easy and fast and free
Stars: ✭ 39 (+39.29%)
Mutual labels:  shopping-cart, shopping, cart
Laravel Ecommerce
AvoRed an Open Source Laravel Shopping Cart
Stars: ✭ 1,151 (+4010.71%)
Mutual labels:  shopping-cart, cart, shopping
Cezerin2
Cezerin2 is React and Node.js based eCommerce platform. React Shopping Cart. "All In One" App: Cezerin API + Cezerin Storefront + Cezerin Dashboard.
Stars: ✭ 144 (+414.29%)
Mutual labels:  shopping-cart, cart, shopping
Gogrocery
Its an eCommerce app inspired from Amazon , big Basket , grofers ,grocery app , Etc
Stars: ✭ 62 (+121.43%)
Mutual labels:  shopping-cart, cart, shopping
Ecommwar
A leaderboard of the top open-source e-commerce platforms. Promoting the bests for building reliable stores.
Stars: ✭ 203 (+625%)
Mutual labels:  shopping-cart, cart, shopping
Nopcommerce
The most popular open-source eCommerce shopping cart solution based on ASP.NET Core
Stars: ✭ 6,827 (+24282.14%)
Mutual labels:  shopping-cart, cart
svelte-commerce
Svelte ecommerce - Headless, Authentication, Cart & Checkout, TailwindCSS, Server Rendered, Proxy + API Integrated, Animations, Stores, Lazy Loading, Loading Indicators, Carousel, Instant Search, Faceted Filters, Typescript, Open Source, MIT license. 1 command deploy to your own server, 1 click deploy to netlify.
Stars: ✭ 695 (+2382.14%)
Mutual labels:  shopping-cart, cart
e-commerce-microservices
REST Microservices architecture for E-commerce with Spring boot, Cloud and multiple modules
Stars: ✭ 102 (+264.29%)
Mutual labels:  shopping-cart, shopping
CodeIgniter4-Cart-Module
A basic port of the CodeIgniter 3 cart library for CodeIgniter 4.
Stars: ✭ 31 (+10.71%)
Mutual labels:  shopping-cart, cart
Cartkit
Cartkit - The [quick] starter kit!
Stars: ✭ 39 (+39.29%)
Mutual labels:  shopping-cart, cart
framework
Core package for avored shopping cart
Stars: ✭ 72 (+157.14%)
Mutual labels:  shopping-cart, shopping
cartify
Shopping Cart implementation to serve as a shell for building e-commerce apps | Angular 7, Node.js, MongoDB
Stars: ✭ 22 (-21.43%)
Mutual labels:  shopping, cart
Cake-Shop
A sample Cake Shop Website built with ASP.NET Core (Multi-Page Application)
Stars: ✭ 44 (+57.14%)
Mutual labels:  shopping-cart, shopping
storefront-app
Storefront by Fleetbase is an open source hyperlocal shopping or services app. Enables users to quickly launch their own shop or service booking app or setup a multi-vendor marketplace.
Stars: ✭ 40 (+42.86%)
Mutual labels:  shopping-cart, cart
tongyimall
高仿小米商城用户端,是Vue + SpringBoot的前后端分离项目,包括首页门户、商品分类、首页轮播、商品展示、购物车、地址管理等部分。管理端在另一个仓库。
Stars: ✭ 55 (+96.43%)
Mutual labels:  shopping-cart, shopping
Shopping-Cart-MERN
💸 Simple Online Shopping Cart made with the MERN Stack
Stars: ✭ 34 (+21.43%)
Mutual labels:  shopping, cart
Cezerin2 Api
Cezerin2 is React and Node.js based eCommerce platform. React Shopping Cart.
Stars: ✭ 315 (+1025%)
Mutual labels:  cart, shopping
Sapper Ecommerce
Svelte ecommerce - Headless, Authentication, Cart & Checkout, TailwindCSS, Server Rendered, Proxy + API Integrated, Animations, Stores, Lazy Loading, Loading Indicators, Carousel, Instant Search, Faceted Filters, 1 command deploy to production, Open Source, MIT license. Join us as contributor ([email protected])
Stars: ✭ 289 (+932.14%)
Mutual labels:  shopping-cart, cart
Ecommerce Open Api
果酱小店:基于 Laravel + swoole + 小程序的开源电商系统,优雅与性能兼顾 : )
Stars: ✭ 546 (+1850%)
Mutual labels:  shopping-cart, shopping
React With Redux Shop Ducks
shopping cart example with react and redux
Stars: ✭ 12 (-57.14%)
Mutual labels:  shopping-cart, cart

ShoppingCart - REDAXO Warenkorb AddOn

Ein flexibles, modernes Warenkorb-Framework (ohne Bezahlprozess)

Voraussetzungen

  • REDAXO >= 5.1.0
  • PHP >= 5.6.0

Installation

  • Release herunterladen und entpacken.
  • Ordner umbenennen in shoppingcart.
  • In den Addons-Ordner legen: /redaxo/src/addons.

Oder den REDAXO-Installer / ZIP-Upload AddOn nutzen!

Navigation

Warenkorb

Einen neuen Warenkorb erstellen

Um eine neue Warenkorb-Instanz zu erstellen, musst du eine ID und eine Storage Implementation übermitteln. Wie man eigene Storage Implementationen zur Verfügung stellt, erfährst du am Ende der README.

/*
    die beiden Parameter sind optional, per Default wird die SessionID und die SessionStore Implementation genutzt.
    möchtest du mehrere Warenkörbe pro User gleichzeitig zur Verfügung stellen, solltest du immer eine eigene ID übergeben.
    public static function factory($cartId = null, $storageImplementation = 'Cart\Storage\SessionStore')
    Möchtest du den CookieStore nutzen, bitte "Cart\Storage\CookieStore" nutzen. Der CookieStore überlebt auch neue Sessions.
*/
$cart = ShoppingCart::factory($id, $cartSessionStore);

Die Storage Implementation muss Cart\Storage\Store implementieren. Die Id wird zum Speichern / Wiederherstellen der Warenkorb-Storage Implementation genutzt.

Aktuell gibt es

  • Cart\Storage\SessionStore
  • Cart\Storage\CookieStore
  • Cart\Storage\MemcachedStore
  • Cart\Storage\MemcacheStore
  • Cart\Storage\RedisStore

Unter Warenkorb Storage Implementation wird noch mal genauer erklärt, wie Memcache(d) und Redis konfiguriert werden können.

Einen Artikel zum Warenkorb hinzufügen

Benutze die add Methode um einen Artikel zum Warenkorb hinzuzufügen. Ein gültiges Cart\CartItem muss der Methode übergeben werden. Der Namespace wird bereits automatisch von ShoppingCartItem gesetzt, nur interessant, falls du den Wrapper nicht nutzen möchtest. (siehe vendor-lib)

$item = new ShoppingCartItem;
$item->name = 'Macbook Pro';
$item->sku = 'MBP8GB';
$item->price = 1200;
$item->tax = 200;
// du kannst unbegrenzt eigene Keys mit eigenen Werten hinzufügen, z.B
// $item->description = "Meine Beschreibung zu diesem Artikel"; 
// bitte beachte, das Price und Tax nur gültige Zahlen erwarten

// hier die Warenkorb Instanz nutzen um den Artikel hinzuzufügen
$cart->add($item);

Wenn der Artikel bereits im Warenkorb existiert, wird die Menge um 1 erhöht.

Einen Artikel aus dem Warenkorb entfernen

Um einen Artikel aus dem Warenkorb zu entfernen, musst du die interne, vom AddOn generierte Item-Id nutzen und die remove Methode aufrufen.

$cart->remove('e4df90d236966195b49b0f01f5ce360a356bc76b');
// diese ID ist nicht deine Datenbank-ID oder Artikel-Id, sondern die Warenkorb-Item-Id. 
// du kommst an diesen Wert über $item->getId() (z.B. in deiner Warenkorb-Ausgabe, als hidden input-feld oder auf einen "Mülleimer-Icon"

Artikel im Warenkorb aktualisieren

Um eine Eigenschaft eines Artikels im Warenkorb zu ändern, muss die update Methode genutzt werden. Du musst die Warenkorb-Artikel-Id, den Namen der Eigenschaft (der "Key", z.B. price) und den neuen Wert übermitteln. Die Methode wird dir die neue Warenkorb-Artikel-ID als Rückgabe übermitteln (falls es sich durch das Update verändert hat)

$newId = $cart->update('e4df90d236966195b49b0f01f5ce360a356bc76b', 'price', 959.99);

Wenn du versuchst einen Artikel im Warenkorb zu verändern, welcher nicht existiert, wird ein InvalidArgumentException geworfen.

Einen Artikel-Objekt aus dem Warenkorb holen

Hol dir ein Artikel-Objekt aus dem Warenkorb mit der Warenkorb-Artikel-ID und der get Methode. Wenn der Artikel nicht existiert, wird null zurückgegeben.

$item = $cart->get('e4df90d236966195b49b0f01f5ce360a356bc76b');

if ($item) {
    // ...
}

Alle Artikel aus dem Warenkorb holen

Hole alle Artikel aus dem Warenkorb mit der all Methode. Es wird ein array aller Artikel aus dem Warenkorb zurückgegeben.

$cartItems = $cart->all();

if (count($cartItems) > 0) {
    foreach ($cartItems as $item) {
        // ...
    }
}

Prüfen, ob ein Artikel im Warenkorb existiert

Prüft ob ein Artikel im Warenkorb existiert. Nutze dazu die has Methode. Liefert true or false zurück.

if ($cart->has('e4df90d236966195b49b0f01f5ce360a356bc76b')) {
    // ...
}

Den Warenkorb leeren

Leere den Warenkorb mit der clear Methode.

$cart->clear();

Diese Methode leert auch den gespeicherten State für den ausgewählten Warenkorb.

Warenkorb State speichern / wiederherstellen

Du kannst den aktuellen Warenkorb mit der save Methode speichern.

$cart->save();

Die Methode wird die aktuellen Warenkorb-Artikel und Warenkorb-ID in den Store speichern. Du kannst den Warenkorb wiederherstellen, indem du die restore Methode verwendest.

$cart->restore();

Diese Methode wird alle zwischengespeicherten Artikel wieder zum Warenkorb hinzufügen und die Warenkorb-Id setzen. Falls es ein Problem geben sollte, wird ein Cart\CartRestoreException geworfen. Dies passiert nur, wenn:

  • Die gespeicherten Daten nicht serialisiert werden können
  • Die nicht-serialisierten Daten ungülig sind (kein array)
  • Die Warenkorb-Id nicht in den unserialisierten Daten vorhanden ist
  • Die Warenkorb-Artikel nicht in den unserialisierten Daten vorhanden sind
  • Die Warenkorb-ID ungültig ist (kein String)
  • Die Warenkorb-Artikel ungültig sind (kein Array)

Weitere Warenkorb-Methoden

Alle einzigartiken Artikel (totalUniqueItems)

Liefert die gesamte Anzahl der eindeutigen Artikel (ohne Mengen einzelner Artikel) im Warenkorb.

$cart->totalUniqueItems();
Alle Artikel (totalItems)

Liefert die Anzahl aller Artikel (inkl. Mengen) aus dem Warenkorb

$cart->totalItems();
Gesamtsumme (total)

Die Gesamtsumme aller Artikel aus dem Warenkorb inkl. Steuern. (Brutto)

$cart->total();

Du kannst die Gesamtsumme auch Netto (ohne Steuern) aus dem Warenkorb holen. Dazu nutzt du einfach die totalExcludingTax Methode.

$cart->totalExcludingTax();
Steuern (tax)

Die Gesamtsumme der Steuern für alle Artikel im Warenkorb.

$cart->tax();
toArray

Liefert den Warenkorb-Inhalt als array

$cartData = $cart->toArray();

Das Array wird folgendermaßen strukturiert sein:

[
    'id' => 'xxyfwq3235werw23wer...', // Warenkorb-ID
    'items' => [
        // Warenkorb-Artikel als Array
    ]
]
getId

Liefert die ID des Warenkorbs (Default: session_id(), wenn kein eigener Wert übergeben wurde)

$cart->getId();
getStore

Zeigt an, welche Storage Implementation genutzt wurde (Default: SessionStore)

$cart->getStore();

Warenkorb Artikel

Füge einen Artikel zum Warenkorb hinzu

$item = new ShoppingCartItem;

$item->name = 'Macbook Pro';
$item->sku = 'MBP8GB';
$item->price = 1200;
$item->tax = 200;
// oder jeder eigene Key, z.B:
// $item->description = "Meine Beschreibung";
$item->options = [
    'ram' => '8 GB',
    'ssd' => '256 GB'
];

// hier wird erst hinzugefügt, bitte $cart Objekt nutzen.
$cart->add($item);

Cart\CartItem implementiert ArrayAccess so dass die Eigenschaften des Artikels auch wie ein Array behandelt werden können:

$item = new ShoppingCartItem;

$item['name'] = 'Macbook Pro';
$item['sku'] = 'MBP8GB';
$item['price'] = 1200;
$item['tax'] = 200;
// oder $item['description'] oder $item['wasauchimmer']
$item['options'] = [
    'ram' => '8 GB',
    'ssd' => '256 GB'
];

// hier wird erst hinzugefügt, bitte $cart Objekt nutzen.
$cart->add($item);

Die Daten können auch direkt als Array an den Warenkorb-Artikel Konstruktor übergeben werden:

$itemData = [
    'name' => 'Macbook Pro',
    'sku' => 'MBP8GB',
    'price' => 1200,
    'tax' => 200,
    'whatever' => 'Mein Wert',
    'options' => [
        'ram' => '8 GB',
        'ssd' => '256 GB'
    ]
];

$item = new ShoppingCartItem($itemData);

// hier wird erst hinzugefügt, bitte $cart Objekt nutzen.
$cart->add($item);
  • Wird keine Menge (quantity) an den Konstruktor übergeben, wird quantity per default auf 1 gesetzt. Die Menge kann also auch gleich beeinflusst werden.
  • Wird kein Preis (price) übergeben, wird per default 0.00 für den Artikel gesetzt.
  • Wird keine Steuer (tax) übergeben wird per default 0.00 für den Artikel gesetzt. Bitte beachte, dass du die Steuer pro Artikel selbst berechnen musst. Dadurch bist du für jedes Land, jede Steuerart etc. flexibel. Eine einfache, eigene 19 % Berechnung ist auch schnell umgesetzt. Falls du nicht weisst wie, schreib ein Issue.

Warenkorb-Artikel ID

Jeder Artikel hat eine einzigartige ID. Diese ID wird anhand der Artikeleigenschaften automatisch generiert. Du kannst die ID mit der getId Methode oder der Eigenschaft id aufrufen. Die interne ID kann nicht selbst gesetzt werden. Falls du eine Relation zu deiner Datenbank benötigst, kannst du eine eigene Eigenschaft mittels $item->meinIdKey = 'foobar' setzen.

$id = $item->getId();
$id = $item->id;
$id = $item['id'];

Wird eine Eigenschaft (also ein Artikel-Key) geändert, verändert sich auch die interne Artikel-ID.

Warenkorb-Artikel Methoden

get

Hol dir den Wert einer Artikel Eigeschaft über seinen Keynamen.

$name = $item->get('name');

Ist nur eine Abkürzung für:

$name = $item['name'];
$name = $item->name;

set

Setze einen Wert für einen Artikel:

$item->set('name', 'Macbook Pro');

Ist nur eine Abkürzung für:

$item['name'] = 'Macbook Pro';
$item->name = 'Macbook Pro';

Wenn du die Menge (quantity) setzt, muss der Wert ein integer sein, ansonsten wird ein InvalidArgumentException geworfen.

$item->quantity = 1; // ok
$item->quantity = '1' // wird einen Fehler werfen

Wenn du für einen Artikel den Preis oder die Steuer setzt, muss der Wert numerisch (numeric) sein, ansonsten wird ein InvalidArgumentException geworfen.

$item->price = 10.00; // ok
$item->price = '10' // ok
$item->price = 'ten' // wird einen Fehler werfen
getTotalPrice

Liefert den gesamten Preis eines Artikels mit Steuern (Brutto). ((artikel preis + artikel steuer) * menge) [`((item price + item tax) * quantity)]

$item->getTotalPrice();

Du kannst die Gesamtsumme des Artikels auch ohne Steuern ermitteln (Netto). Nutze dazu einfach die Methode getTotalPriceExcludingTax. (item price * quantity)

$item->getTotalPriceExcludingTax();
getSinglePrice

Ermittle den Einzelpreis des Artikels im Warenkorb inkl. Steuern (item price + item tax)

$item->getSinglePrice();

Ohne Steuern nutzt du einfach die getSinglePriceExcludingTax Methode.

$item->getSinglePriceExcludingTax();
getTotalTax

Liefert die Gesammtsumme der Steuern für den gewählten Artikel, abhängig zur Menge (item tax * quantity).

$item->getTotalTax();
getSingleTax

Liefert die Gesamtsumme der Steuern für den gewählten Artikel unabhängig von der Menge.

$item->getSingleTax();
toArray

Liefert den Artikel als Array.

$itemArr = $item->toArray();

Array wird folgendermaßen strukturiert sein:

[
    'id' => 'e4df90d236966195b49b0f01f5ce360a356bc76b', // einzigartike Warenkorb-Artikel-Id
    'data' => [
        'name' => 'Macbook Pro',
        'sku' => 'MBP8GB',
        'price' => 1200,

        // ... weitere Artikel Eigenschaften
    ]
]

Warenkorb Storage Implementation

Ein Warenkorb Storage muss Cart\Storage\Store implementieren.

Das AddOn liefern einige Basis Sicherungs-Implementations: Cart\Storage\SessionStore, Cart\Storage\CookieStore, Cart\Storage\MemcachedStore, Cart\Storage\MemcacheStore, Cart\Storage\RedisStore.

Memcache(d) und Redis laufen Out-of-the-box, wenn die Einstellungen per Default eingestellt sind. Authentifizierung wird nicht unterstützt. Sollte das gewünscht sein, kannst du die Classes unter eigenem Namen duplizieren (zu finden unter lib/Storage). Es kann der Port und der Server eingestellt werden.

    $cart = ShoppingCart::factory($id = null, (new Cart\Storage\MemcachedStore($server, $port, $expireInMillisekunden)))
    $cart = ShoppingCart::factory($id = null, (new Cart\Storage\MemcacheStore($server, $port, $expireInMillisekunden)))
    $cart = ShoppingCart::factory($id = null, (new Cart\Storage\RedisStor($server, $port, $expireInSekunden)))

Wenn die save Methode des Warenkorbs aufgerufen wird, übermittelt das AddOn die Warenkorb-ID und die serialisierten Daten an die put Methode der Storage Implementation.

Wenn die restore Methode des Warenkorbs aufgerufen wird, übermittelt das AddOn die Warenkorb-ID an die get Methode der Storage Implementation.

Wenn die clear Methode des Warenkorbs aufgerufen wird, übermittelt das AddOn die Warenkorb-ID an die flush Methode der Storage Implementation.

Eine Beispiel-Implementation könnte so aussehen (kannst du mit Redis, Memcached, MySQL oder wie auch immer umsetzen. Erstelle einfach eine Klasse dazu und leg diese in deinem project AddOn unter "lib" ab)

use Cart\Store;

class SessionStore implements Store
{
    /**
     * {@inheritdoc}
     */
    public function get($cartId)
    {
        return isset($_SESSION[$cartId]) ? $_SESSION[$cartId] : serialize([]);
    }

    /**
     * {@inheritdoc}
     */
    public function put($cartId, $data)
    {
        $_SESSION[$cartId] = $data;
    }

    /**
     * {@inheritdoc}
     */
    public function flush($cartId)
    {
        unset($_SESSION[$cartId]);
    }
}

Beispiel Modulausgabe

<?php
$cart = ShoppingCart::factory();

$itemData = [
    'name' => 'Macbook Pro',
    'sku' => 'MBP8GB',
    'price' => 1200,
    'tax' => 200,
    'options' => [
        'ram' => '8 GB',
        'ssd' => '256 GB'
    ]
];
$item = new ShoppingCartItem($itemData);
$cart->add($item);

dump($item);

$item = new ShoppingCartItem;
$item->name = 'Macbook Pro';
$item->sku = 'MBP8GB';
$item->price = 1200;
$item->tax = 200;
$item->meinkey = 'is cool';
$cart->add($item);

$cart->update($item->getId(), 'price', 959.99);

dump($item);
dump($item->getId());
dump($cart);
dump($cart->getStore());
dump($cart->getId());
dump($cart->toArray());

Credits

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].