Magento从前端删除特定订单

时间:2015-04-18 10:50:40

标签: php magento

我正在尝试使用以下代码删除订单 -

require 'app/Mage.php';
Mage::app('admin')->setUseSessionInUrl(false);                                                                                                                 
//replace your own orders numbers here:
$test_order_id='100000001';

try{
   Mage::getModel('sales/order')->loadByIncrementId($test_order_id)->delete();
   echo "order #".$test_order_id." is removed".PHP_EOL;
}catch(Exception $e){
   echo "order #".$test_order_id." could not be remvoved: ".$e->getMessage().PHP_EOL;
    }
}
echo "complete."

但我仍然没有取得任何成功。请帮忙。

2 个答案:

答案 0 :(得分:2)

如果您回显了被捕获的异常$e->getMessage(),您可能会看到以下消息:

Cannot complete this operation from non-admin area.

您要了解的是保护模型免受非安全区域影响的功能。

/**
 * Safeguard func that will check, if we are in admin area
 *
 * @throws Mage_Core_Exception
 */
protected function _protectFromNonAdmin()
{
    if (Mage::registry('isSecureArea')) {
        return;
    }
    if (!Mage::app()->getStore()->isAdmin()) {
        Mage::throwException(Mage::helper('core')->__('Cannot complete this operation from non-admin area.'));
    }
}

有充分理由,非管理员网站不应该删除订单。我可以建议如下。

  1. 创建一个删除订单的设置脚本,
  2. 创建删除订单的管理页面
  3. 使用Mage::register('isSecureArea', 1);
  4. 将前端页面设置为“安全区域”

    我建议你在这里使用选项1或2。

    对于设置脚本,您需要使用以下代码将商店设置为admin。

    Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
    

答案 1 :(得分:0)

我遇到同样的问题并尝试更新以下代码

  require 'app/Mage.php';
    Mage::app('admin')->setUseSessionInUrl(false);                                                                                                                 
    //replace your own orders numbers here:
    $test_order_id='100000001';

    try{
       Mage::register('isSecureArea', true);
       Mage::getModel('sales/order')->loadByIncrementId($test_order_id)->delete();
       Mage::unregister('isSecureArea');
       echo "order #".$test_order_id." is removed".PHP_EOL;
    }catch(Exception $e){
       echo "order #".$test_order_id." could not be remvoved: ".$e->getMessage().PHP_EOL;
        }
    }
    echo "complete."