0

会社のサイトを Magento に移行しようとしていますが、製品画像に問題がありました。15,000 個の製品があり、その 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();
                    }           
                }
            }
        }
            }
        }
 }
?>

あなたが与えることができるどんな助けにも感謝します.

4

1 に答える 1

2

あなたのエラーメッセージを見てみましょう

Warning: include(Mage/Cden/Share/Model/Observer.php): failed to open stream

MageMagento のオートローダーがパッケージからクラス ファイルを読み込もうとしています。これは通常、モデルの基底クラス名が見つからないことを示しています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 が探している構成ノードを見つけられない理由がわかります。

于 2013-08-23T17:10:49.367 に答える