玛托托拥有各种产品类型,可以帮助您找到销售产品的正确方法。有可下载的产品用于数字项目(如电子书),用于没有切实可交付的物品的虚拟产品(如保修),以及用于变化的可配置产品(如不同尺寸的衬衫)。最强大的类型之一是捆绑产品。在我的经验中,这是最少使用的产品类型,我相信有几个影响其稀疏外观的因素:
现在让步’通过分解它们是什么以及如何利用它们在商店中销售更多的东西来看看捆绑产品的上面。
简而言之,捆绑产品是一种作为单个包装一起销售多种产品的方式。这对商人来说真是一个很好的机会’S upselling的形式。它不仅仅是那个’S一种非常有针对性的upselling形式,而Magento则为您提供灵活性,使其值得为客户提供’s while.
捆绑产品只是一个壳牌,最终它包含您的产品’RE已经在您的Magento商店销售。让’说你卖乐器。你’如果那位客户将把一些钹和鼓槌添加到他们的鼓套装,请热爱它。在购买体验期间,而不是仅显示相关产品和upsell,而是可以创建捆绑包。通过这样做,您鼓励客户增加他们的订单,也让他们信心为他们的产品’重新购买彼此兼容。
您可以阅读关于创建和配置捆绑产品的信息 官方用户指南, 但是我’M将涵盖捆绑在一起的基础知识。
捆绑产品的基本架构是他们的选择。选项是构成捆绑包的组件。每个选项都提供各种产品,可以填充该插槽。让’看看我们的鼓套装。它’s将有以下选项:
在基本级别,这些是包含在捆绑中的东西。对于每个选项,可以有多种产品根据您的喜好选择。我的产品代表雅马哈舞台定制壳包周围的捆绑包,所以我’M只能为Shell Pack选项提供一个产品。但是,客户将能够选择多个品牌来填补崩溃钹,高帽子和鼓棍选项。
您可以制作所需的每个选项或可选,设置选择的默认量,并选择客户是否可以定义自己的数量。
对于我的产品,大部分选项都是必需的,并且有一个不可改变的数量1.但是,鼓槌是可选的附加品,客户可以修改数量。这确保了一个人新的鼓代购’不小心买了他们不’需要,但他们可以从同一个产品页面购买一些额外的棒。
捆绑产品定价是灵活的。所有最终可以在我的捆绑中最终的简单产品都有自己的价格在Magento,但我想在捆绑时打折吗?
在这种情况下,我这样做。根据所选产品,我的捆绑包中的物品总和可从1,204美元到1,229美元。鼓励客户购买我的捆绑,我’M将其价格为1,100美元。壳牌包,崩溃钹和高帽子选择将无需额外成本。对于棍棒(是可选的),我 ’M每对价格为5美元。这仍然是一个很好的协议,因为如果可以单独添加到推车中,例如鼓槌的简单产品将是8美元。
要设置此类定价,请在创建捆绑时设置动态价格=否。这允许我为捆绑设置套装,然后选择将价格附加到每个选项选择。这为产品的上下文提供了特定的价格,但简单产品的定价对我的捆绑没有影响。
如果我不’要为我的捆绑折扣,我可以设置动态价格=是。该捆绑包将自动总结产品价格,而不是手动设置价格。用户赢了’拯救任何买捆绑的钱,但他们’LL仍然受益于更具指导的购物体验。
您可能会认为捆绑在理论上听起来很棒,但它们如何与其他电子商务元素一起锻炼?运输计算如何工作?当订单导出到外部系统时,数据看起来像什么?
那里’在数据周围的一些灵活性。从运输角度来看,捆绑包提供动态重量选项。如果设置为是,则推车中的捆绑产品的重量将是捆绑包中所有简单产品重量的总和。这确保了最终的重量对于获得运费来准确。如果设置为否,则可以将静态权重分配给客户不受客户的捆绑包’s selections.
那里’S还可以选择动态SKU。当设置为是时,该项目的最终SKU将是捆绑产品SKU的组合,包括所有简单产品的组合。
最终订单数据包含有关捆绑包的相当一点信息。它包含捆绑本身以及最终在捆绑中的每个产品的行。这些行包含Sku和数量的简单产品。如果您对库存跟踪等内容进行外部集成订单数据,这很好,因为它允许您检查已售出的有形产品。
捆绑是一个复杂的概念,每位商家都会略微不同地利用它们。我完全尊重Magento核心用捆绑包的逻辑,但它’s definitely not a “one size fits all” scenario. I’d想看看一些具体的挑战我’已经看到商人遇到了,我们实施的解决方案就正确地获得逻辑。
捆绑的工作很好地开箱即用,将几种相关产品销售在一起。但是,他们不’T工作以及代表具有附加组件的主要产品。去年,我有一个销售浓缩咖啡机的商人。它们通常包括带有这些机器的物品,例如一袋浓缩咖啡豆或延长保修。他们需要这些免费赠品在产品和购物车页上明确代表,他们还需要他们是订单数据中的单个项目,以获得库存更新。问题是他们真的没有’t want to offer the “Customize and Buy”Magento提供开箱即用的界面。客户无法配置。所有选项都是必需的,只提供一个选择。他们真的只需要客户看看’包括在添加到购物车按钮。
我们能够通过一些布局变化和一些战略CSS调整来解决此问题。在捆绑配置中,我们隐藏了选项标签和表单元素,只留下选择的名称和价格。我们还将主数量输入和添加到捆绑包配置中的添加到购物车按钮移动。最终结果是产品页面’几乎是基本的作为一个简单的产品。这里’■如果只有每个选项都有一个选择,请在我们的鼓组捆绑上进行相同的处理:
本机显示:
定制显示:
请注意,这会从页面中删除所有配置机制,因此它 ’对于静态选择的捆绑,真的只是一个很好的契合。
使用购物车价格规则时,它’重要的是要注意捆绑产品儿童的本机行为。价格规则中的任何条件都将由捆绑包中的项目触发’s添加到客户’s cart. If this isn’当您的订单开始进入时,您可以获得您的价格规则的意图。
让’以我们的鼓套装为例。我有一些VIC雪鼓槌的剩余库存,所以我想提供50%的折扣。我创建了购物车价格规则,占用品牌是VIC FIRTH的产品的50%折扣。当客户转到鼓槌类别并购买匹配的简单产品时,这效果很大,但它’在将硒鼓捆绑到购物车中添加时,不太理想。配置为包含可选的VIC励火鼓槌时,将50%的折扣应用于整个捆绑包。努力移动一些鼓槌,我们’突然释放超过550美元的1,100美元的鼓。
不幸的是,那里’没有配置更改此行为的配置,但如果需要,您可以使用小的代码更改更改。负责此特定规则验证的模型是\ magento \ salesrule \ model \规则\条件\ product \组合,相关方法是 证实 (在超类中定义)。
如果我们为\ magento \ salesrule \ model \ culit \ condition \ product \ combine创建插件,我们可以确保没有捆绑儿童对购物车价格规则有效。
1 2 3 4 5 6 |
民众 功能 AroundValidate.(\玛托托\饷\模型\规则\状况\产品\结合 $主题, 可谴责 $继续, \玛托托\框架\模型\抽象模型 $模型) { 如果 ($模型->GetParentItem.() && $模型->GetParentItem.()->getProductType.() ==. '捆') { 返回 错误的; } 返回 $继续($模型); } |
类似于购物车价格规则的困境,捆绑子女还可以触发意外的分层导航行为。让’S表示我们将我们的鼓套装捆绑在鼓组类别中。由于该套装在雅马哈壳包周围构建,我们’ve将品牌设置为捆绑产品本身作为雅马哈。在分层导航中,我们希望当Yamaha设置为品牌过滤器时,我们希望显示。既然我们不’T期望客户选择一个基于哪些鼓棍子的束,我们’d更喜欢捆绑’T出现在过滤结果以匹配VIC Firth的品牌价值时。
这里’捆绑的原生处理。注意每个品牌如何’我们的鼓Set Bundle中提供的S存在于分层导航中:
幸运的是,我们可以在分层导航中排除捆绑子属性,其中一些小代码更改。 Bundle子索引发生在_PreparerElationIndexSelect方法中的\ Magento \ Catalog \ Model \ ResourceModel \ ProductSeav中发生\ Magento \ Catalog \ Model \ ProductSeav。这里’s the original code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
$联系 = $这个->GetConnection.(); $itxtable. = $这个->getimxtable.(); $Linkfield. = $这个->getmetadatapool.()->getmetadata.(产品接口::班级)->getlinkfield.(); $选择 = $联系->选择()->从( ['L' => $这个->gettable.('catalog_product_relation')], [] )->霍尔斯特( ['e' => $这个->gettable.('catalog_product_entity')], 'e。' . $Linkfield. .'= l.parent_id', ['e.entity_id为parent_id'] )->加入( ['CS' => $这个->gettable.('店铺')], '', [] )->加入( ['一世' => $itxtable.], 'l.child_id = i.entity_id和cs.store_id = i.store_id', ['attribute_id', 'store_id', '价值'] )->团体( ['parent_id', 'i.attribute_id', 'i.store_id', 'i.Value'] ); 如果 ($父母综合症 !== 无效的) { $选择->在哪里('e.entity_id在(?)'中, $父母综合症); } / ** *添加额外的外部限制 */ $这个->_事件管理器->派遣( 'prepaster_catalog_product_index_select', [ '选择' => $选择, 'entity_field' => 新的 \zend_db_expr.('l.parent_id'), 'webtent_field' => 新的 \zend_db_expr.('cs.website_id'), 'store_field' => 新的 \zend_db_expr.('cs.store_id') ] ); 返回 $选择; |
查询使用Catalog_Product_Relation表来标识父/子产品关系,然后通过子ID加入属性索引表。
这允许它来查询相关父母的子产品的属性值。它还使用左连接来包括父产品。
它由父ID组组,结果是具有匹配过滤条件的子女的父母列表。
如果我们用以下替换方法代码,我们可以将父产品限制在父母的内容中’t bundles.
这将从查询逻辑中排除捆绑子项,从未考虑捆绑子产品属性的分层导航。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
$联系 = $这个->GetConnection.(); $itxtable. = $这个->getimxtable.(); $选择 = $联系->选择()->从( ['L' => $这个->gettable.('catalog_product_relation')], 'parent_id' )->加入( ['CS' => $这个->gettable.('店铺')], '', [] )->加入( ['一世' => $itxtable.], 'l.child_id = i.entity_id和cs.store_id = i.store_id', ['attribute_id', 'store_id', '价值'] )->加入( ['P' => 'catalog_product_entity'], 'l.parent_id = p.entity_id和p.type_id!='bundle \'', [] )->团体( ['l.parent_id', 'i.attribute_id', 'i.store_id', 'i.Value'] ); 如果 ($父母综合症 !== 无效的) { $选择->在哪里('l.parent_id(?)', $父母综合症); } / ** *添加额外的外部限制 */ $这个->_事件管理器->派遣( 'prepaster_catalog_product_index_select', [ '选择' => $选择, 'entity_field' => 新的 \zend_db_expr.('l.parent_id'), 'webtent_field' => 新的 \zend_db_expr.('cs.website_id'), 'store_field' => 新的 \zend_db_expr.('cs.store_id') ] ); 返回 $选择; |
请注意,此方法是摘要,所以您’LL必须为每个子类实现实现这种方法的DI偏好,该方法是不同的。当我实现这些更改时,我包含以下内容:
这里’结果是由此产生的行为:
无论你’希望帮助客户识别兼容的产品,或者只是希望增加您的订单总数,我想在那里’对于几乎每次商家都使用捆绑产品的用例。即使你不’想要创造很多他们,他们可以成为一个伟大的促销工具。你还在等什么?开始使用这些捆绑产品。如果您碰巧需要一些自定义来让它们恰到好处,请给我们一个电话。
6 Comments
你好,谢谢你的这个有用的文章!
是否可以提供有关的更多细节“很少的布局变化和一些战略CSS调整”完全消除捆绑的配置部分?我想对我的捆绑做同样的事情。
先感谢您!
阿德里安
谢谢,你已经很好地解释了’另一个更易于遵循在营业师范杂志2中创建捆绑产品的教程。我发现它非常有用。我希望其他人也会喜欢它。
感谢分享这个令人敬畏的教程,我正在努力在Magento Store中设置目录价格规则,您的文章,这篇文章帮助了我很多 //www.cloudways.com/blog/shopping-cart-and-catalog-price-rules-in-magento/。一世”
你好,
我已经看过那篇文章并尝试用捆绑产品制作相同的布局,所以你可以告诉我我们如何实现,因为我无法看到像其他屏幕截图一样制作布局的代码。
你好,谢谢你的文章。
在鼓组例子中,它看起来像你’重新使用相同的图像两次(//www.tianjindkjgg.com/wp-content/uploads/2017/10/layered_nav_native.png), 所以我们可以’真的很看到你的区别’重新展示。您有机会更新文章吗? ðÿ™,
你好,
我想在购物车中使用数量添加捆绑产品。
我能够添加产品,但数量不会更新。它总是1。
有没有办法解决这个问题。
我正在使用以下代码。
$产品= $ this->_productRepository->GetByid(89,False,Null,True);
$ bundle_option = [1 =>阵列(2,8,18)]; // 2,8,18是选择ID,1是选项ID
$ bundle_qty = [1 =>阵列(2,3,4)]; // 2,3,4是数量,1是选项ID
$ params = [
‘form_key’ => $this->formKey->getFormKey(),
‘product’ => 89,
‘bundle_option’ =>$ bundle_option,//它正常工作
‘bundle_option_qty’ =>$ bundle_qty,//逻辑上它将工作,但在我的情况下它不起作用。
‘qty’ => $totalqty
];
$这个 - >cart->AddProduct($产品,$ PARAMS);
$这个 - >cart->save();