2

我有一个 Magento 商店,里面有 2 种简单的产品

  • 大红杯
  • 大蓝杯

和可配置的产品

  • 大杯

分配了那些杯子。

红杯和蓝杯在搜索中可见。

如果用户点击这些简单产品之一,则应打开可配置产品,但应预先选择正确的颜色。

我知道一个简单的产品可以分配给多个可配置产品,因此如果找到两个匹配的可配置产品并且只取第一个,我会记录一个异常。

我想我必须抓住目录/产品/视图的预调度事件,并以某种方式用可配置的产品替换简单的产品。

我现在如何预先配置正确的简单产品?

有没有一个优雅的解决方案?

4

3 回答 3

4

我找到了一个解决方案:

  1. 注册观察员controller_action_predispatch_catalog_product_view
  2. 检查我们是否有一个简单的产品,其父产品是可配置的产品
  3. 创建一个包含简单产品配置数据的数组
  4. 将此数据传递给Mage::helper('catalog/product_view')->prepareAndRender()(第三个参数)
  5. FLAG_NO_DISPATCH通过设置on the front action停止调度

完整代码可在github 上的 Mestroma_ForwardToConfigurable 模块中找到。

于 2012-10-23T21:08:18.073 回答
0

如果简单产品满足某些要求,一种想法是重定向到可配置产品:

  • 将新属性“should_redirect_to_parent”设置为 True(可选)
  • 至少有一个父产品(为此,我让你点击 Alex 的链接)

ps:如果您不想进行父产品查找,您可以添加一个新属性,如“redirect_sku”或“redirect_product_id”,以便直接对该产品进行重定向

对于重定向,您应该使用事件catalog_controller_product_init_after,如果前两个条件匹配,您将用户重定向到可配置产品。

ps:为了性能优化,您可以改用,catalog_controller_product_init_before这将节省一个庞大且无用的 Product::load() 但它需要您构建自定义 SQL 查询来搜索父产品

告诉您是否需要一些代码示例

于 2012-10-18T18:51:00.937 回答
0

要在可配置产品中预选简单产品,简单产品的地址应如下所示,例如:

/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 上制作了一个模块,如果有多个,则选择第一个可配置产品来解决这个问题。

于 2021-10-12T12:52:09.990 回答