如何 在controller里render多次

因为一些原因,我可能需要在Controller里

$this->render(‘t1’);

$this->render(‘t2’);

if (true) {

$this->render(‘t3’);

}

。。。

但发现Yii每次render后,就渲染layout。我要的目的是

一个layout里,依次render t1 t2 t3。

当然,可以在t1里,进行renderPartial控制。但是不那么方便。

请问强,有什么好的方法么?


public function render($view,$data=null,$return=false)

第三个参数设置为true就是返回字符串,而非直接打印~~

返回的数据,已经是包含了layout的

public function render($view,$data=null,$return=false)

$this->layout=‘column_empty’;

做个空的Layout,咋样

render() 之前使用


$this->layout=false;

我的意图是要将

t1 t2 t3…等等,按照顺序渲染某一个layout里啊。类似于,在view里调用renderPartial。

$this->render(‘t1’);

$this->render(‘t2’);

if (true) {

$this->render(‘t3’);

}

你在前面做个if判断,如果有了reder,就后面的用renderPartial

不知道你这么做的原因是什么,不过你可以在t3视图里调用:

$this->beginClip(‘t1’);

$this->renderPartial(‘t1’);

$this->endClip();

$this->beginClip(‘t2’);

$this->renderPartial(‘t2’);

$this->endClip();

然后在layout里通过$this->clips[‘t1’]和$this->clips[‘t2’]获得刚才的结果。

我说错了 应该是全部 renderPartial。没搞明白,为什么qiang写的那么复杂。

$this->beginClip();

$this->endClip();

可以不要吧?我都是这么做的。

呵呵,其实不用clips。你直接用renderPartial返回就行了。

renderPartial是不带layout的呀。

我想要的是t1 t2 t3。。。等这几个视图根据一些规则,依次按顺序渲染到“某一个layout”里。当然这个功能,如果在view里做很简单的(像楼上几位说的renderPartial),如果在controller里,好像不是很方便。

cake和zf的做法,好像是render时,将数据保存为一个变量(如$_output),多次render,都保存到这个变量里,在afterAction后,再将整个变量渲染到指定的layout当中,并输出。

不知道是不是我钻牛角了,呵呵!

给controller添加一个view,一切都搞定,那么复杂做什么啊?

又不科学,又不直观,又不OO

手册还是要多看呀,很多没用过~