0

嗨,我在销售订单网格中添加了一个新的 mas 操作,允许创建批量发票。为此,我的控制文件是

<?php
   class Iclp_Batchupdate_IndexController extends Mage_Adminhtml_Controller_Action


  public function batchinvoiceAction ()
   {
        $already = " already ";       
        $refererUrl = $this->getRequest()->getServer('HTTP_REFERER');
        $this->loadLayout();
        $this->renderLayout();
        $orderIds = explode(",",$this->getRequest()->getParam('order_ids'));

        foreach ($orderIds as $orderIdss) {
        $order = Mage::getModel('sales/order')->load($orderIdss);
        //echo $orderIdss ."<br/>";
        //echo "already ".$order->getStatusLabel();
        try
        {
            if(!$order->canInvoice())
                        {
                echo   Mage::getSingleton('core/session')->addError($orderIdss.$already.$order->getStatusLabel());


            }
                $invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
                    if (!$invoice->getTotalQty()) {
                    Mage::throwException(Mage::helper('core')->__('Cannot create an invoice without products.'));
                    }
            $invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
            $invoice->register();
            $transactionSave = Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder());
            $transactionSave->save();
            $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true)->save();
            //echo "Invoice are created";
        }
        catch (Mage_Core_Exception $e) {

        }

    }

                //A Success Message
             Mage::getSingleton('core/session')->addSuccess("Some success message");

            //A Error Message
             Mage::getSingleton('core/session')->addError("Some error message");

            //A Info Message (See link below)
             Mage::getSingleton('core/session')->addNotice("This is just a FYI message...");

            //These lines are required to get it to work
            session_write_close();


        $this->getResponse()->setRedirect($refererUrl);

   }



}

一切正常,但问题是它没有在上面代码中的 foreach 中打印错误消息

if(!$order->canInvoice())
                        {
                echo Mage::getSingleton('core/session')->addError($orderIdss.$already.$order->getStatusLabel());


            }

但底部错误消息显示正确。此外,如果我使用前端操作扩展类,它还会打印 foreach 消息。请建议我在哪里做错了

4

1 回答 1

0

当您在 adminhtml中时,您应该将错误和消息添加到admintml/session而不是添加到。core/session那应该正确显示消息。你不应该需要session_write_close();. 也不需要回显消息,重定向后应该由 Magento 自动处理。

也没有必要打电话$this->loadLayout();$this->renderLayout();因为你在最后重定向。

最后,关于重定向,您不应该自己阅读引荐来源网址,Magento 可以更可靠地为您提供。只需使用$this->_redirectReferer();方法而不是$this->getResponse()->setRedirect($refererUrl);.

于 2014-11-14T09:44:59.133 回答