Magento - 如何将可配置产品图像链接到简单产品图像?

时间:2011-02-20 23:21:10

标签: php image magento product configurable

情况就是这样:

我有一个可配置的产品,有几个简单的产品。 这些简单的产品需要与可配置产品具有相同的产品图像。 目前,我必须一遍又一遍地将相同的图像上传到每个简单的产品。

有没有办法将可配置产品的产品图像链接到简单产品?

我的部分产品在1个可配置产品中有30个简单产品,上传同一图像30次是过分/烦人。

我希望有人可以帮我解决这个问题!

提前致谢!

4 个答案:

答案 0 :(得分:11)

DOCROOT\app\design\frontend\<pachage>\<theme>\template\catalog\product\view\media.phtml

之后将其插入$_product = $this->getProduct();
$_parentIdArray = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($_product->getId());
if(sizeof($_parentIdArray)==1 && Mage::getModel('catalog/product')->load($_parentIdArray[0])->getTypeId() == 'configurable'){
  $_product = Mage::getModel('catalog/product')->load($_parentIdArray[0]);
}

如果简单产品具有可配置类型的单个父级,则将使用属于父可配置产品的图像。

修改

要在列表视图中使用此功能,请打开DOCROOT\app\design\frontend\<pachage>\<theme>\template\catalog\product\list.phtml并在 2 位置插入相同的代码块:

  • <?php foreach ($_productCollection as $_product): ?>之后的第45行(<?php ?>包装内)
  • <?php $i=0; foreach ($_productCollection as $_product): ?>
  • 之后的第106行(大约可能与您的主题不同)

这两个位置都需要处理页面的网格视图和列表视图版本。

HTH,
JD

答案 1 :(得分:4)

我认为正确的方法是覆盖图像助手(app / core / Mage / Catalog / Helper / Image.php),这样在init函数中,检查你是否有一个简单的产品,如果您这样做,请将其替换为可配置产品。这应该会影响所有模板的更改。

答案 2 :(得分:2)

快速解决方法可能是导出产品列表(管理员&gt;系统&gt;导入/导出&gt;配置文件),将图像文件名放在适当的列中简单的产品,将文件复制到media/import/目录,然后导入修改后的产品列表。将为您制作各种关联,并将图像文件复制到任何需要的位置。

答案 3 :(得分:2)

我认为最好的方法是覆盖目录图像助手(如@stew所说)。为避免性能问题,我们可以使用原始sql查询来获取父级的图像值:

class Wfs_Catalog_Helper_Image extends Mage_Catalog_Helper_Image
{
    public function init(Mage_Catalog_Model_Product $product, $attributeName, $imageFile=null)
    {
        parent::init($product, $attributeName, $imageFile);
        if (!$product->getId() || $imageFile || $product->isConfigurable()) {
            return $this;
        }

        $productImage = $product->getData($attributeName);
        if (!$productImage || $productImage == 'no_selection') {
            // Get parent product's attribute
            $value = $this->getParentProductAttribute($product->getId(), $attributeName);
            if ($value) {
                $this->_getModel()->setBaseFile($value);
            }
        }
        return $this;
    }

    public function getParentProductAttribute($productId, $attributeName)
    {
        $coreResource = Mage::getSingleton('core/resource');
        $conn = $coreResource->getConnection('core_read');

        $attrId = Mage::getSingleton('eav/config')
            ->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeName)
            ->getId();

        $select = $conn->select()
            ->from(array('rel'  => $coreResource->getTableName('catalog/product_relation')), array())
            ->join(
                array('var' => $coreResource->getTableName('catalog_product_entity_varchar')),
                'var.entity_id = rel.parent_id',
                array('value')
            )
            ->where('rel.child_id = ?', $productId)
            ->where('var.attribute_id = ?', $attrId);

        return $conn->fetchOne($select);
    }
}