【问题标题】:Magento duplicating a product programmatically is not displaying in the frontendMagento 以编程方式复制产品未显示在前端
【发布时间】:2016-02-08 10:14:06
【问题描述】:

我是磁电机的新手,我尝试以编程方式复制产品并且我成功了问题是重复的产品显示在磁电机管理端,而在前端,产品没有显示在下面是我的代码你能告诉我什么是对我很有帮助的问题。我为它创建了一个单独的模块,下面是我的代码。

class Magentotutorial_Helloworld_IndexController extends Mage_Core_Controller_Front_Action {        
    public function indexAction() {
        $final = $_POST['value'];
        $obj = Mage::getModel('catalog/product');
        $_product = $obj->load($final); 
        $newProduct = $_product->duplicate();

        $newProduct->setStatus(1);


        $newProduct->setSku('value'.$final);
         $newProduct->setWebsiteIds($_product->getWebsiteIds());
        $newProduct->getResource()->save($newProduct);
    }

}

【问题讨论】:

    标签: php jquery magento


    【解决方案1】:

    你发布的这个功能很好地创建了复制产品。但是,它没有设置以下属性(由于它在前端不可见):

    1. 导航到目录 > 管理产品 > 重复产品 > 库存

    数量为 0库存为“缺货” - 您需要在函数中编写以下代码以将此产品设置为 库存:“有货”数量:[一些默认值]说,100

    在调用$newProduct->setWebsiteIds($_product->getWebsiteIds());的行之后,可以插入以下行:

    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($newProduct->getId());
    if ($stockItem->getId() > 0 && $stockItem->getManageStock())
    {
        $qty = 100; //set a default max value
        $stockItem->setQty($qty);
        $stockItem->setIsInStock((int)($qty > 0));
        $stockItem->save();
    }
    
    1. 您需要手动或自动运行重新索引

    产品将显示在前端。请参阅下面的屏幕截图:

    [编辑]

    使用下面的代码,让我知道它是否适合你:

    public function indexAction()
    {
        $productId      = $this->getRequest()->getParam('value');
        $productObject  = Mage::getModel('catalog/product');
    
        $_product   = $productObject->load($productId);
    
        $newProduct = $_product->duplicate();
    
        $newProduct->setStatus(1);
        //$newProduct->setName('Duplicate-' . $_product->getName());
        $newProduct->setSku('value' . $productId);
        $newProduct->setWebsiteIds($_product->getWebsiteIds());
    
        $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);
    
        $indexers = Mage::getSingleton('index/indexer')->getProcessesCollection();
        foreach ($indexers as $indexer)
        {
            $indexer->reindexEverything();
        }
    }
    

    希望这会有所帮助。

    快乐编码...

    【讨论】:

    • 数量保持为零,如何重新索引我应该在哪里编写代码?
    • 以上答案已在 CE 1.9.2.2 中测试,并且可以正常工作(已共享屏幕截图)。重新索引代码也可以在同一个函数中编写。
    • 我已经发布了一个更新的答案。请使用该代码,看看它是否按预期工作。这包含重新索引代码。
    • 我使用了你在回答中提到的相同代码,但我仍然没有得到解决方案我有同样的问题,只是产品没有在前端显示另一件事是数量仍然为零仅在管理方面
    • 不确定这对您有何用处。你错过了什么吗?也许你可以告诉我你正在使用的 Magento 版本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-22
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多