我要把我们公司的网站搬到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.xml
<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();
}
}
}
}
}
}
}
?>
谢谢你能提供的任何帮助。
查看错误消息
Warning: include(Mage/Cden/Share/Model/Observer.php): failed to open stream
Magento的自动加载器正在尝试从Mage
包加载类文件。这通常表示它找不到模型cden_share/observer
的基类名称。也就是说,Magento试图实例化观察者类
$observer = Mage::getMode('cden_share/observer');
并且在您的配置中找不到cden_share
模型组节点。看看你的配置,你似乎有这个节点,但它在错误的地方。
<config>
<global>
<models>
<cden_share>
<class>Cden_Share_Model</class>
</cden_share>
</models>
</global>
<adminhtml>
<!-- ... -->
</adminhtml>
</config>
<models/>
节点属于<global/>
。
如果您仍然有问题,在更改配置后,以下位置的一些临时调试应该会告诉您为什么Magento找不到它要查找的配置节点。