Невозможно напечатать сообщение об ошибке в 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);
,