Magneto订单列表页渲染过程

后台订单列表页的地址是这个:http://store.oneplus.net/index.php/admin/admin/sales_order/index/key/45de02bec5f8badcf5664db735258c4c/
其中前面的store.oneplus.net是域名,实际执行的方法为
Mage_Adminhtml_Sales_OrderController::indexAction

里面的代码很简单:
 $this->_title($this->__('Sales'))->_title($this->__('Orders'));

        $this->_initAction()
            ->renderLayout();

我们最终的列表页在哪里呢,看下调用链
Mage_Adminhtml_Sales_OrderController::_initAction
Mage_Adminhtml_Sales_OrderController::loadLayout
Mage_Adminhtml_Controller_Action::loadLayout
Mage_Core_Controller_Varien_Action::loadLayout
Mage_Core_Controller_Varien_Action::addActionLayoutHandles

列表页的加载是在Mage_Core_Controller_Varien_Action::addActionLayoutHandles方法中

 $update = $this->getLayout()->getUpdate();
        // load store handle
        $update->addHandle('STORE_'.Mage::app()->getStore()->getCode());

        // load theme handle
        $package = Mage::getSingleton('core/design_package');
        $update->addHandle(
            'THEME_'.$package->getArea().'_'.$package->getPackageName().'_'.$package->getTheme('layout')
        );

        // load action handle
        $update->addHandle(strtolower($this->getFullActionName()));

这里会添加以下handle:default、主题、action的全名
订单列表页的全action名称为adminhtml_sales_order_index
而在app\design\adminhtml\default\default\layout\sales.xml有这么一段
<adminhtml_sales_order_index>
        <reference name="content">
            <block type="adminhtml/sales_order" name="sales_order.grid.container"></block>
        </reference>
    </adminhtml_sales_order_index>

就会加载块Mage_Adminhtml_Block_Sales_Order,其构造函数如下:
 public function __construct()
    {
        $this->_controller = 'sales_order';
       ……
    }

而在其父类Mage_Adminhtml_Block_Widget_Grid_Container的_prepareLayout方法中:
 $this->setChild( 'grid',
            $this->getLayout()->createBlock( $this->_blockGroup.'/' . $this->_controller . '_grid',
            $this->_controller . '.grid')->setSaveParametersInSession(true) );
        return parent::_prepareLayout();

这样又会加载adminhtml/sales_order_grid类型的block,即类Mage_Adminhtml_Block_Sales_Order_Grid
这里就是后台用的很多的网格控件,网格控件的用法,后续再分析

posted @ 2015-06-20 10:56  szphper  阅读(243)  评论(0)    收藏  举报