Невозможно напечатать сообщение об ошибке в foreach в администраторе magento

Привет! Я добавил новое действие 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());


            }

но нижнее сообщение об ошибке отображается правильно. Более того, если я расширяю класс с помощью front-action, он также печатает сообщения foreach. Пожалуйста, предложите, где я делаю ошибку

1 ответ

Вы должны добавить свои ошибки и сообщения в admintml/session и не core/session когда вы находитесь в adminhtml. Это должно отображать сообщение правильно. Вам не нужно session_write_close();, Также нет необходимости выводить сообщение, которое должно обрабатываться Magento автоматически после перенаправления.

Также нет необходимости звонить $this->loadLayout(); а также $this->renderLayout(); потому что вы перенаправляете в конце.

Наконец, что касается перенаправления, вы не должны читать реферал самостоятельно, Magento может сделать это для вас более надежно. Просто используйте $this->_redirectReferer(); метод вместо $this->getResponse()->setRedirect($refererUrl);,

Другие вопросы по тегам