1

In Adminhtml (Sales->Order->view ) i have add the fieldset, this shows the content correctly.

When i am using the submitAndReloadArea the value have submited and saved successfully but the value retrieve i got the below error,

Fatal error: Call to a member function toHtml() on a non-object in /var/www/html/emsstore/app/code/local/Mage/Adminhtml/controllers/Sales/OrderController.php on line 783

Below are my files

i got error in $response = $this->getLayout()->getBlock('order_pickstatus')->toHtml(); this code which is in OrderController.php.

OrderController.php

class Mage_Adminhtml_Sales_OrderController extends Mage_Adminhtml_Controller_Action
{
    .....
    .....
    public function changePickstatusAction()
    {
        try {
            $id = $this->getRequest()->getParam('order_id');
            $order = Mage::getModel('sales/order')->load($id);
            $response = false;
            $data = $this->getRequest()->getPost('pickup_status');
            $order->setpickup_status($data);
            $order->save();
            $response = $this->getLayout()->getBlock('order_pickstatus')->toHtml();

        }
        catch (Mage_Core_Exception $e) {
            $response = array(
                'error'     => true,
                'message'   => $e->getMessage(),
            );
            $response = Mage::helper('core')->jsonEncode($response);
        }
        catch (Exception $e) {
            $response = array(
                'error'     => true,
                'message'   => $this->__('Cannot add order history.')
            );
            $response = Mage::helper('core')->jsonEncode($response);
        }
        $this->getResponse()->setBody($response);
    }
}

app/design/adminhtml/default/default/layout/sales.xml

<adminhtml_sales_order_changepickstatus>
    <block type="adminhtml/sales_order_view_pickstatus" name="order_pickstatus" template="sales/order/view/pickstatus.phtml" output="toHtml"></block>
</adminhtml_sales_order_changepickstatus>

<adminhtml_sales_order_view>
    .......
    <reference name="left">
        <block type="adminhtml/sales_order_view_tabs" name="sales_order_tabs">
            <block type="adminhtml/sales_order_view_tab_info" name="order_tab_info" template="sales/order/view/tab/info.phtml">
                .....
                <block type="adminhtml/sales_order_view_pickstatus" name="order_pickstatus" template="sales/order/view/pickstatus.phtml"></block>
                ...
        </block>
    </reference>
</adminhtml_sales_order_view>

template file, app/design/adminhtml/default/default/template/sales/order/view/pickstatus.phtml

<div id="order_pickstatus_block">
    <div id="pickstatus_form" class="order-pickstatus-form">
        <span class="field-row">
            <label class="normal" for="pickup_status"><?php echo Mage::helper('sales')->__('Status') ?></label>
            <select name="pickup_status" id="pickup_status">
                <option value="">--Select Status--</option>
                <option value="notdelivered">Not Delivered</option>
                <option value="delivered">Delivered</option>
            </select>
        </span>
        <div class="f-right">
            <?php echo $this->getChildHtml('submit_button') ?>
        </div>
        <div class="clear"></div>
    </div>
    <div class="divider"></div>

</div>

Block file

class Mage_Adminhtml_Block_Sales_Order_View_Pickstatus extends Mage_Adminhtml_Block_Template
{
    protected function _prepareLayout()
    {
        $onclick = "submitAndReloadArea($('order_pickstatus_block').parentNode, '".$this->getSubmitUrl()."')";
        $button = $this->getLayout()->createBlock('adminhtml/widget_button')
            ->setData(array(
                'label'   => Mage::helper('sales')->__('Submit Status'),
                'class'   => 'save',
                'onclick' => $onclick
            ));
        $this->setChild('submit_button', $button);
        return parent::_prepareLayout();
    }

    public function getOrder()
    {
        return Mage::registry('sales_order');
    }

    public function getSubmitUrl()
    {
        return $this->getUrl('*/*/changePickstatus', array('order_id'=>$this->getOrder()->getId()));
    }
    public function getPickstatus()
    {
        return $this->getOrder()->getPickup_status();
    }



}

what is wrong in my code.

Anything more to config?

thanks in advance.

0

1 Answer 1

2

You need to load the layout to use the layout. i.e $this->loadLayout().

public function changePickstatusAction()
{
    try {
        $this->loadLayout();   //added
        $id = $this->getRequest()->getParam('order_id');
        $order = Mage::getModel('sales/order')->load($id);
        $response = false;
        $data = $this->getRequest()->getPost('pickup_status');
        $order->setpickup_status($data);
        $order->save();
        $response = $this->getLayout()->getBlock('order_pickstatus')->toHtml();

    }
 -----
 -----
 -----

If still the problem persist, add $this->loadLayout('adminhtml_sales_order_view'); instead of just $this->loadLayout().

2
  • when use $this->loadLayout(); i got error Fatal error: Call to a member function getId() on a non-object in /var/www/html/emsstore/app/code/local/Mage/Adminhtml/Block/Sales/Order/View/Pickstatus.php on line 22
    – Helphin
    Commented Apr 30, 2014 at 4:52
  • When using $this->loadLayout('adminhtml_sales_order_view'); i got a error Fatal error: Call to a member function getBackUrl() on a non-object in /var/www/html/emsstore/app/code/core/Mage/Adminhtml/Block/Sales/Order/View.php on line 287
    – Helphin
    Commented Apr 30, 2014 at 4:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.