widget控件:

 

1

在使用widget控件的block,一般是不指定template的。

要么通过$this->$this->setTemplate('widget/form/container.phtml'),自己指定,

要么通过父类的构造函数里面的执行语句: $this->setTemplate('widget/form/container.phtml');来指定

2

加载子block:

$this->setChild('form', $this->getLayout()->createBlock($this->_blockGroup . '/' . $this->_controller . '_' . $this->_mode . '_form'));

一般是通过上面的方法加载,在子类中定义变量,在父类中通过上面的方法生成!

3

显示内部控件。

3.1直接通过调用子block显示内部控件的,getChildHtml。

3.2先调用一个函数,譬如:getFormHtml,通过函数读取action,然后得到内部控件显示的信息,然后再使用getChildHml()显示出来!

譬如: 

 

 public function getFormHtml()

    {   //$this->_children[$name];

        $this->getChild('form')->setData('action', $this->getSaveUrl());

        return $this->getChildHtml('form');

    }

 

 

 

  public function     gettSaveUrl()

    {

        return $this->getFormActionUrl();

    }

 

 

 

  public function getFormActionUrl()

    {

        if ($this->hasFormActionUrl()) {

            return $this->getData('form_action_url');

        }

        return $this->getUrl('*/' . $this->_controller . '/save');

    }

 

将得到的action赋值于form,然后再执行getChildHtml()方法,加载子block。

 

4指定phtml,子block如果有孙block的话,继续通过setChild方法加载。

 

5以上为空间包含加载的方式。

在加载前,也就是block里面的php文件,执行__construction(),_prepareLayout()方法,提供1.css标示信息(如id,destElementId等),2路径信息,3加载的子block,4按钮信息等。为子block的执行提供使用的信息。

 

6当然,在执行前,model,helper,controllers,etc,sql,都要配置好!!