Дублирование продукта с кодом в Magento - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь написать собственный модуль, способный дублировать продукт на несколько продуктов только с разными SKU. Я попытался использовать function duplicate() в /app/code/core/Mage/Catalog/Model/Product.php в моем пользовательском модуле. Но это не работает.

Я использую приведенный ниже код в моем пользовательском файле Obesrever.php для дублирования, но дублирование не происходит

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

Может кто-нибудь предложить мне какие-либо ссылки, чтобы сделать это или любой формат кода будет полезным.

Спасибо

1 Ответ

0 голосов
/ 09 февраля 2016

Было бы здорово, если бы вы могли опубликовать полную функцию, которую вы пытаетесь отлаживать, или создать дубликаты продуктов и config.xml (где вы пытаетесь вызвать событие).

Ниже код работает у меня в CE 1.9.2.2 без каких-либо проблем. Эта функция выполняет следующие задачи:

  1. Создает дубликат исходного продукта
  2. Устанавливает для акции "In Stock", а для Qty - "100" (жестко задано на данный момент)
  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();
    }
}

Надеюсь, это поможет.

Счастливое кодирование ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...