Magento 2中的可配置产品允许商家创建具有不同类型变体的产品,例如具有不同颜色(即红色,绿色,蓝色),尺寸(即S,M,L)的T恤,这些变化是具有独特SKU,库存,价格等的简单产品。在前端,可配置产品的信息将显示在产品详细信息页面中,所有相关的简单产品将显示为下拉列表或色板。

例如,T恤是一种可配置的产品,它有不同的尺寸,如S,M和L。此尺寸选项与三种不同的简单产品相关联,这些简单产品具有独特的SKU,库存,并且可能根据尺寸具有不同的价格。在产品详细信息页面中,默认情况下,将显示具有此尺寸变化的T恤信息。当我们选择该选项时,将在详细信息页面中更改所选产品SKU和价格。这是Magento2中的默认功能。但有时候,比如我们可能需要从产品详细信息页面或网站其他位置的可配置产品中获取这些相关的简单产品。这时,我们需要扩展Magento2原生功能,这篇简单的博客将帮助您以编程方式从可配置产品中获取相关的简单产品。

为了在Magento 2中获取产品信息,我们可能需要在模块类的构造函数中注入\Magento\Catalog\Model\ProductRepository类的对象。

使用依赖注入(DI)

以下是使用依赖注入从可配置产品中获取关联简单产品的示例代码。

protected $productRepository;
...
 
public function __construct(
    ...
    \Magento\Catalog\Model\ProductRepository $productRepository,
    ...
) {
    ...
    $this->productRepository = $productRepository;
    ...
}
 
public function getAssociatedSimpleProduct($configurable_product_id) {
    $configurableProduct = $this->productRepository->getById($configurable_product_id);
    $children = $configurableProduct->getTypeInstance()->getUsedProducts($configurableProduct);
    foreach ($children as $child){
        echo "Child Product Id: " . $child->getId();
        echo "Child Product SKU: " . $child->getSku();
    }
}

使用对象管理器

以下是使用对象管理器从Magento 2中的可配置产品获取关联的简单产品的示例代码。

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
 
$configurable_product_id = 68;
$configurableProduct = $objectManager->get('Magento\Catalog\Model\ProductRepository')->getById($configurable_product_id);
 
$children = $configurableProduct->getTypeInstance()->getUsedProducts($configurableProduct);
foreach ($children as $child){
    echo "Child Product Id: " . $child->getId();
    echo "Child Product SKU: " . $child->getSku();
}

Note:以上代码在Magento 2.3中进行了测试。