Magento-将可配置产品映像与其子映像关联的事件/观察者代码不起作用


Magento - Event/observer code to associate configurable product image to its children, is not working

我要把我们公司的网站搬到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找不到它要查找的配置节点。