Магенто - Как связать Настраиваемое изображение продукта с простым изображением продукта?
Вот такая ситуация:
У меня есть настраиваемый продукт с несколькими простыми продуктами. Эти простые продукты должны иметь тот же образ продукта, что и настраиваемый продукт. В настоящее время мне приходится загружать одно и то же изображение на каждый простой продукт снова и снова.
Есть ли способ связать изображение продукта настраиваемого продукта с простыми продуктами?
Некоторые из моих продуктов содержат 30 простых продуктов в 1 настраиваемом продукте, и это излишне/раздражает загрузите одно и то же изображение 30 раз.
Я надеюсь, что кто-нибудь сможет помочь мне с этой проблемой!
Заранее спасибо!
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,
Джей Ди
Я считаю, что правильный способ сделать это - переопределить помощника по изображению (app/core/Mage/Catalog/Helper/Image.php), так что в функции инициализации вы проверяете, есть ли у вас простой продукт, и если да, замените его настраиваемым продуктом. Это должно повлиять на изменение для ВСЕХ шаблонов.
Быстрым решением может быть экспорт списка продуктов ( Администратор> Система> Импорт/Экспорт> Профили ), поместите имя файла изображения в соответствующий столбец (столбцы) для всех ваших простых продуктов, скопируйте файл(ы) в каталог media/import/
, затем импортируйте измененный список продуктов. Для вас будут созданы различные ассоциации, и файлы изображений будут скопированы туда, где они должны быть.
Я думаю, что лучший способ - переопределить помощник по изображениям каталога (как сказал @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);
}
}