2013-01-11 87 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(); 
    } 
}