Magento - Как связать изображение Настраиваемого продукта с изображением Простого продукта? - PullRequest
10 голосов
/ 21 февраля 2011

Это ситуация:

У меня есть настраиваемый продукт с несколькими простыми продуктами.Эти простые продукты должны иметь тот же образ продукта, что и настраиваемый продукт.В настоящее время мне приходится загружать одно и то же изображение в каждый простой продукт снова и снова.

Можно ли связать изображение продукта конфигурируемого продукта с простыми продуктами?

Некоторые из моиху продуктов 30 простых продуктов в 1 настраиваемом продукте, и загружать одно и то же изображение 30 раз излишне / раздражающе.

Я надеюсь, что кто-то может помочь мне с этой проблемой!

Заранее спасибо!

Ответы [ 4 ]

11 голосов
/ 21 февраля 2011

Вставьте это в 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]);
}

Это будет использовать изображения, принадлежащие родительскому конфигурируемому продукту, если простой продукт имеет одного родительского типа настраиваемого типа.

EDIT

Чтобы использовать это в виде списка, откройте DOCROOT\app\design\frontend\<pachage>\<theme>\template\catalog\product\list.phtml и вставьте тот же блок кода в 2 местах:

  • строка 45 после <?php foreach ($_productCollection as $_product): ?> (внутри <?php ?> упаковщиков)
  • строка 106 (приблизительно, может быть по-другому в вашей теме) после <?php $i=0; foreach ($_productCollection as $_product): ?>

Обе локации необходимы для работы с сеткой и списком версий страницы.

НТН,
JD

4 голосов
/ 23 марта 2011

Я считаю, что правильный способ сделать это - переопределить помощник по изображениям (app / core / Mage / Catalogue / Helper / Image.php), чтобы в функции init вы проверяли, есть ли у вас простой продукт,и если вы делаете, замените это на настраиваемый продуктЭто должно повлиять на изменение для ВСЕХ шаблонов.

2 голосов
/ 11 мая 2012

Я думаю, что лучший способ - переопределить помощник по изображению каталога (как сказал @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);
    }
}
2 голосов
/ 21 февраля 2011

Обходной путь может заключаться в экспорте списка продуктов ( Администратор> Система> Импорт / Экспорт> Профили ), поместите имя файла изображения в соответствующие столбцы для всех ваших простых продуктов, скопируйтефайл (ы) в каталог media/import/, затем импортируйте измененный список продуктов.Для вас будут созданы различные ассоциации, и файлы изображений будут скопированы туда, где они должны быть.

...