我有一个 Magento 商店,里面有 2 种简单的产品
- 大红杯
- 大蓝杯
和可配置的产品
- 大杯
分配了那些杯子。
红杯和蓝杯在搜索中可见。
如果用户点击这些简单产品之一,则应打开可配置产品,但应预先选择正确的颜色。
我知道一个简单的产品可以分配给多个可配置产品,因此如果找到两个匹配的可配置产品并且只取第一个,我会记录一个异常。
我想我必须抓住目录/产品/视图的预调度事件,并以某种方式用可配置的产品替换简单的产品。
我现在如何预先配置正确的简单产品?
有没有一个优雅的解决方案?
我有一个 Magento 商店,里面有 2 种简单的产品
和可配置的产品
分配了那些杯子。
红杯和蓝杯在搜索中可见。
如果用户点击这些简单产品之一,则应打开可配置产品,但应预先选择正确的颜色。
我知道一个简单的产品可以分配给多个可配置产品,因此如果找到两个匹配的可配置产品并且只取第一个,我会记录一个异常。
我想我必须抓住目录/产品/视图的预调度事件,并以某种方式用可配置的产品替换简单的产品。
我现在如何预先配置正确的简单产品?
有没有一个优雅的解决方案?
我找到了一个解决方案:
controller_action_predispatch_catalog_product_view
Mage::helper('catalog/product_view')->prepareAndRender()
(第三个参数)FLAG_NO_DISPATCH
通过设置on the front action停止调度如果简单产品满足某些要求,一种想法是重定向到可配置产品:
ps:如果您不想进行父产品查找,您可以添加一个新属性,如“redirect_sku”或“redirect_product_id”,以便直接对该产品进行重定向
对于重定向,您应该使用事件catalog_controller_product_init_after
,如果前两个条件匹配,您将用户重定向到可配置产品。
ps:为了性能优化,您可以改用,catalog_controller_product_init_before
这将节省一个庞大且无用的 Product::load() 但它需要您构建自定义 SQL 查询来搜索父产品
告诉您是否需要一些代码示例
要在可配置产品中预选简单产品,简单产品的地址应如下所示,例如:
/mona-pullover-hoodlie.html#143=167&93=53
在哪里
/mona-pullover-hoodlie.html
- 可配置的产品 URL
143
, 93
- 属性 ID
167
, 53
- 选项 ID。
为了更改简单产品的 URL,您可以创建一个Plugin (Interceptor) for Magento\Catalog\Model\Product::getProductUrl()
,在哪里生成 URL,如上例所示。
使用上面示例中的 URL 参数选择产品已经在 Magento 中实现了开箱即用。
我VCT Simple Product URl
在 Magento Marketplace 上制作了一个模块,如果有多个,则选择第一个可配置产品来解决这个问题。