CActiveDataProvider e Pagination

Ciao ragazzi, di nuovo.

Poniamo che io voglio usare CActiveDataProvider per recuperare un post da ID e visualizzarne i commenti.

Allora in actionView) scrivo:


	public function actionView($id)

	{

		$dataProvider=new CActiveDataProvider($this->loadModel($id), array(

            'criteria'=>array(

                'order'=>'data DESC',

                'with'=>array('autore', 'comments'),

            ),

            'pagination'=>array(

                'pageSize'=>1,

            ),

        ));


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

			'dataProvider'=>$dataProvider,

            'id'=>$id

		));

	}

Per la view invece:




<h1>View Post #<?php echo $id; ?></h1>


<?php $this->widget('zii.widgets.CListView', array(

	'dataProvider'=>$dataProvider,

	'itemView'=>'_view2',

)); ?>



In _view2 invece recupero i valori del post tramite $data->attributo e con un foreach quello dei commenti.

Come faccio a utilizzare la paginazione per i commenti e non per il post?

Grazie!

Mamma mia che casino!!

Allora, non usare un CActiveDataProvider per un solo elemento, carica semplicemente il model:




$model= $this->loadModel($id);



Ora prepariamo il dataProvider per i post:


 $dataProvider=new CActiveDataProvider('comments', array(

            'criteria'=>array(

                'order'=>'data DESC',

                'condition'=>'post_id= :post',

                'params'=>array(':post'=>$model->id),

                'with'=>array('autore', 'comments'),

            ),


        ));

In generale: usa semplicemente Post::model()->findByPk() per ottenere un model (in questo caso viene fatto nella funzione loadModel) e usa i dataprovider per gestire elenchi di model.

D’accordo, claro :D

Io l’avevo pensata in quel modo per evitare la doppia query.