bitbag/product-bundle-plugin

Sylius的产品组合插件。

v2.4.1 2024-06-25 18:36 UTC

README

BitBag SyliusProductBundlePlugin

Slack Support

我们希望影响许多独特的电子商务项目并在全球范围内建立我们的品牌认知度,因此我们积极参与创建开源解决方案,特别是针对Sylius。我们已经创建了超过35个扩展,这些扩展几乎被下载了200万次。

您可以在我们的网站上找到更多关于我们的电子商务服务和技术的信息: https://bitbag.io/。我们还创建了一个独特的服务,专门用于创建插件: https://bitbag.io/services/sylius-plugin-development

您喜欢我们的工作吗?您愿意加入我们吗?查看“职业”选项卡:https://bitbag.io/pl/kariera

关于我们

BitBag是一家软件公司,它实施定制的电子商务平台,包括整个基础设施——从创建电子商务平台到实施PIM和CMS系统,再到开发定制的电子商务应用程序、专业的B2B解决方案以及从其他平台迁移。

我们积极参与Sylius的开发。我们已经完成了超过150个项目,与全球的客户合作,包括中小企业和大型国际公司。我们已经为诸如Mytheresa、Foodspring、Planeta Huerto(家乐福集团)、Albeco、Mollie和ArtNight等重要品牌完成了项目。

我们有一个由70名专家组成的团队:业务分析师和顾问、电子商务开发者、项目经理和QA测试员。

我们的服务

  • B2B和B2C电子商务平台实施
  • 多卖方市场平台实施
  • 电子商务迁移
  • Sylius插件开发
  • Sylius咨询
  • 项目维护和长期支持
  • PIM和CMS实施

关于BitBag的Sylius的一些数据

  • 70名专家
  • +150个基于Sylius交付的项目
  • BitBag客户的30个国家
  • 在Sylius生态系统中的7年
  • +35个为Sylius创建的插件

目录

概述

SyliusProductBundle插件允许您从商店中现有的产品中创建组合。组合显示和表现方式与商店中的任何其他产品一样。这将允许客户同时将多个产品添加到购物车中。更重要的是,以组合形式销售的产品鼓励客户达到最低配送消费限额——与免费配送相比,增加了平均订单价值。

