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


Вот такая ситуация:

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

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

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

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

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

Author: Jonathan Day, 2011-02-21

4 answers

Вставьте это в свой 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 расположение:

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

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

HTH,
Джей Ди

 11
Author: Jonathan Day, 2011-02-24 07:33:58

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

 4
Author: stew, 2011-03-23 19:55:02

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

 2
Author: clockworkgeek, 2011-02-20 23:36:31

Я думаю, что лучший способ - переопределить помощник по изображениям каталога (как сказал @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
Author: Roman Snitko, 2012-05-11 15:47:17