ggggino/skuskucart-bundle

此插件旨在成为一个精简的购物车管理器

安装: 114

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 3

开放问题: 2

类型:symfony-bundle

2.1.1 2020-02-27 15:58 UTC

README

Total Downloads Latest Stable Version Travis (.org) Scrutinizer Code Quality

高度可定制的Symfony购物车管理插件。该购物车管理器的目标是实现以下功能:

将此物品添加到购物车

许可协议

License

安装

1 将插件添加到您的供应商目录

composer require ggggino/skuskucart-bundle

2app/AppKernel.php 中注册插件

$bundles = array(
    // ...
    
    // Multi step form
    new Craue\FormFlowBundle\CraueFormFlowBundle(),
    
    // Payment bundle
    new Payum\Bundle\PayumBundle\PayumBundle(),
    
    // Cart bundle
    new GGGGino\SkuskuCartBundle\GGGGinoSkuskuCartBundle(),
);

3 至少创建一种货币

bin/console ggggino_skusku:currency:create

4 设置默认语言和货币

parameters:
    locale: it
    currency: EUR

配置

插件完整配置

# config.yml
ggggino_skuskucart:
    allow_anonymous_shop: false
    cart_mode: 'single_page'
    stepform:
        cart:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep1FormType
            label: Step 1
        chosePayment:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep2FormType
            label: Step 2
        payment:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep3FormType
            label: Step 3
    templates:
        cart_layout: 'GGGGinoSkuskuCartBundle::cart_page.html.twig'
        done_layout: 'xxxBundle:xxx:xxx.html.twig'

额外配置

# config.yml
parameters:
    locale: it
    currency: EUR

添加替换接口的目标实体

# config.yml
doctrine:
    orm:
        resolve_target_entities:
              GGGGino\SkuskuCartBundle\Model\SkuskuProductInterface: GGGGino\SkuskuCartBundle\Entity\SkuskuProduct
              GGGGino\SkuskuCartBundle\Model\SkuskuCustomerInterface: GGGGino\SkuskuCartBundle\Entity\SkuskuUser
              GGGGino\SkuskuCartBundle\Model\SkuskuCurrencyInterface: GGGGino\SkuskuCartBundle\Entity\SkuskuCurrency
              GGGGino\SkuskuCartBundle\Model\SkuskuLangInterface: GGGGino\SkuskuCartBundle\Entity\SkuskuLanguage

添加基本路由

# routing.yml
skusku:
    resource: "@GGGGinoSkuskuCartBundle/Controller/"
    type:     annotation

使用 resolve_target_entities 将接口实体替换为具体实体

doctrine:
    orm:
        resolve_target_entities:
              GGGGino\SkuskuCartBundle\Model\SkuskuProductInterface: AppBundle\Entity\Product
              GGGGino\SkuskuCartBundle\Model\SkuskuCustomerInterface: AnotherBundle\Entity\User
              GGGGino\SkuskuCartBundle\Model\SkuskuCurrencyInterface: My\CustomBundle\Entity\Currency
              GGGGino\SkuskuCartBundle\Model\SkuskuLangInterface: ExtraBundle\Entity\Language

每个使用的类都必须实现正确的接口。

  1. 货币

    use GGGGino\SkuskuCartBundle\Model\SkuskuCurrencyInterface;
    
    class Currency implements SkuskuCurrencyInterface
    {
    }
  2. 用户

    use GGGGino\SkuskuCartBundle\Model\SkuskuCustomerInterface;
    
    class User implements SkuskuCustomerInterface
    {
    }
  3. 产品

    use GGGGino\SkuskuCartBundle\Model\SkuskuProductInterface;
    
    class Product implements SkuskuProductInterface
    {
    }
  4. 语言

    use GGGGino\SkuskuCartBundle\Model\SkuskuLangInterface;
    
    class Lang implements SkuskuLangInterface
    {
    }

如果您需要预构建的实体,可以扩展其自己的基类。

  1. 货币
    use GGGGino\SkuskuCartBundle\Model\SkuskuCurrencyBase;
    class Currency extends SkuskuCurrencyBase
    {
    }

Twig 函数

打印购物车预览

{{ render_preview_cart() }}

打印语言选择块

{{ render_lang_cart() }}

打印货币选择块

{{ render_currency_cart() }}

购物车管理器 API

购物车管理器

获取购物车管理器实例

use GGGGino\SkuskuCartBundle\Service\CartManager;
.
.
.
$cartManager = $this->get(CartManager::class);

CartManager::persistCart(SkuskuCart $cart)

将购物车添加到EntityManager

use GGGGino\SkuskuCartBundle\Model\SkuskuCart;
.
.
.
/** @var SkuskuCart $finalCart */
$finalCart = ...

$cartManager->persistCart($finalCart);

CartManager::flushCart(SkuskuCart $cart);

刷新购物车

$cartManager->flushCart($finalCart);

CartManager::addProductToCart(SkuskuProductInterface $product, int $quantity)

将某些产品添加到购物车

$quantity = 20;
$cartManager->addProductToCart($product, $quantity);

CartManager::createNewCart(SkuskuCustomerInterface $customer = null)

从给定的客户创建新的购物车,如果未传递客户,则从会话中获取

$cartManager->createNewCart($customer);

CartManager::createNewOrderFromCart(SkuskuCart $cart)

从给定的购物车构建新的订单。例如,当支付成功时使用

$cartManager->createNewOrderFromCart($cart);

购物车页面

/cart

命令

bin/console ggggino_skusku:cart:clear

清除所有 skuskutables

bin/console ggggino_skusku:currency:create

创建给定实体的行 - 开发

bin/console ggggino_skusku:doctor:db

检查安装程序是否成功

配置细节

您可以选择是否允许匿名用户购物

# config.yml
ggggino_skuskucart:
    allow_anonymous_shop: false

在默认步骤和创建新步骤之间进行选择,记住对于 "cart|chosePayment|payment" 您只能覆盖配置

# config.yml
ggggino_skuskucart:
    stepform:
        cart:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep1FormType
            label: Step 1
        chosePayment:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep2FormType
            label: Step 2
        payment:
            form_type: GGGGino\SkuskuCartBundle\Form\CartFlowType\CartStep3FormType
            label: Step 3

如果您需要在表单步骤中进行更多自定义,则可以覆盖它。您的 CartFlow 只需继承

# config.yml
ggggino_skuskucart:
    stepform_class: GGGGino\SkuskuCartBundle\Form\CartFlow

如果您需要更改模板

# config.yml
ggggino_skuskucart:
    templates:
        cart_layout: 'GGGGinoSkuskuCartBundle::cart_page.html.twig'
        done_layout: 'xxxBundle:xxx:xxx.html.twig'

事件

模板

待办事项

  • 创建购物车的API
  • 订购步骤表单项

测试来源: https://github.com/nelmio/NelmioApiDocBundle