How to add radio into cgridview - yii

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',
),
)); ?>

Related

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.

Updating Cgridview with date selected from CJuiDatePicker

Im newbie to yii,I want to update the CGridview date column with the date selected from datepicker shown in image,
My View Coding:
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker',
array(
'name'=>'inline_datepicker',
'flat' => true, // tells the widget to show the calendar inline
)
); ?>
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'editsource-grid',
'dataProvider'=> Holidays::model()->search(),
'columns'=>array(
'seq',
array(
'name'=>'name',
'value'=>'Holiday',
'type'=>'raw',
'htmlOptions'=>array('width'=>5),
),
'date',
array(
'name'=>'is_active',
'value'=>'Y',
'type'=>'raw',
'htmlOptions'=>array('width'=>5),
),
),
)); ?>
Can anyone help me out?
I would just suggest making a column in the GridView which has a date picker as a filter. The following code only contains what is needed for it to work:
<?php $this->widget('zii.widgets.grid.CGridView', [
'afterAjaxUpdate' => 'js:function(){jQUery("#Model_date").datepicker()}',
'columns' => [
[
'name' => 'date',
'value' => '$data->date',
'filter' => $this->widget('zii.widgets.jui.CJuiDatePicker', [
'model' => $model,
'attribute' => 'date',
], true),
],
],
]);

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')

restrict selected columns in cakephp query

I want to reduce the number of fields returned by cakephp's find('all') but don't know if this is possible.
$this->Group->find('all', $params);
where $params
$params = array(
'conditions' => array(
'Group.featured' => 1,
),
'contain' => array(
'User',
'Class' => array(
'conditions' => array(
'Class.exp IS NOT NULL',
'Class.tb <20',
)
)
)
));
The problem is that my Class table has many columns that i don't need and that take a long time to load, so i would line to only select 5 fields.
Can this be done in Cakephp or am i better off writing a regular query?
something like
$params = array(
'conditions' => array(
'Group.featured' => 1,
),
'contain' => array(
'User',
'Class.a',
'Class.b',
'Class.exp',
'Class.tb',
'Class' => array(
'conditions' => array(
'Class.exp IS NOT NULL',
'Class.tb <20',
)
)
)
));
Thank you
That's what the fields parameter is for.
$params = array(
...
'contain' => array(
'Class' => array(
'conditions' => array(
'Class.exp IS NOT NULL',
'Class.tb <20',
),
'fields' => array('a', 'b')
)
)
);

CGridView filter dropdown from array

I have table of providers (id, title, onoff) where onoff column is a status: 1 = on, 0 = off
I dont have table in DB for these statuses, so I don't have model for statuses.
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'provider-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'id',
'htmlOptions'=>array('width'=>'40px'),
),
'title',
array(
'name'=>'onoff',
'filter'=>CHtml::dropDownList('Provider[onoff]', '',
array(
''=>'All',
'1'=>'On',
'0'=>'Off',
)
),
),
array(
'class'=>'CButtonColumn',
'template'=>'{update}{delete}'
),
),
It filters data, but after ajax forget the state of dropdown
What is the best way to build dropdown in this case?
And what is the best way to substitute 1 to On and 0 to Off in datagrid cells?
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'provider-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
array(
'name'=>'id',
'htmlOptions'=>array('width'=>'40px'),
),
'title',
array(
'name'=>'onoff',
'value'=>'Crud::getOnoff($data->onoff)',
'filter'=>CHtml::listData(Crud::getOnoffs(), 'id', 'title'),,
),
array(
'class'=>'CButtonColumn',
'template'=>'{update}{delete}'
),
),
In model
public function getOnoffs()
{
return array(
array('id'=>'1', 'title'=>'On'),
array('id'=>'0', 'title'=>'Off'),
);
}
public function getOnoff($onoff)
{
if($onoff == 1)
return 'On';
else
return 'Off';
}
array( 'name' => 'language',
'value' => '$data->language',
'filter' => CHtml::listData( Vediodesc::model()->findall(), 'language', 'language'),
),