Yii CGridView multiple dataProvider - yii

It's possible put two o more parameters to the "dataProvider" attribute in CGridView?
Example:
$dataProvider=new CActiveDataProvider('Gallery', array(
'criteria'=>array(
'condition'=>'type=1',
),));
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'gallery-grid',
'dataProvider' => array($dataProvider, $model->search()),
'filter' => $model));
I want to put $dataProvider and $model->search() in the same filter, it is possible?

I guess no, but you can probably use another way:
$dataProvider = $model->search();
$dataProvider->criteria->addCondition('type=1');
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'gallery-grid',
'dataProvider' => $dataProvider,
'filter' => $model
));

Related

Save data from gridview to another table yii2

I have a gridview with filtered data. How can I export data to another table, like ExportMenu from kartik?
<?= GridView::widget([
'options' => ['width' => '70'],
'dataProvider' => $dataProvider,
echo ExportMenu::widget([
'dataProvider' => $dataProvider,
'columns' => $gridColumns
]);
?>
if you have a gridview with filterd data this mean that you have $dataProvider
simmply try using render to the new view (if the table is in an other view) or in the new girdview
return $this->render('my_other_view', [
'searchModel' => $searchModel,
'dataProvider' => $dataProvider,
]);
or call an action passing the dataProvider as a param
Url:to(['/your_controller/action', 'dataProvider' => $dataProvider);
each dataProvider contain a models attribute that list all the model related to the dataProvider so if you need save this models in a new table you could use this code in you action
foreach( $dataProvider->models as $model) {
$myModel = new MyModel();
$myModel->att1 = $model->att1;
$myModel->att2 = $model->att2;
......
$myModel->save();
}

Yii cgridview cactivedataprovider doesnt work properly

I configured the Yii cactivedataprovider as the documentation writes:
$criteria = new CDbCriteria();
$criteria->together = true;
$criteria->with = array(
'relationId0',
'relationId1',
...
);
$criteria->compare('"relationId0".property0', $this->relationId0_property0, true);
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'sort' => array(
'attributes' => array(
...
'relationId0.property0' => array(
'asc' => '"relationId0".property0',
'desc' => '"relationId0".property0 DESC',
),
...
)
)
));
so, when the ->together is false, then the gridview works properly and gets all rows what the pagination allowed, but in this case the compare (so the search) doesnt work (because this way doesnt use the related objects in the sql query),
but when ->together is true (and it is the solution supposedly) the compare is working but the gridview gets random number of rows in each page.
Thank you for helping.
Try to add pagination into your dataprovider.
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination'=>array('pageSize'=>10),
'sort' => array(
'attributes' => array(
...
'relationId0.property0' => array(
'asc' => '"relationId0".property0',
'desc' => '"relationId0".property0 DESC',
),
...
)
)
));
This should solve your problem.

Yii, CGridView not showing records of a certain attribute

So I have created records and each has their own particular Service field. They are all filled up (not null).
In the MySQL database, there are also records of that field Service
But in my CGridView, my Service field is all blank. All the Service fields are blank for all the records. When I click on the button View - The one with the magnifying glass, it says Service - Not Set
Can I know what may cause the problem? Please help me Thanks!
UPDATED WITH CGRIDVIEW CODE
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'booking-grid',
'htmlOptions'=>array('class'=>'grid-view grid-size'),
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
array(
'name'=>'date',
'htmlOptions'=>array('style'=>'text-align:center', 'height'=>'50px', 'width'=>'80px'),
'headerHtmlOptions'=>array('height'=>'30px'),
),
array(
'name'=>'timeStart',
'header'=>"Time",
'htmlOptions'=>array('style'=>'text-align:center', 'width'=>'80px'),
),
array(
'name'=>'client_id',
'value'=>'GxHtml::valueEx($data->client)',
'filter'=>GxHtml::listDataEx(Client::model()->findAllAttributes(null, true)),
'htmlOptions'=>array('width'=>'200px'),
),
array(
'name'=>'service_id',
'value'=>'GxHtml::valueEx($data->service)',
'filter'=>GxHtml::listDataEx(Service::model()->findAllAttributes(null, true)),
),
array(
'name' => 'complete',
'header'=>'Status',
'value' => '($data->complete == 0) ? Yii::t(\'app\', \'Open\') : Yii::t(\'app\', \'Close\')',
'filter' => array('0' => Yii::t('app', 'Open'), '1' => Yii::t('app', 'Close')),
'htmlOptions'=>array('width'=>'60px', 'style'=>'text-align:center'),
),
'remarks',
array(
'class' => 'CButtonColumn',
'visible'=>true,
'htmlOptions'=>array('width'=>'70px'),
'template' => '{view}{update}{delete}{changeComplete}',
'buttons'=>array(
'view' => array(
'visible'=>"true",
),
'update' => array(
'visible'=>"true",
),
'delete' => array(
'visible'=>"UserIdentity::isRoleMember('Admin')",
),
'changeComplete' => array(
'visible' => '$data->complete=="0"',
'imageUrl' => 'images/complete.png',
'options' => array(
'title' => 'Complete',
),
'url' => 'Yii::app()->createUrl("booking/changeComplete", array("id"=>$data->id))',
'click' => "function(){
$.fn.yiiGridView.update(\"booking-grid\", {
type:'POST',
url:$(this).attr('href'),
success:function(data) {
$.fn.yiiGridView.update(\"booking-grid\");
}
})
return false;
}",
),
),
),
))); ?>
I have tried looking at other CGridViews with the same field, they look the same and they're working perfectly fine.
I think the problem is $data->service. Probably your data has a relation with the Service entity. So for accessing attributes of Service you should use $data->service->attributeName.

