spryker / product-bundle
ProductBundle模块
Requires
- php: >=8.1
- spryker/availability: ^9.8.0
- spryker/calculation-extension: ^1.1.0
- spryker/cart-extension: ^1.0.0 || ^2.0.0 || ^4.0.0
- spryker/decimal-object: ^1.0.0
- spryker/kernel: ^3.30.0
- spryker/locale: ^3.0.0 || ^4.0.0
- spryker/messenger: ^3.0.0
- spryker/oms-extension: ^1.2.0
- spryker/persistent-cart-extension: ^1.0.0
- spryker/price: ^5.0.0
- spryker/price-product: ^1.0.0 || ^2.0.0 || ^4.0.0
- spryker/product: ^5.0.0 || ^6.0.0
- spryker/product-extension: ^1.3.0
- spryker/product-image: ^3.3.0
- spryker/propel-orm: ^1.16.0
- spryker/sales: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^10.0.0 || ^11.0.0
- spryker/sales-extension: ^1.6.0
- spryker/sales-return-gui-extension: ^1.0.0
- spryker/shopping-list-extension: ^1.0.0
- spryker/stock: ^8.0.0
- spryker/store: ^1.19.0
- spryker/symfony: ^3.0.0
- spryker/transfer: ^3.25.0
Requires (Dev)
Suggests
- spryker/calculation: If you want to use Calculation plugins.
- spryker/cart: If you want to use Cart plugins.
- spryker/checkout: If you want to use Checkout plugins.
- spryker/oms: If you want to use Oms plugins.
- spryker/sales-aggregator: If you want to use SalesAggregator plugins.
- 7.19.0
- 7.18.0
- 7.17.0
- 7.16.0
- 7.15.0
- 7.14.0
- 7.13.0
- 7.12.0
- 7.11.1
- 7.11.0
- 7.10.1
- 7.10.0
- 7.9.0
- 7.8.0
- 7.7.0
- 7.6.0
- 7.5.0
- 7.4.0
- 7.3.0
- 7.2.1
- 7.2.0
- 7.1.0
- dev-master / 7.0.x-dev
- 7.0.0
- 6.1.0
- 6.0.3
- 6.0.2
- 6.0.1
- 6.0.0
- 5.0.0
- 4.12.1
- 4.12.0
- 4.11.0
- 4.10.0
- 4.9.0
- 4.8.0
- 4.7.5
- 4.7.4
- 4.7.3
- 4.7.2
- 4.7.1
- 4.7.0
- 4.6.1
- 4.6.0
- 4.5.2
- 4.5.1
- 4.5.0
- 4.4.0
- 4.3.1
- 4.3.0
- 4.2.0
- 4.1.1
- 4.1.0
- 4.0.0
- 3.3.0
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.0
- 3.0.0
- 2.0.2
- 2.0.1
- 2.0.0
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- dev-beta/frw-8430/master-enable-sniffers-for-3rd-party-modules
- dev-beta/app-store/develop
- dev-hotfix/testing-propel
- dev-beta/lazy_table_map_instantiation
- dev-beta/poc-contract-tests
- dev-beta/apps-3669/dev-fix-publisher-from-object-to-string
- dev-beta/apps-2942/apps-2978-message-broker-has-jwt-auth-inside-each-message
- dev-beta/spryker-mini-api-framework
- dev-beta/glue-backend-prototype
- dev-beta/glue-backend-prototype-v4
- dev-beta/te-9873-backend-glue-application-plagin-context
- dev-beta/te-9901-extend-glue-application-module
- dev-beta/mp-5445-merchant-products-are-no-buyable
- dev-beta/security-to-spryker-symfony-3.3
- dev-beta/te-7948/dev-session
This package is auto-updated.
Last update: 2024-09-20 19:24:33 UTC
README
产品组合是将两个或多个现有产品组合成一个新的产品,用于商店展示和销售。通常组合包含具体产品,因为组合中的所有项目都需要是潜在的订单项(即有库存)。新的(组合)产品在组合状态下实际上不存在。当购买组合时,在订单管理系统中仍将作为单独的项目进行处理。ProductBundle提供了所有这些产品组合功能,可以将多个具体产品组合成一个,并出售它。
安装
composer require spryker/product-bundle
以下信息描述了如何安装新发布的“Product”模块(2017年1月)。这些说明仅适用于您需要将此模块添加到已安装的框架版本中。如果您尚未安装Spryker框架,请忽略这些说明,因为从2017年1月之后发布的所有版本中都包含此模块。
确保您已更新模块到
计算:>=2.2.0,产品选项:>=3.1.0,销售聚合器:>=3.1.0,税收:>=3.1.0,购物车:>= 2.4.0。这些都是次要版本,兼容性保持不变。
插件配置
插件配置是将模块通过注册组合插件的过程集成到项目中。
注册组合的插件:
-
在
\Pyz\Zed\Calculation\CalculationDependencyProvider::getCalculatorStack
中,添加CalculateBundlePricePlugin
并将其放置在ExpenseTaxWithDiscountsCalculatorPlugin
之后或GrandTotalWithDiscountsCalculatorPlugin
之前。 -
在
\Pyz\Zed\Cart\CartDependencyProvider::getCartPreCheckPlugins
中,用CartBundleAvailabilityPreCheckPlugin
替换CheckAvailabilityPlugin
。 -
在
\Pyz\Zed\Cart\CartDependencyProvider::getExpanderPlugins
中,添加CartItemWithBundleGroupKeyExpanderPlugin
并将其放置在CartItemProductOptionPlugin
或CartItemPricePlugin
之后,如果这些选项未使用。 -
在
\Pyz\Zed\Cart\CartDependencyProvider::getPostSavePlugins
中,将CartPostSaveUpdateBundlesPlugin
添加为最后一行。 -
在
\Pyz\Zed\Cart\CartDependencyProvider::getExpanderPlugins
中,将CartItemWithBundleGroupKeyExpanderPlugin
添加为最后一行。 -
在
\Pyz\Zed\Checkout\CheckoutDependencyProvider::getCheckoutPreConditions
中,添加ProductBundleAvailabilityCheckoutPreConditionPlugin
。 -
在
\Pyz\Zed\Oms\OmsDependencyProvider::getReservationHandlerPlugins
中,添加ProductBundleAvailabilityHandlerPlugin
。 -
在
\Pyz\Zed\Product\ProductDependencyProvider::getProductConcreteAfterUpdatePlugins
中,添加ProductBundleProductConcreteAfterCreatePlugin
。 -
在
\Pyz\Zed\Product\ProductDependencyProvider::getProductConcreteAfterUpdatePlugins
中,添加ProductBundleProductConcreteAfterUpdatePlugin
。 -
在
\Pyz\Zed\Product\ProductDependencyProvider::getProductConcreteReadPlugins
中,添加ProductBundleProductConcreteReadPlugin
。 -
在
\Spryker\Zed\ProductBundle\Communication\Plugin\Sales\ProductBundleOrderSaverPlugin::saveOrder
中,添加ProductBundleOrderSaverPlugin
。 -
在
\Spryker\Zed\ProductBundle\Communication\Plugin\SalesAggregator\ProductBundlePriceAggregatorPlugin::aggregate
中,添加ProductBundlePriceAggregatorPlugin
。 -
在
\Pyz\Zed\Stock\StockDependencyProvider::getStockUpdateHandlerPlugins
中,添加ProductBundleAvailabilityHandlerPlugin
。
插件说明
CalculateBundlePricePlugin
- 计算组合价格。CartBundleAvailabilityPreCheckPlugin
- 购物车预检查插件,用于检查组合可用性。它替换了CheckAvailabilityPlugin
。CartItemWithBundleGroupKeyExpanderPlugin
- 购物车扩展插件,用于提取组合项目。CartPostSaveUpdateBundlesPlugin
- 对报价中未使用的组合进行清理。CartItemWithBundleGroupKeyExpanderPlugin
- 将当前项目组密钥更改为包含组合标识符信息。ProductBundleAvailabilityCheckoutPreConditionPlugin
- 在下单时(最终结账步骤)检查产品组合的可用性。ProductBundleAvailabilityHandlerPlugin
- 一个可用性处理程序,每次组合项目移动到预留状态时都会更新组合的可用性。ProductBundleProductConcreteAfterUpdatePlugin
- 这是一个持久化产品组合的插件,由产品管理组件使用。ProductBundleProductConcreteReadPlugin
- 将产品组合数据写入ProductConcreteTransfer
。ProductBundleOrderSaverPlugin
- 当放置包含组合的订单时,保存与组合相关的信息。ProductBundlePriceAggregatorPlugin
- 对销售组合的产品信息进行汇总。ProductBundleAvailabilityHandlerPlugin
- 一个库存处理插件,当组合或组合产品发生变化时,更新组合的可用库存。
数据库迁移
数据库迁移是将数据库设置调整为包含新插件活动的过程。
配置数据库迁移:
- 创建一个名为 spy_product_bundle_pk_seq 的序列
CREATE SEQUENCE "spy_product_bundle_pk_seq";
CREATE TABLE "spy_product_bundle"
(
"id_product_bundle" INTEGER NOT NULL,
"fk_bundled_product" INTEGER NOT NULL,
"fk_product" INTEGER NOT NULL,
"quantity" INTEGER DEFAULT 1 NOT NULL,
"created_at" TIMESTAMP,
"updated_at" TIMESTAMP,
PRIMARY KEY ("id_product_bundle")
);
ALTER TABLE "spy_product_bundle" ADD CONSTRAINT "spy_product_bundle-fk_bundled_product"
FOREIGN KEY ("fk_bundled_product")
REFERENCES "spy_product" ("id_product")
ON UPDATE CASCADE
ON DELETE CASCADE;
ALTER TABLE "spy_product_bundle" ADD CONSTRAINT "spy_product_bundle-fk_product"
FOREIGN KEY ("fk_product")
REFERENCES "spy_product" ("id_product")
ON UPDATE CASCADE
ON DELETE CASCADE;
- 删除旧表/字段。
DROP TABLE IF EXISTS "spy_sales_order_item_bundle_item" CASCADE;`
`ALTER TABLE "spy_sales_order_item_bundle"
DROP COLUMN "tax_rate",
DROP COLUMN "bundle_type";
DROP TABLE IF EXISTS "spy_product_to_bundle" CASCADE;
Yves/项目更改
以下信息描述了需要对 Yves 进行的修改。您可以在当前的 Spryker demoshop 中找到产品模块的演示实现和 Yves 的所有代码。
购物车
购物车存储商品数量的方式已更改。
现在,购物车中的商品数量通过 $this->cartClient->getItemCount()
返回。
实施对购物车的更改:
- 在
\Pyz\Yves\Cart\Plugin\Provider\CartServiceProvider:register
中,更改
public function register(Application $app)
{
$app['cart.quantity'] = $app->share(function () {
return $this->getClient()->getItemCount();
});
}
-
购物车操作必须更新以覆盖产品组合逻辑,如下所示:使用
CartOperationHandler
代替\Pyz\Yves\Cart\Handler\ProductBundleCartOperationHandler
(您可以从 demoshop 中获取它)。 -
Twig 更改
src/Pyz/Yves/Cart/Theme/default/cart/parts/cart-item.twig
和src/Pyz/Yves/Cart/Theme/default/cart/index.twig
- 现在处理产品组合。- 项目已收到一个名为
ProductBundle
的新模块,其中当前存储了组合分组器。该分组器在\Spryker\Yves\ProductBundle\Grouper\ProductBundleGrouper
中对项目进行分组,以便在展示中使用。
因此,显示项目的视图也必须在 \Pyz\Yves\Cart\Controller\CartController::indexAction
中进行更改
$cartItems = $this->getFactory()
->createProductBundleGroupper()
->getGroupedBundleItems($quoteTransfer->getItems(), $quoteTransfer->getBundleItems());
结账
结账摘要步骤已更改,需要调整到如下购物车项目列表
在 \Pyz\Yves\Checkout\Process\Steps\SummaryStep
中,将分组器和购物车客户端注入到 SummaryStep
中,并更新 getTemplateVariables
方法。
/**
* @param \Generated\Shared\Transfer\QuoteTransfer $quoteTransfer
*
* @return array
*/
public function getTemplateVariables(AbstractTransfer $quoteTransfer)
{
return [
'quoteTransfer' => $quoteTransfer,
'cartItems' => $this->productBundleGrouper->getGroupedBundleItems(
$quoteTransfer->getItems(),
$quoteTransfer->getBundleItems()
),
];
}
src/Pyz/Yves/Checkout/Theme/default/checkout/partials/summary-item.twig
src/Pyz/Yves/Checkout/Theme/default/checkout/summary.twig
有新的项目渲染结构,请从 demoshop 中获取示例。
客户
客户控制器现在使用产品组合分组器。
更改以下内容 在:\Pyz\Yves\Customer\Controller\OrderController::getOrderDetailsResponseData
中执行
$bundleItemGrouper = $this->getFactory()->createProductBundleGroupper();
$items = $bundleItemGrouper->getGroupedBundleItems(
$orderTransfer->getItems(),
$orderTransfer->getBundleItems()
);
return [
'order' => $orderTransfer,
'items' => $items
];
获取新的订单项目列表实现,包括 src/Pyz/Yves/Customer/Theme/default/order/partials/order-items.twig
。