2013-01-11 88 views
2

我正在尝试从目录中删除产品中的删除Magento中的产品问题

每当我尝试通过使用管理界面(大量或单一动作)删除产品时,它会引发我500内部服务器错误。 每当我尝试使用脚本删除产品(编程)它只是挂在删除方法调用

没有显示错误输出,即使打开日志记录也不会抛出异常并且日志无声。

下面是示例代码我在我的脚本中使用:

//... 
$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToSelect('sku') 
    ->addStoreFilter($store_id); 
$collection->load(); 

// collection is not empty I checked 
foreach ($collection as $product) { 
    try { 
     $product->delete(); // this is the line where it hangs 
     print $product->getSku() . " deleted" . PHP_EOL; 
    } catch (Exception $e) { 
     print $e->getMessage(); 
    } 
} 

有没有人有这样的经验,可能是什么原因?

这是Magento Enterprise 1.11,它与我所知的Magento Community 1.6相对应。

+0

多少产品你有你的网站吗?我在巨大的目录上遇到了很长的加载时间(当你在你的集合上使用foreach()时,你基本上调用$ collection-> load())。什么是你的php.ini文件中的memory_limit? – 1000Nettles

+0

@Yrcrz我检查过那样的东西。如果在删除方法调用后检查注释行,则表示这是挂起的行。 –

回答

5

Magento产品必须从php中的'admin'中删除。您必须声明您正在从安全区域删除。在外部脚本中,通常使用Mage :: app('admin');但你可以像下面这样声明'isSecureArea'。

此外,赶上Mage_Core_Exception看看问题可能是什么。

编辑:快速谷歌搜索导致另一种解决方案。

http://www.fortwaynewebdevelopment.com/magento-delete-products-programmatically/

这一个看起来像它应该是在位于您的Magento的根文件。它会删除所有的产品,所以要小心,但它会有所不同。它不是使用集合,而是通过首先解析产品ID,然后解析每个产品对象来加载每个产品对象。我首先想到了这个建议,但收藏模式总是'magento的方式',并且是第一次尝试!

我注意到有时一个对象是一个集合的一部分,与加载的对象模型有点不同。 Magento就像这样有点棘手。希望这可能会有所帮助。

<?php 
function deleteAllProducts() 
{ 
    require_once 'app/Mage.php'; 
    Mage :: app("default") -> setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID); 
    $products = Mage :: getResourceModel('catalog/product_collection')->setStoreId(1)->getAllIds(); 
    if(is_array($products)) 
    { 
     foreach ($products as $key => $pId) 
     { 
      try 
      { 
       $product = Mage::getModel('catalog/product')->load($pId)->delete(); 
       echo "successfully deleted product with ID: ". $pId ."<br />"; 
      } 
      catch (Exception $e) 
      { 
       echo "Could not delete product with ID: ". $pId ."<br />"; 
      } 
     } 
    } 
} 
deleteAllProducts(); 
?> 
+0

谢谢,我并不知道这种情况。我会在星期一检查第一件事。顺便说一下,通过在初始化过程中设置“Mage :: app() - > setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID)”来打开“安全区域”因为我这样做了,我只是没有在这里展示过。 –

+0

设置isSecureArea不起作用。 –

+0

我编辑了我的解决方案以包含完全不同的方法。让我知道。 – CarComp

0

我们找到了解决此问题的方法,可以帮助任何有此问题的人完成任务。

导出您想要删除的所有产品,并在之后使用操作“删除实体”导入它们。

从管理员界面或自定义脚本中删除产品的问题仍然存在,我将继续对此进行调查并相应地更新答案。

+0

如果您无法从管理界面中删除产品,则核心中的内容发生了变化,或者其中一个扩展程序导致了问题。检查你的/var/www/var/log/system.log错误报告,以及你的php错误日志apache或nginx或任何你正在使用。他们会*报告不同的事情!希望这可以帮助您将其缩小到像php错误那样简单的事情。 – CarComp

0

按产品SKU删除产品,使用下面的代码:

<?php 
//... 
$collection = Mage::getModel('catalog/product')->getCollection(); 
$collection->addAttributeToSelect('sku') 
    ->addStoreFilter($store_id); 
$collection->load(); 

// collection is not empty I checked 
foreach ($collection as $product) { 
    try { 

     $product = Mage::getModel('catalog/product')->loadByAttribute('sku', $product->getSku()); 

     $product->delete(); 
     echo $product->getSku() . " deleted" . PHP_EOL; 

    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
}