如何将简单产品图像用于可配置产品图像?

How to use Simple product images for Configurable product images?

可配置的 product.For 示例可以通过任何方式使用简单的产品图像,我有一个可配置的产品,其中有 4 个具有不同图像的简单产品和 inventory.So,可配置产品应选择 stock.If 中简单产品缺货的简单产品图像之一,然后可配置产品应自动选择有库存的不同简单产品图像。 我需要此功能,因为有时客户无法使用可配置产品中显示的颜色选项。

开发者,请给我一些插件建议,或者如果可以通过任何代码或任何 magento 配置或 product.Also 中的某种更改,请告诉我这是否可能。 每一个建议对我都很有价值谢谢。

检查此 Product Image Attribute extension,它可能对您有用。 该扩展允许设置媒体附加属性。您可以将一些图像作为附加属性指向产品。

按 "Ask about" 讨论您需要的其他功能。

在 media.phtml 文件 (app\design\frontend\{{template name}}\default\template\catalog\product\view\media.phtml)

上使用以下代码
<?php if($_product->getTypeId() == "configurable"){
    $_configurable = $_product->getTypeInstance()->getUsedProductIds();
    foreach ($_configurable as $_config){
        $_simpleproduct = Mage::getModel('catalog/product')->load($_config);
        $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_simpleproduct);
        if($stock->getQty() && $stock->getIs_in_stock()){
            foreach ($_simpleproduct->getMediaGalleryImages() as $image) {
                echo '<img src="'.$image->getUrl().'" /><br>';
            }
            break;          
        }
}} ?>

Configurable 的 产品视图中的基础图像

接受的答案是一个有效的解决方案,但是,我更喜欢调用 getUsedProductCollection() directly as I believe this to be more efficient. getUsedProductIds() 最终调用 getUsedProductCollection(),同时添加多个属性,遍历集合,挑选并返回简单的产品编号。所以最后这意味着我们在只需要一个的地方进行多个循环,再加上加载比我们需要的更多的东西。

因此,假设我们使用的是 Magentos catalog/product/view/media.phtml 模板的副本。我们将第 36 和 37 行替换为:

    $baseImage = $_product->getImage();
    if( $_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE ){
        $simpleCollection = $_product->getTypeInstance()->getUsedProductCollection($_product)
            ->addAttributeToSelect('image')
            // Optionally:
            //->addAttributeToSelect('small_image')
            //->addAttributeToSelect('thumbnail')
            ->addFieldToFilter('image', array('notnull'=>true))
            ->addFilterByRequiredOptions();

        // Filter out all child products that are out of stock
        Mage::getSingleton('cataloginventory/stock')
          ->addInStockFilterToCollection($simpleCollection);

        if($simpleCollection->getSize()))
            $baseImage = $simpleCollection->getFirstItem()->getImage();
    }   
?>
<?php if ($baseImage != 'no_selection' && $baseImage): ?>

这样,我们也有后备方案,以防 none 个可用的简单产品实际上有自己的 'Base Image'。

那么在原来的第40行我们只需要添加$baseImage作为Mage_Catalog_Helper_Image::init()的第三个参数:

[...]$this->helper('catalog/image')->init($_product, 'image', $baseImage)[...]

如果我们愿意,我们可以选择使用相同的 $simpleCollection 将所有简单的产品图片列为缩略图:

<?php foreach ($simpleCollection as $_simple): ?>
    <li>
        <img src="<?php echo $this->helper('catalog/image')->init($_simple, 'thumbnail', $_simple->getImage())->resize(56); ?>" width="56" height="56" />
    </li>
<?php endforeach; ?>

Configurable 的 产品列表中的小图片

当我第一次阅读这个问题时,我以为它要求在产品列表中显示下一个可用的子产品 'Small Image'。由于问题实际上并不清楚,因此至少为这种可能的解释添加一个简短的答案可能对那些正在寻找那个的人有所帮助。

在产品列表中,我们不想加载每个可配置的简单集合只是为了获得 一个 产品图像。当我被要求准备一个可能的解决方案时,我选择为可配置(和简单的)产品创建一个新的产品属性,该属性存储其可用子产品之一的 ID。我添加了库存事件观察器,因此只要链接的子产品缺货,此值就会更新。

既然我们已经有了一个公认的答案,我认为没有必要对此进行详细说明。但是,对于所有对此草稿感兴趣的人,我已经上传了它 here