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
这里就是后台用的很多的网格控件,网格控件的用法,后续再分析

浙公网安备 33010602011771号