使用renderDynamic后内容被重复输出。

没翻页的时候renderDynamic的内容显示正常,翻页后renderDynamic的内容就被输出两次。我已经在本机和服务器上调试过多次。都是这样的情况。

我是用Yii的demo blog做的测试仅仅修改了三个地方,使用了页面缓存。测试的地址是:http://kina.tk/demo/ 点翻页,多点几次就可以看到UserMenu被重复输出在翻页按钮下面了。

另外,我只修改了demo blog的三个地方:

layouts column2.php


<?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>


<?php $this->renderDynamic('widget', 'UserMenu', array(), true); ?>

config main.php




	'cache'=>array(

		'class'=>'CDbCache',

	),



controllers PostController.php




	public function filters()

	{

		return array(

			'accessControl', // perform access control for CRUD operations

			array(

				'system.web.widgets.COutputCache + index,view',

				'duration'=>60,

                'varyByRoute'=>true,

				'varyByParam'=>array('id','Post_page','tag'),

			),

		);

	}



其他的地方都没有动。

另外抓到翻页后的源代码发现多输出的一次被输出到翻页按钮和</div><!-- content -->之间了,也就是说在<div id="content"></div>的里面,奇怪了为什么不是两次输出都在<div id="sidebar"></div>里面。

而且renderDynamic放在<?php $this->beginContent(’/layouts/main’); ?>和<?php $this->endContent(); ?>外面就不会输出两次了(但renderDynamic的内容实际上是这里面的)。

调试了一下午,没找到是哪里的原因,是不是动态内容和layout冲突了?还是动态内容的实现有bug?

你能提交一个ticket么?谢谢。

提交了,ticket #1024 :)

我遇上了与楼主一样的问题

调试了很多次,觉得是renderDynamic与AJAX冲突,不知道问题是renderDynamic没有处理好还是demo blog里面的AJAX没有处理好。

我觉得应该是demo blog里面的页面翻页的AJAX没有处理好。因为renderDynamic是先在模板中添加一个标示,模板被render之后再把标示替换为动态内容输出。而demo blog里面的AJAX翻页似乎不是请求的局部内容,而是直接请求的整个index页的内容,然后用JS选取id=&quot;yw1&quot;的内容然后更新页面。这样UserMenu也在AJAX请求到的结果里面而被更新到id=&quot;yw1&quot;的DIV中。


至于UserMenu的DIV是id=&quot;yw3&quot;为什么会被选取并更新到页面上id=&quot;yw1&quot;的DIV中,我没有继续研究下去,因为对这部分代码不是很熟悉。大致原理应该是这样,不知道分析得对不对。再次在这提出来是想确定这个问题到底是Yii framework的BUG,还是demo blog的bug。


如果Qiang看到了,希望在下一个版本中修复这个问题。Thanks   <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />