2011-12-05 18 views
0

さまざまなSKUのみを使用して製品を複数の製品に複製できるカスタムモジュールを作成しようとしています。私は私のカスタムモジュールで/app/code/core/Mage/Catalog/Model/Product.phpの下にfunction duplicate()を使ってみました。しかし、それは動作しません。Magentoでコードを使用した製品の複製

私は複製する私のカスタムObesrever.phpファイルに以下のコードを使用していますが、重複は誰もが私にこれを実行するか、任意のコードのフォーマットは参考になる任意のリンクを提案することができ

$product = $observer->getEvent()->getProduct(); 
$newProduct = $product->duplicate(); 

をoccuringされていません。

おかげ

+0

より正確に「機能しない」と定義してください。 –

+0

私は私の質問でそれをブリーフィングしました。見てください – balanv

+0

あなたはすでにあなたのカスタムオブザーバーが実際に呼び出されていることを証明しましたか?もしそうなら、 '$ newProduct'には何が入っていますか?それは 'null'か' Mage_Sales_Catalog_Product'のインスタンスですか? 'null'の場合は、' exception.log'をチェックしてください。 –

答えて

0

(あなたがイベントを呼び出すようにしようとしているところ)あなたは、デバッグしようとしている完全な機能を投稿したり、重複した製品とのconfig.xmlを作成することができればそれは素晴らしいことです。

以下のコードはCE 1.9.2.2で問題なく動作します。この関数は、次の作業を行います。

  1. は「在庫あり」に株式を設定し、数量に「100」(ハード今のコード化された)
  2. を再インデックス自動化
  3. オリジナル製品の複製を作成します。
public function indexAction() //change the function name 
{ 
    $productId  = $observer->getEvent()->getProduct()->getId(); 

    $productObject = Mage::getModel('catalog/product');  
    $_product  = $productObject->load($productId); 

    $newProduct  = $_product->duplicate(); 

    //new product status is disabled - to view in the frontend you will need to set the status as enabled 
    $newProduct->setStatus(1); 
    $newProduct->setName('Duplicate-' . $_product->getName()); 
    $newProduct->setSku('value-' . $productId); 
    $newProduct->setWebsiteIds($_product->getWebsiteIds()); 

    //set the product stock and qty to display product in the frontend 
    //while creating duplicate product, it will update the new product to have qty 0 and out of stock 
    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($newProduct->getId()); 
    if ($stockItem->getId() > 0 && $stockItem->getManageStock()) 
    { 
     $qty = 100; 
     $stockItem->setQty($qty); 
     $stockItem->setIsInStock((int)($qty > 0)); 
     $stockItem->save(); 
    } 

    $newProduct->getResource()->save($newProduct); 

    //automate reindexing - to display the product in the frontend 
    $indexers = Mage::getSingleton('index/indexer')->getProcessesCollection(); 
    foreach ($indexers as $indexer) 
    { 
     $indexer->reindexEverything(); 
    } 
} 

この情報がお役に立てば幸いです。

ハッピーコーディング...

関連する問題