syscover/pulsar-shopping-cart

此包最新版本(dev-master)没有可用的许可信息。

购物车包

dev-master 2019-04-21 16:11 UTC

This package is auto-updated.

Last update: 2024-09-22 03:54:21 UTC


README

Total Downloads

安装

1 - 在安装Laravel框架后,在文件composer.json中require对象内插入此值

composer require syscover/pulsar-shopping-cart

2 - 执行发布命令

php artisan vendor:publish --provider="Syscover\ShoppingCart\ShoppingCartServiceProvider"

##运行Laravel测试

./vendor/bin/phpunit

通用配置环境值

我们指示可用的配置变量,要更改它们,您应从环境变量文件.env中进行操作

设置产品价格税率 [默认值 1]

定义在产品中引入的价格类型,创建或更新产品时将查询此选项。您有以下值

  • 值:1 不含税
  • 值:2 含税
SHOPPING_CART_PRODUCT_TAX_PRICES=1

设置运费价格税率 [默认值 1]

定义在运费价格中引入的价格类型,创建或更新运费价格时将查询此选项

  • 值:1 不含税
  • 值:2 含税
SHOPPING_CART_TAX_SHIPPING_PRICES=1

设置产品显示价格税率 [默认值 1]

定义您想要如何显示产品价格。您有以下值

  • 值:1 不含税
  • 值:2 含税
SHOPPING_CART_PRODUCT_TAX_DISPLAY_PRICES=1

设置运费显示价格税率 [默认值 1]

定义您想要如何显示运费价格

  • 值:1 不含税
  • 值:2 含税
SHOPPING_CART_TAX_SHIPPING_DISPLAY_PRICES=1

##购物车项为您提供了以下方法使用

要添加项目,我们需要创建具有以下属性的Item对象

  • id:string = 产品ID
  • name:string = 产品名称
  • quantity:float = 您想添加的产品数量
  • inputPrice:float = 单位产品价格
  • weight:float [默认 1.000] = 产品重量
  • transportable:boolean [默认 true] = 设置产品是否可以交付
  • taxRule:TaxRule[] [默认 []] = 为此产品设置税率规则
  • options:array [默认 []] = 设置一个关联数组以设置自定义选项

将购物车项添加到购物车,您需要创建Item对象以添加到购物车,如果您想添加多个元素,可以使用Item对象或Items数组。

// Basic add Item to Cart
CartProvider::instance()->add(new Item('293ad', 'Product 1', 1, 9.99));

// Multiple add Items to Cart
CartProvider::instance()->add([
    new Item('293ad', 'Product 1', 1, 9.99),
    new Item('979ze', 'Product 2', 1, 12.90)
]);

// Multiple add Items with options to Cart
CartProvider::instance()->add([
    new Item('293ad', 'Product 1', 1, 9.99, 1.000, true, [], ['size' => 'L']),
    new Item('979ze', 'Product 2', 1, 12.90, 1.000, true, [], ['size' => 'M'])
]);

我们已创建TaxRule对象来从购物车计算税率,此对象具有以下属性

  • name:string = 税率名称
  • taxRate:float = 税率百分比
  • priority:int [默认 0] = 计算小计税率的顺序。如果优先级不同,则最高税率将计算在小计上,较低优先级的税率将计算在较低的小计上
  • order:int [默认 0] = 在屏幕上显示税率的顺序

购物车已准备好TaxRule对象,您可以为每个cartItem对象添加税率规则。您只能添加一个TaxRule或多个以数组形式添加的税率规则

// Multiple add Items to Cart with options and one tax rule
CartProvider::instance()->add([
    new Item('293ad', 'Product 1', 1, 9.99, 1.000, true, new TaxRule('IVA', 21), ['size' => 'L']),
    new Item('979ze', 'Product 2', 1, 12.90, 1.000, true, new TaxRule('IVA', 21), ['size' => 'M'])
]);

// Multiple add Items to Cart with options and various tax rules
CartProvider::instance()->add([
    new Item('293ad', 'Product 1', 1, 9.99, 1.000, true, [
            new TaxRule('IVA', 21, 0, 0),
            new TaxRule('Customs', 10, 1, 1),
        ], ['size' => 'L']),
    new Item('979ze', 'Product 2', 1, 12.90, 1.000, true, 
            new TaxRule('IVA', 21, 0, 0),
            new TaxRule('Customs', 10, 1, 1),
        ], ['size' => 'M'])
]);

定义了规则后,您可以使用此方法更改它们

foreach (CartProvider::instance()->getCartItems() as $item)
{
    $item->resetTaxRules();
}

当然,如果需要,您也可以重新加载其他规则

foreach (CartProvider::instance()->getCartItems() as $item)
{
    $item->addTaxRule(new TaxRule('IVA', 18, 0, 0),);
}

请记住,如果您重置taxRules或向项目添加新税率规则,您必须从小计强制计算金额

$item->calculateAmounts(Cart::PRICE_WITHOUT_TAX);

要更新项目数量,您有setQuantity方法,您将传递给更新方法的rowId和新的数量

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';

CartProvider::instance()->setQuantity($rowId, 2);

如果您想更新项目的更多属性,您可以将Item对象传递给更新方法,其中包含要更新的项目的rowId。

CartProvider::instance()->update($rowId, new Item('293ad', 'Product 1', 1, 19.99, 1.000, true, new TaxRule('IVA', 21), ['size' => 'L']));

要从购物车中删除元素,请使用购物车的remove()方法,并传递rowId

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';

CartProvider::instance()->remove($rowId);

