我正在将我们的公司网站迁移到 Magento,但遇到了产品图片的障碍。我们有 15k 种产品,其中 80% 是具有可配置父级的简单产品。我们支付了购物车转移费用,但新创建的产品在简单产品上没有显示图像。我必须在每个简单产品中设置它们,因为每个可配置的简单产品有 5 到 7 个与尺寸相关的简单产品,这将花费太长时间。
我希望使用 catalog_product_save_after 事件将与可配置相关联的图像写入其每个子级。
我的代码无法正常工作(我对 Magento 很陌生),如果有人能提供任何帮助,我将不胜感激。
Cden_Share.xml
<?xml version="1.0"?>
<config>
<modules>
<Cden_Share>
<active>true</active>
<codePool>local</codePool>
</Cden_Share>
</modules>
</config>
配置文件
<config>
<modules>
<Cden_Share>
<version>0.0.1</version>
</Cden_Share>
</modules>
<adminhtml>
<models>
<cden_share>
<class>Cden_Share_Model</class>
</cden_share>
</models>
<events>
<catalog_product_save_after>
<observers>
<cden_share>
<class>cden_share/observer</class>
<method>shareMainImages</method>
<type>singleton</type>
</cden_share>
</observers>
</catalog_product_save_after>
</events>
</adminhtml>
</config>
最后是我的 Observer.php。我从 stackoverflow 上的一个答案中得到了这个代码,它是关于产品包的一个类似问题(Magento - 如何为产品包显示相同的图像?)。
<?php
class Cden_Share_Model_Observer
{
public function shareMainImages(Varien_Event_Observer $observer)
{
$product = $observer->getEvent()->getProduct();
if ($product->getTypeId() == "configurable")
{
$main_image = $product->getImage();
if($main_image != "no_selection")
{
$productTypeIns = $product->getTypeInstance(true);
$childIds = $productTypeIns->getChildrenIds($product->getId());
$importDir = Mage::getBaseDir('media') . DS . 'catalog/product';
foreach ($childIds as $childId)
{
foreach($childId as $_childId)
{
$childProduct = Mage::getModel('catalog/product')->load($_childId);
if ($childProduct->getImage()=="no_selection")
{
$childProduct->addImageToMediaGallery($importDir.$main_image,array ('image','small_image','thumbnail'),false,false);
$childProduct->save();
}
}
}
}
}
}
}
?>
感谢您提供的任何帮助。