安装

  1. 需要使用composer的插件

    composer require bitbag/product-bundle-plugin --no-scripts
  2. config/bundles.php文件中在Sylius\Bundle\ApiBundle\SyliusApiBundle之后添加插件依赖项。

        return [
         ...
        
            BitBag\SyliusProductBundlePlugin\BitBagSyliusProductBundlePlugin::class => ['all' => true ],
        ];
  3. 在您的config/packages/_sylius.yaml文件中导入所需配置

    # config/packages/_sylius.yaml
    
    imports:
        ...
        
        - { resource: "@BitBagSyliusProductBundlePlugin/Resources/config/config.yml" }
  4. 在您的config/routes.yaml文件中导入路由

    # config/routes.yaml
    ...
    
    bitbag_sylius_product_bundle_plugin:
        resource: "@BitBagSyliusProductBundlePlugin/Resources/config/routing.yml"
  5. 扩展Product(包括Doctrine映射)

    <?php 
    
    declare(strict_types=1);
    
    namespace App\Entity\Product;
    
    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundlesAwareTrait;
    use BitBag\SyliusProductBundlePlugin\Entity\ProductInterface;
    use Sylius\Component\Core\Model\Product as BaseProduct;
    
    class Product extends BaseProduct implements ProductInterface
    {
        use ProductBundlesAwareTrait;  
    }

    映射(属性)- 通过创建新的覆盖组合特性,并在Entity/Product/Product中使用它。

    注意。如果您正在使用属性映射,请在您的Product实体中使用您的ProductTrait,而不是插件中的ProductBundlesAwareTrait

    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleInterface;
    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundlesAwareTrait;
    use Doctrine\ORM\Mapping as ORM;
    
    trait ProductTrait
    {
        use ProductBundlesAwareTrait;
    
     /**
      * @var ProductBundleInterface
      */
     #[ORM\OneToOne(
         targetEntity: "BitBag\SyliusProductBundlePlugin\Entity\ProductBundleInterface",
         mappedBy: "product",
         cascade: ["all"]
     )]
     protected $productBundle;
    
    }

    映射(XML)

    # Resources/config/doctrine/Product.Product.orm.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                                          http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"
    >
        <entity name="App\Entity\Product\Product" table="sylius_product">
            <one-to-one field="productBundle" target-entity="BitBag\SyliusProductBundlePlugin\Entity\ProductBundleInterface" mapped-by="product">
                <cascade>
                    <cascade-all/>
                </cascade>
            </one-to-one>
        </entity>
    </doctrine-mapping>
  6. 扩展OrderItem(包括Doctrine映射)

    <?php
    
    declare(strict_types=1);
    
    namespace App\Entity\Order;
    
    use BitBag\SyliusProductBundlePlugin\Entity\OrderItemInterface;
    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleOrderItemsAwareTrait;
    use Sylius\Component\Core\Model\OrderItem as BaseOrderItem;
    
    class OrderItem extends BaseOrderItem implements OrderItemInterface
    {
       use ProductBundleOrderItemsAwareTrait;
    
       public function __construct()
       {
           parent::__construct();
           $this->init();
       }
    
    }

    映射(属性)- 通过创建新的覆盖组合特性,并在Entity/Order/OrderItem中使用它。

    注意。 如果您正在使用属性映射,请在您的 OrderItem 实体中使用 OrderItemTrait 而不是插件中的 ProductBundleOrderItemsAwareTrait

    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleOrderItemInterface;
    use BitBag\SyliusProductBundlePlugin\Entity\ProductBundleOrderItemsAwareTrait;
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
    
    trait OrderItemTrait
    {
    use ProductBundleOrderItemsAwareTrait;
    
     /**
      * @var ArrayCollection|ProductBundleOrderItemInterface[]
      */
     #[ORM\OneToMany(
         targetEntity: "BitBag\SyliusProductBundlePlugin\Entity\ProductBundleOrderItemInterface",
         mappedBy: "orderItem",
         cascade: ["all"]
     )]
     protected $productBundleOrderItems;
    
    }

    映射(XML)

    # Resources/config/doctrine/Order.OrderItem.orm.xml
    
    <?xml version="1.0" encoding="UTF-8"?>
    <doctrine-mapping xmlns="http://doctrine-project.org/schemas/orm/doctrine-mapping"
                      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                      xsi:schemaLocation="http://doctrine-project.org/schemas/orm/doctrine-mapping
                                          http://doctrine-project.org/schemas/orm/doctrine-mapping.xsd"
    >
        <entity name="App\Entity\Order\OrderItem" table="sylius_order_item">
            <one-to-many field="productBundleOrderItems" target-entity="BitBag\SyliusProductBundlePlugin\Entity\ProductBundleOrderItem" mapped-by="orderItem" >
                <cascade>
                    <cascade-all/>
                </cascade>
            </one-to-many>
        </entity>
    </doctrine-mapping>
  7. 添加扩展产品、订单项和产品变体存储库的配置

    # config/packages/_sylius.yaml
    
    sylius_product:
        resources:
            product:
                classes:
                    model: App\Entity\Product\Product
            product_variant:
                classes:
                    repository: BitBag\SyliusProductBundlePlugin\Repository\ProductVariantRepository
    sylius_order:
       resources:
           order_item:
               classes:
                   model: App\Entity\Order\OrderItem
    
  8. 将“创建/捆绑”添加到产品网格配置中

    # config/packages/_sylius.yaml
    
    sylius_grid:
       grids:
           sylius_admin_product:
               actions:
                   main:
                       create:
                           type: links
                           label: sylius.ui.create
                           options:
                               class: primary
                               icon: plus
                               header:
                                   icon: cube
                                   label: sylius.ui.type
                               links:
                                   simple:
                                       label: sylius.ui.simple_product
                                       icon: plus
                                       route: sylius_admin_product_create_simple
                                   configurable:
                                       label: sylius.ui.configurable_product
                                       icon: plus
                                       route: sylius_admin_product_create
                                   bundle:
                                       label: bitbag_sylius_product_bundle.ui.bundle
                                       icon: plus
                                       route: bitbag_product_bundle_admin_product_create_bundle
       
  9. 如果您的配置已全部在xml中完成,则覆盖doctrine配置

    # config/packages/doctrine.yaml   
    
    mappings:
            App:
                is_bundle: false
                type: xml
                dir: '%kernel.project_dir%/src/Resources/config/doctrine'
                prefix: 'App\Entity'
                alias: App
    
    
  10. 将插件模板复制到您的项目 templates/bundles 目录

    $ cp -R vendor/bitbag/product-bundle-plugin/tests/Application/templates/bundles/* templates/bundles/
  11. 请运行以下命令以清除应用程序缓存

    $ bin/console cache:clear
  12. 通过更新数据库模式和安装资产来完成安装

    $ bin/console doctrine:migrations:diff
    $ bin/console doctrine:migrations:migrate
  13. 将插件资产添加到您的项目中: 导入webpack配置*

测试

$ composer install
$ cd tests/Application
$ yarn install
$ yarn build
$ bin/console assets:install public -e test
$ bin/console doctrine:schema:create -e test
$ bin/console server:run 127.0.0.1:8080 -d public -e test
$ open http://localhost:8080
$ vendor/bin/behat

功能

插件的所有主要功能都在此处描述:这里。

如果您需要关于Sylius开发的帮助,请直接联系我们。您可以在此网站填写表格,或者发送电子邮件到hello@bitbag.io

演示

我们创建了一个演示应用程序,其中包含一些有用的插件用例!访问http://demo.sylius.com/ 查看它。

如果您需要Sylius功能的概述,请安排与我们的专家进行咨询。

开发者的额外资源

要了解更多关于我们的贡献工作流程等内容,我们鼓励您使用以下资源

许可

此插件源代码完全免费,并按照MIT许可条款发布。

联系

此开源插件是为帮助Sylius社区而开发的。如果您有任何额外的问题,需要安装或配置插件的帮助,或者需要任何Sylius项目的协助——请告诉我们!联系我们或发送电子邮件至hello@bitbag.io提出您的问题(们)。

社区

对于在线交流,我们邀请您加入我们及其他用户在 Sylius Slack 的聊天。