如果您想获取购物车项,您有getCartItems方法。此方法将返回一个CartItems集合,您可以通过迭代它来向客户展示内容。

CartProvider::instance()->getCartItems();

如果您想从每个商品中获取数量,可以使用每个商品的getQuantity方法

foreach(CartProvider::instance()->getCartItems() as $item)
{
  $item->getQuantity();
}

如果您想根据其rowId从购物车中获取商品,可以简单地在购物车上调用get()方法并传入rowId。

$rowId = 'da39a3ee5e6b4b0d3255bfef95601890afd80709';

CartProvider::instance()->getCartItems()->get($rowId);

如果您想完全删除购物车的所有内容,可以调用购物车的destroy方法。这将移除当前购物实例的所有CartItems。

CartProvider::instance()->destroy();

获取不含税的子总金额

CartProvider::instance()->subtotal;

// or subtotal price formatted
CartProvider::instance()->getSubtotal();

获取所有商品的总税额

CartProvider::instance()->taxAmount;

// or tax amount formatted
CartProvider::instance()->getTaxAmount();

获取总价

CartProvider::instance()->total;

// or total price formatted
CartProvider::instance()->getTotal();

设置运费金额

CartProvider::instance()->shippingAmount = 10.00;

获取运费金额

CartProvider::instance()->shippingAmount;

// or shipping amount formatted
CartProvider::instance()->getShippingAmount();

要知道购物车是否包含任何可运输的商品,您有这个方法

CartProvider::instance()->hasItemTransportable();

要知道是否有运载数据

CartProvider::instance()->hasShipping();

要设置运载数据,您可以保存您想要的数据

CartProvider::instance()->setShipping([
    'address'   => '4st Houston',
    'zip'       => '28844',
    ...
]);

要获取运载数据,返回一个集合对象

CartProvider::instance()->getShipping();

获取购物车中商品的数量,总商品数量

CartProvider::instance()->getQuantity();

要找到购物车中的商品,您可以使用search()方法。如您所见,闭包将接收两个参数。第一个是用于检查的CartItem。第二个参数是此CartItem的rowId。

该方法将返回一个包含所有找到的Items的Collection

这种搜索方式让您完全控制搜索过程,并让您能够创建非常精确和具体的搜索。

  CartProvider::instance()->search(function ($cartItem, $rowId) {
      return $cartItem->id === 1;
  });

该包也支持购物车的多个实例。工作方式如下:您可以使用CartProvider::instance('newInstance')设置当前购物实例,此时,活动的购物实例是newInstance,因此当您添加、删除或获取购物车的内容时,您与购物车的newInstance实例一起工作。如果您想切换实例,只需再次调用CartProvider::instance('otherInstance'),然后您又与otherInstance一起工作。

默认购物车实例称为default,因此当您不使用实例时,CartProvider::instance()->getCartItems();与CartProvider::instance('default')->getCartItems()相同。

所以有一个小例子

CartProvider::instance('shopping')->add(new Item('192ao12', 'Product 1', 1, 9.99));

// Get items of the 'shopping' cart
CartProvider::instance('shopping')->getCartItems();

CartProvider::instance('wishlist')->add(new Item('sdjk922', 'Product 2', 1, 19.95));

// Get items of the 'wishlist' cart
CartProvider::instance('wishlist')->getCartItems();

我们已创建PriceRule对象,以在购物车商品上应用折扣

  • name:string = 价格规则名称
  • description:string = 规则描述
  • discountType:int = 您有多种选择,下面有所有选项
  • freeShipping:boolean [默认为false] = 选择此选项以设置具有免费送货的规则
  • discountFixed:float [默认为null] = 设置固定折扣金额
  • discountPercentage:float [默认为null] = 设置折扣百分比以折扣
  • maximumDiscountAmount:float [默认为null] = 如果您选择折扣百分比,您可以设置折扣的最大金额
  • applyShippingAmount:boolean [默认为false] = 如果您想将折扣应用于运费金额,则选择此选项
  • combinable:boolean [默认为true] = 设置此价格规则是否可以与同一购物车中的其他规则组合

使用PriceRule类中的这些常量,您可以定义折扣类型

WITHOUT_DISCOUNT
DISCOUNT_SUBTOTAL_PERCENTAGE
DISCOUNT_SUBTOTAL_FIXED_AMOUNT
DISCOUNT_TOTAL_PERCENTAGE
DISCOUNT_TOTAL_FIXED_AMOUNT

要设置价格规则,您可以使用addCartPriceRule方法

    CartProvider::instance()->addCartPriceRule(
        new PriceRule(
            'My first price rule',                      // name
            'For being a good customer',                // description
            PriceRule::DISCOUNT_SUBTOTAL_PERCENTAGE,    // discount type
            false,                                      // free shipping
            10.00                                       // discount fixed amount
        )
    );

应用定价规则时需要考虑的场景

  • 我们已在子总金额和总价上创建了折扣,但您不能将这两个折扣应用于同一购物车。
  • 如果应用百分比折扣和固定折扣,则首先应用固定折扣,最后应用百分比折扣。

##事件

您可以在app/Providers/EventServiceProvider.php中注册这些事件来管理各种操作。

protected $listen = [
    ...
    'Syscover\...\Events\YourEvent' => [
        'App\Listeners\YourListener'
    ],
    ...
];
当产品被添加时的事件

如果监听器返回一个 \Syscover\ShoppingCart\Item,它将被添加

Syscover\ShoppingCart\Events\ShoppingCartAddProduct