Hi,
After reading a lot and trying a lot too, i ask your help
I have a CGridView based on a CActiveDataProvider based on two tables (one is User from yii user extension):
public function actionAdmin()
{
$sort = new CSort;
$sort->defaultOrder = 'username ASC';
$sort->attributes = array(
'username'=>'username',
'email'=>'email',
'createtime'=>'createtime',
'lastvisit'=>'lastvisit',
'subscription start' => array(
'asc'=>'subscription.subscriptionstart',
'desc'=>'subscription.subscriptionstart DESC',
),
'subscription end' => array(
'asc'=>'subscription.subscriptionend',
'desc'=>'subscription.subscriptionend DESC',
),
'amount' => array(
'asc'=>'subscription.amount',
'desc'=>'subscription.amount DESC',
),
);
$dataProvider=new CActiveDataProvider('User', array(
//'criteria' => $criteria,
'criteria'=>array(
'with'=>array('subscription:isactiv'=>array('select'=>'{{subscription}}.*','joinType'=>'LEFT OUTER JOIN',
),
),
'together'=>true,
),
'pagination'=>array(
'pageSize'=>Yii::app()->controller->module->user_page_size,
),
'sort' => $sort,
));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
<?php $this->widget('zii.widgets.grid.CGridView', array(
//'dataProvider'=>$model->search(),
//'filter'=>$dataProvider,
'dataProvider'=>$dataProvider,
'columns'=>array(
//array(
// 'name' => 'id',
// 'type'=>'raw',
// 'value' => 'CHtml::link(CHtml::encode($data->id),array("admin/update","id"=>$data->id))',
//),
array(
'name' => 'username',
'type'=>'raw',
'value' => 'CHtml::link(CHtml::encode($data->username),array("admin/view","id"=>$data->id))',
),
array(
'name'=>'email',
'type'=>'raw',
'value'=>'CHtml::link(CHtml::encode($data->email), "mailto:".$data->email)',
),
array(
'name' => 'createtime',
'value' => 'date("d.m.Y",$data->createtime)',
),
array(
'name' => 'lastvisit',
'value' => '(($data->lastvisit)?date("d.m.Y",$data->lastvisit):UserModule::t("Not visited"))',
),
array(
'name' => 'subscription start',
'value' => 'isset($data->subscription->subscriptionstart)? date("d.m.Y",$data->subscription->subscriptionstart) : \'\'',
),
array(
'name' => 'subscription end',
'value' => 'isset($data->subscription->subscriptionend)? date("d.m.Y",$data->subscription->subscriptionend) : \'\'',
),
array(
'name' => 'amount',
'value' => 'isset($data->subscription->amount)? $data->subscription->amount : \'\'',
),
//array(
// 'name' => 'activ',
// 'value' => 'isset($data->subscription->activ)? $data->subscription->activ : \'\'',
// ),
array(
'class'=>'CButtonColumn',
),
),
));
?>
and it work fine (thanks antonio )
Now, I would like to add a filter on the grid, and the problems begin…
In the user class, I add a search function :
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
//$model=$this->loadModel();
$criteria=new CDbCriteria;
$criteria->compare('username', $this->id, true);
$criteria->compare('email', $this->email, true);
$criteria->compare('createtime', $this->createtime, true);
return new CActiveDataProvider('get_class($this)', array(
'criteria'=>$criteria,
));
}
First question, I must replace ‘get_class($this)’ by 'User whereas It don’t understand !, why ?
in my controller :
public function actionAdmin()
{
//$model=$this->loadModel();
//$search = User::model()->search();
$model = new User('search');
// HERE GET YOUR SEARCH PARAMETERS IF ANY
$model->unsetAttributes();
//if(Yii::app()->getRequest()->getParam('name')) $model->name = Yii::app()->getRequest()->getParam('name');
$sort = new CSort;
$sort->defaultOrder = 'username ASC';
$sort->attributes = array(
'username'=>'username',
'email'=>'email',
'createtime'=>'createtime',
'lastvisit'=>'lastvisit',
'subscription start' => array(
'asc'=>'subscription.subscriptionstart',
'desc'=>'subscription.subscriptionstart DESC',
),
'subscription end' => array(
'asc'=>'subscription.subscriptionend',
'desc'=>'subscription.subscriptionend DESC',
),
'amount' => array(
'asc'=>'subscription.amount',
'desc'=>'subscription.amount DESC',
),
);
//$criteria = new CDbCriteria;
//$criteria->compare('username', $this->id, true);
//$criteria->compare('email', $this->email, true);
//$criteria->compare('createtime', $this->createtime, true);
//$criteria->compare('subscription.subscriptionstart', 'subscription.subscriptionstart', true);
//$criteria->compare('subscription.subscriptionend', 'subscription.subscriptionend', true);
//$criteria->compare('subscription.amount', 'subscription.amount', true);
//$criteria->with = array('subscription:isactiv'=>array('select'=>'{{subscription}}.*','joinType'=>'LEFT OUTER JOIN',
// ),
// );
//$criteria->together = true;
$dataProvider=new CActiveDataProvider($model, array(
//'criteria' => $criteria,
'criteria'=>array(
'with'=>array('subscription:isactiv'=>array('select'=>'{{subscription}}.*','joinType'=>'LEFT OUTER JOIN',
),
),
'together'=>true,
),
'pagination'=>array(
'pageSize'=>Yii::app()->controller->module->user_page_size,
),
'sort' => $sort,
//'pagination'=>array( 'pageSize'=>30),
));
$this->render('index',array(
'model'=>$model,
'dataProvider'=>$dataProvider,
));
}
and in my view :
<?php $this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$model->search(),
'filter'=>$dataProvider,
//'dataProvider'=>$dataProvider,
'columns'=>array(
//array(
// 'name' => 'id',
// 'type'=>'raw',
// 'value' => 'CHtml::link(CHtml::encode($data->id),array("admin/update","id"=>$data->id))',
//),
array(
'name' => 'username',
'type'=>'raw',
'value' => 'CHtml::link(CHtml::encode($data->username),array("admin/view","id"=>$data->id))',
),
array(
'name'=>'email',
'type'=>'raw',
'value'=>'CHtml::link(CHtml::encode($data->email), "mailto:".$data->email)',
),
array(
'name' => 'createtime',
'value' => 'date("d.m.Y",$data->createtime)',
),
array(
'name' => 'lastvisit',
'value' => '(($data->lastvisit)?date("d.m.Y",$data->lastvisit):UserModule::t("Not visited"))',
),
//array(
// 'name'=>'status',
// 'value'=>'User::itemAlias("UserStatus",$data->status)',
//),
//array(
// 'name'=>'superuser',
// 'value'=>'User::itemAlias("AdminStatus",$data->superuser)',
//),
array(
'name' => 'subscription start',
'value' => 'isset($data->subscription->subscriptionstart)? date("d.m.Y",$data->subscription->subscriptionstart) : \'\'',
),
array(
'name' => 'subscription end',
'value' => 'isset($data->subscription->subscriptionend)? date("d.m.Y",$data->subscription->subscriptionend) : \'\'',
),
array(
'name' => 'amount',
'value' => 'isset($data->subscription->amount)? $data->subscription->amount : \'\'',
),
//array(
// 'name' => 'activ',
// 'value' => 'isset($data->subscription->activ)? $data->subscription->activ : \'\'',
// ),
array(
'class'=>'CButtonColumn',
),
),
));
?>
…and it don’t works at all…i hope i’m not really far away from the solution but i don(t find and i turn around, so if you could help me.
Thanks a lot