1.
./code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Grids.php
$this->getLayout()->createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_all')->toHtml();
./code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order.php:40:
return $this->getLayout()->createBlock('adminhtml/widget_button')->setData($addButtonData)->toHtml();
./code/community/Zendesk/Zendesk/Block/Adminhtml/Create/Order.php:40:
return $this->getLayout()->createBlock('adminhtml/widget_button')->setData($addButtonData)->toHtml();
class Aschroder_SMTPPro_Block_Adminhtml_Test
extends Mage_Adminhtml_Block_System_Config_Form_Field
{
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
$this->setElement($element);
$buttonHtml = $this->_getAddRowButtonHtml($this->__('Run Self Test'));
return $buttonHtml;
}
protected function _getAddRowButtonHtml($title)
{
$buttonBlock = $this->getElement()->getForm()->getParent()->getLayout()->createBlock('adminhtml/widget_button');
$_websiteCode = $buttonBlock->getRequest()->getParam('website', null);
$params = array();
if(!empty($_websiteCode)) {
$params['website'] = $_websiteCode;
}
// TODO: for real multi-store self-testing, the test button (and other configuration options)
// should probably be set to show in website. Currently they are not.
$url = Mage::helper('adminhtml')->getUrl("*/smtp_test/index", $params);
$buttonHtml = $this->getLayout()->createBlock('adminhtml/widget_button')
->setType('button')
->setLabel($this->__($title))
->setOnClick("window.location.href='".$url."'")
->toHtml();
return $buttonHtml;
}
}
直接创建一个block,然后加入到配置中
```
public function indexAction()
{
//Get current layout state
$this->loadLayout();
$block = $this->getLayout()->createBlock(
'Mage_Core_Block_Template',
'my_block_name_here',
array('template' => 'activecodeline/developer.phtml')
);
// 从layout中得到一个已有的block,然后将上面创建的加入的写法。
$this->getLayout()->getBlock('content')->append($block);
//Release layout stream... lol... sounds fancy
$this->renderLayout();
}
```
```
public function indexAction(){
$this->loadLayout();
$this->_initLayoutMessages('customer/session');
$this->renderLayout();
}
```
2.代码剖析
上面是在controller和block可以被执行中执行的
2.1 $this->getLayout()
2.1.1 block: Mage_Core_Block_Abstract
/**
* Retrieve layout object
*
* @return Mage_Core_Model_Layout
*/
public function getLayout()
{
return $this->_layout;
}
返回的是:Mage_Core_Model_Layout
2.1.2 controller: Mage_Core_Controller_Varien_Action
/**
* Retrieve current layout object
*
* @return Mage_Core_Model_Layout
*/
public function getLayout()
{
return Mage::getSingleton('core/layout');
}
本质就是:单例模式的core/layout model:
Mage::getSingleton('core/layout');
2.2 loadLayout