How to add radio into cgridview

I want to add single radio button to gridview row by row at yii. I googling like this "yii single radio button into cgridview" but I can't get what I want.
This is my gridview
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'acc-recei-grid',
'dataProvider'=>$model->search_implementerlist(),
'filter'=>$model,
'columns'=>array(
array(
'class' => 'CCheckBoxColumn',
'selectableRows' => 2,
'checkBoxHtmlOptions' => array(
'name' => 'implementers[]',
),
'value'=>'$data->id',
'checked'=>function($data, $row) use ($current_implementers){
return in_array($data->id, $current_implementers);
}
),
array(
'name'=>'lead_implementer',
'type'=>'raw',
'value' => 'CHtml::radioButtonList("lead_implementer","'. $lead_implementer .'",array($data->id), array("template" => "{input}", "style" => "width:20px!important", "separator"=>" "))',
),
'username',
),
)); ?>
How can I do?
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'acc-recei-grid',
'dataProvider'=>$model->search_implementerlist(),
'filter'=>$model,
'columns'=>array(
array(
'class' => 'CCheckBoxColumn',
'selectableRows' => 2,
'checkBoxHtmlOptions' => array(
'name' => 'implementers[]',
),
'value'=>'$data->id',
'checked'=>function($data, $row) use ($current_implementers){
return in_array($data->id, $current_implementers);
}
),
array(
'name'=>'lead_implementer',
'type'=>'raw',
'value' => 'CHtml::radioButtonList("lead_implementer","'. $lead_implementer .'",array("$data->id"=>"$data->id"), array("template" => "{input}", "style" => "width:20px!important", "separator"=>" "))',
),
'username',
),
)); ?>

Displaying image in a CGridView column

Here is my code
$img= Yii::app()->params['questionImageUploadURL'].$model->q_type."/".$model->qImgRel->image_name;
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'id',
'q_nationality_id',
'q_type',
'q_name',
array(
'name' => 'q_image_id',
'value' => (is_object($model->qImgRel)?CHtml::image($img,""):""),
'visible'=>(is_object($model->qImgRel)?true:false),
),
'opt1',
'opt2',
'opt3',
'opt4',
'answer',
),
)); ?>
Its display me like this
I dnt get image in my view
plz help me
Thanks in advance :)
Try this :-
array(
'name' => 'q_image_id',
'type' => 'raw'
'value' => (is_object($model->qImgRel)?CHtml::image($img,""):""),
),
<? php
$w="50px";$h="50px";
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'redcliffe-cms-grid',
'dataProvider' => $model->search(),
'filter' => $model,
'columns' => array(
'title','date','description',
array(
'filter' => '',
'type' => 'raw',
'value' => 'CHtml::image(Yii::app()->baseUrl ."/upload/" .$data>image,"",array(\'width\'=>\'50\', \'height\'=>\'50\'))',
),
array(
'class' => 'CButtonColumn',
),
),
));
? >
http://www.yiiframework.com/doc/api/1.1/CDetailView#attributes-detail
A simple
array(
'name'=>'filename',
'value'=> CHtml::image(Yii::app()->request->baseUrl.'/path/'.$model->filename),
'type'=>'raw',
),
would do the trick (don't forget the type 'raw')