在yii框架演示中,有一個博客演示。在這個博客演示中,Post控制器有兩個不同的操作:索引和視圖。
/**
* Lists all models.
*/
public function actionIndex()
{
$criteria=new CDbCriteria(array(
'condition'=>'status='.Post::STATUS_PUBLISHED,
'order'=>'update_time DESC',
'with'=>'commentCount',
));
if(isset($_GET['tag']))
$criteria->addSearchCondition('tags',$_GET['tag']);
$dataProvider=new CActiveDataProvider('Post', array(
'pagination'=>array(
'pageSize'=>Yii::app()->params['postsPerPage'],
),
'criteria'=>$criteria,
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
/**
* Displays a particular model.
*/
public function actionView()
{
$post=$this->loadModel();
$comment=$this->newComment($post);
$this->render('view',array(
'model'=>$post,
'comment'=>$comment,
));
}
和指數的看法是:
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'template'=>"{items}\n{pager}",
)); ?>
和觀點的看法是:
<?php $this->renderPartial('_view', array(
'data'=>$model,
)); ?>
但無論指數和視圖使用_view:
<div class="author">
posted by <?php echo $data->author->username . ' on ' . date('F j, Y',$data->create_time); ?>
</div>
<div class="content">
<?php
$this->beginWidget('CMarkdown', array('purifyOutput'=>true));
echo $data->content;
$this->endWidget();
?>
</div>
這裏是我的問題:我可以理解視圖分配'數據' => $ model,所以在_view中,$ data是有效的。在索引操作中,應用了部件clistview,但我無法理解$ data變量的設置位置?我知道$ data顯示了當前的帖子(來自dataprovider)。我只是無法弄清楚yii是怎麼做到的? 感謝您的幫助。
謝謝您的回答。所以我可以看到yii會將關聯數組提取到當前腳本。我看到一個名爲renderItems的CListView方法,這個方法是在做循環渲染工作嗎?如果是這樣,renderItems被調用到什麼地方? – rereadyou
更新了答案 – Ninad
我只是不知道哪種方法會實際上做循環工作。我在框架目錄中找不到任何稱爲此renderItems函數的方法,並且它的所有子目錄(如果此renderItems函數循環通過$ dataprovider) – rereadyou