نمایش چندین کوئری در یک صفحه

[right]سلام دوستان ، روزتون به خیر

یه سوال داشتم

من الان تو صفحه ی اول سایتم می خوام چندتا اطلاعات رو نشون بدم، مثلا یه قسمت آخرین نظرات ثبت شده ، یه قسمت آخرین تاپیک های ثبت شده و الی آخر

من توی هرکدام از مدل های مربوطه ام اومدم با استفاده از

CDbCriteria

یک سری کوئری نوشتم و توی کنترلر مربوط به صفحم با دستور زیر اون ها رو اجرا کردم :

$dataProvider=new CActiveDataProvider(Article::model()->latestSentArticle(),array(‘pagination’ => false));

اما مشکل اینجاست که من توی این فانکشن کنترلرم که مربوط به صفحه ی ایندکس هست باید چندین کوئری رو اجرا کنم اما فقط یک بار میشه توی

yii

از دستور

CActiveDataProvider

استفاده کرد ، الان من باید چه کار کنم که بتونم چند تا کوئری رو با دستور

CActiveDataProvider

اجرا کرده و توسط

CListView

نمایش بدم ؟

[/right]

[rtl]ببنید شما چند راه دارید:

[list=1][]استفاده از renderPartial() برای زمانی که شما یک ویوی خاصی را می خواهید در جایی مشخص از ویویی دیگر نمایش دهید.[]استفاده از CPortlet که می تواند سایدبار کناری را برایتان فراهم کند. البته در فایل /layout/column2.php که مربوط به سایدبار میشه.[*]در غیر این صورت تمامی مواردی که قصد دارید در یک ویوی خاص نمایش دهید باید در کنترلر مربوطه داده های آن را تأمین و به آن ویو ارسال کنید.[/list][/rtl]

[right]خیلی ممنون از پاسخگوییتون دوست عزیز ، توی مورد اول چه جوری میشه یک ویو رو توی یک ویوی دیگر

include

کرد ؟

و در مورد سوم ، منظورتون این هست که من توی کنترلر ام ، تو فانکشن های مختلف کوئری هام رو بنویسم و

بعد همشون رو به یک ویو ارسال کنم؟ من الان دقیقا مشکلم همین هست و توی کنترلرهای مختلف کوئری زدم و به یک ویو ارسال کردم ، اما توی اون ویو فقط میشه یکبار از

dataProvider

استفاده کرد

[/right]

[rtl]برای مورد اول مثال:[/rtl]




<?php if ($model->commentCount >= 1): ?>

    	<h4>

        	<?php echo $model->commentCount . Yii::t('default', 'comment|comments', $model->commentCount); ?>

    	</h4>

    	<?php

    	$this->renderPartial('_comments', array(

        	'post' => $model,

        	'comments' => $model->comments,

    	));

    	?>

    	<?php

	endif;

	?>



[rtl]ببنید برای مورد سوم هم مثلا در پروژه بلاگ، صفحه اول شما همان کنترلر post شما هست و می خواهید در همان صفحه اول مثلا در پایین صفحه کامنت ها را هم نمایش بدید، شما باید توی کنترلر actionIndex() کنترلر post بیاید یک متغییر برای گرفتن اطلاعات از مدل comment در نظر بگیرید و در نهایت جایی که می خواهد رندر کند این طوری عمل می کنید:[/rtl]




$comments = Comment::model()->findAll(array('order'=>'comment.update_time DESC'));

$this->render('index', array(

[indent]'dataProvider' => $dataProvider,

'comments' => $comments,


));

[/indent]