yii cgridview dropdownlist value - yii

I am unable to set the value of the column day in the cgrid view :
I am able to see the dropdownlist but all have the same day Monday set irrespective of the value of the day as represented by $data->day
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
array(
'type'=>'raw',
'name'=>'day',
'value'=> ' CHtml::dropDownList(\'someName\'.$row,\'$data->day\',array(
\'Mo\'=>\'Monday\',
\'Tu\'=>\'Tuesday\',
\'We\'=>\'Wednesday\',
\'Th\'=>\'Thursday\',
\'Fr\'=>\'Friday\',
\'Sa\'=>\'Saturday\',
\'Su\'=>\'Sunday\',))',
),
'ts_id'
)
));

If you can accept a minor break in MVC then things will get much easier to read if you put a little getter method into your model:
public function getDayDropDown()
{
$days = array('Mo'=>'Monday', ...);
return CHtml::dropDownList('someName', $this->day, $days);
}
Now in your gridview you can use it as a column like
array(
'name' => 'Day',
'type' => 'raw',
'value' => '$data->dayDropDown',
),

Just a minor issue resolved the whole episode.
I had put quotes around $data->day in the original post. which was not needed.
array( 'type'=>'raw',
'name'=>'day',
'value'=> ' CHtml::dropDownList(\'someName\'.$row,$data->day,
array(\'Mo\'=>\'Monday\',
\'Tu\'=>\'Tuesday\',
\'We\'=>\'Wednesday\',
\'Th\'=>\'Thursday\',
\'Fr\'=>\'Friday\',
\'Sa\'=>\'Saturday\',
\'Su\'=>\'Sunday\',)
)',
),

This is an example of dropdown value and update onchange:
$this->widget('bootstrap.widgets.TbGridView', array(
'id'=>'session-grid',
'type'=>'striped bordered condensed',
'dataProvider'=>$PSDataProvider,
'filter'=>$PSModel,
'emptyText'=>'No hay sesiones abiertas.',
'columns'=>array(
array('name'=>'username', 'header'=>'Nombre de Usuario', 'filter'=>CHtml::activeTextField($PSModel, 'username',
array('placeholder'=>'Buscar por usuario...'))),
array('name'=>'product', 'header'=>'Producto', 'filter'=>CHtml::activeTextField($PSModel, 'product',
array('placeholder'=>'Buscar por producto...'))),
array('name'=>'expire', 'value'=>'date("d-m-y H:i:s", $data->expire)','header'=>'Hora de Expiracion', 'filter'=>CHtml::activeTextField($PSModel, 'expire',
array('placeholder'=>'Buscar por expiracion...'))),
array(
'header'=>CHtml::dropDownList('pageSize',$pageSize,array(5=>5,10=>10,20=>20,50=>50),array(
'onchange'=>"$.fn.yiiGridView.update('session-grid',{ data:{pageSize: $(this).val() }})",
'class'=>'span1 custom-tb-dropdown-inline',
)),
'class'=>'bootstrap.widgets.TbButtonColumn',
'htmlOptions'=>array('style'=>'width: 50px'),
'template'=>'{delete}',
'buttons'=>array(
'delete' => array(
'label'=>'Terminar sesión',
),
),
'deleteConfirmation'=>'Está seguro que desea terminar la sesión seleccionada?',
'deleteButtonUrl'=>'$this->grid->owner->createUrl("productSession/delete", $data->primaryKey)'
),
),
));

Related

extendedSummary Yiiboster not show the sum total of gridview

I have gridview using TbExtendedGridView yii booster, in footer gridview i want show the sum of field using extendedSummary, i have follow the tutorial in yiibooster web but i can't show the extendedSummary to show the sum of column. Pls help me what's wrong in my code below ?. in the footer just show the box with blank text.
//this isi my gridview code
$no_loan= $_GET[no_loan];
$sql2="SELECT * from tbangsuran where nomor_pinjaman = '$no_loan' and status_bayar=1 order by no ASC";
$sqlProvider = new CSqlDataProvider($sql2);
$this->widget('bootstrap.widgets.TbExtendedGridView', array(
//'filter'=>$model,
'id'=>'tbangsuran-grid',
'type'=>'striped bordered',
'template' => "{items}\n{extendedSummary}",
'dataProvider' =>$sqlProvider,
'columns'=>array(
array(
'name'=>'Angsuran Ke',
'headerHtmlOptions'=>array('style'=>'text-align:center; width:90px;'),
'htmlOptions'=>array('style'=>'text-align:center'
),
'value'=> '$data[\'no\']',
),
array(
'name'=>'Tanggal Tagihan',
'headerHtmlOptions'=>array('style'=>'text-align:center;width:90px;'),
'htmlOptions'=>array('style'=>'text-align:center'),
'value'=> 'date("d-m-Y",strtotime($data[\'tanggal_bayar\']))',
),
//'nomor_pinjaman',
array(
'name'=>'Tunggakan Pokok',
'headerHtmlOptions'=>array('style'=>'text-align:center; width:120px;'),
'htmlOptions'=>array('style'=>'text-align:right'),
'value'=> 'number_format($data[\'pastdue_pokok\'],0,"",".")',
),
array(
'name'=>'Tunggakan Bunga',
'headerHtmlOptions'=>array('style'=>'text-align:center; width:120px;'),
'htmlOptions'=>array('style'=>'text-align:right'),
'value'=> 'number_format($data[\'pastdue_bunga\'],0,"",".")',
),
array(
'name'=>'Total Tunggakan',
'headerHtmlOptions'=>array('style'=>'text-align:center;width:120px;'),
'htmlOptions'=>array('style'=>'text-align:right'),
'value'=> 'number_format($data[\'pastdue_pokok\']+$data[\'pastdue_bunga\'],0,"",".")',
),
),
'extendedSummary' => array(
'title' => 'Total Tunggakan',
'columns' => array(
'pastdue_pokok' => array('label'=>'Total Tunggakan','class'=>'TbSumOperation')
)
),
'extendedSummaryOptions' => array(
'class' => 'well pull-right',
'style' => 'width:300px'
),
));
You must use the same column name in extendedSummary field.
In your case would be:
'extendedSummary' => array(
'title' => 'Total Tunggakan',
'columns' => array(
'Total Tunggakan' => array('label'=>'Total Tunggakan','class'=>'TbSumOperation')
)
),
I recommend you to use short column name to this tasks.
Hope this helps!

Customised query to display in CGridView in yii

Controller,
$model=Product::model()->display_products_statistics();
$this->render('admin',array(
'model'=>$model,
));
View,
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'product-grid',
'dataProvider' => $model->display_products_statistics(),
'filter'=> $model,
'columns'=> array(
'member_count',
'seller_count',
'visitor_count',
'lowest price',
'desc',
'price',
'createdate',
'updatedate',
'opid',
'pimg',
array(
'class'=>'CButtonColumn',
),
),
));
Model,
$sql="select member_count,seller_count,
visitor_count from fc_product fp
group by member_count,visitor_count,seller_count
order by member_count desc";
$connection=Yii::app()->db;
$command=$connection->createCommand($sql);
$products_statistics=$command->queryAll();
$dataprovider=new CArrayDataProvider($products_statistics,
array('pagination'=>false));
return $dataprovider->getData();
But then I am getting this error
Fatal error: Call to a member function getData() on a non-object in D:\wamp\www\yii\framework\zii\widgets\CBaseListView.php on line 111
I am confused and don't know what's going wrong.
Your problem is that you are not using CDataProvider in the correct way. CGridView needs an instance of CDataProvider to display, but you have used CDataProvider->getData() instead. I'd also recommend using CSqlDataProvider, which is purpose made for custom sql queries. Try this in your model;
$count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM fc_product')->queryScalar();
$sql="select member_count,seller_count,
visitor_count from fc_product fp
group by member_count,visitor_count,seller_count
order by member_count desc";
return new CSqlDataProvider($sql, array(
'totalItemCount' => $count,
'sort' => array(
'attributes' => array(
'member_count', 'visitor_count', 'seller_count',
),
),
'pagination' => false

BootGridView Filter not working in Yii Framework

I have tried to implement the sorting using BootGridView but it does not seem to work. Here is the line of code.
<?php $this->widget('bootstrap.widgets.BootGridView', array(
'id'=>'user-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'user_id',
array('name'=>'user_type',
'value'=>'User::getType($data->user_type)'),
'username',
array('header'=>'Name',
'type'=>'raw',
'value'=> 'CHtml::link($data->firstname." ".$data->lastname, array("view", "id"=>$data->id))'
),
array('name' => 'status',
'type' => 'raw',
'value' => '$data->status == 1 ? "Active" : CHtml::link("In Active", "javascript:void(0);", array("id" => "active_" . $data->id, "onClick"=>"js:activate($data->id)"))'
),
/*
'email',
'dob',
'profession',
'hobby',
'height',
'weight',
'weight_taken_on',
'login_attempt',
'registration_date',
*/
array(
'class'=>'bootstrap.widgets.BootButtonColumn',
),
),
)); ?>
The code does not seem to sort the table as expected. What could be the possible problem in this. ?
Sorting is configured in the data provider, not in the grid view. So you should look into the search() method of your model. You need something like this:
return new CActiveDataProvider('User',array(
// ...
'sort' => array(
'attributes' => array(
'name',
'email',
// ...
Have a look at CSort and especially the attributes property there to learn more about sort options you can use here.

Make pager appear at top of listing

In YII I have:
$dataProvider = new CArrayDataProvider ($auctions ,
array(
'pagination'=>array(
'pageSize'=> 12,
),
));
$this->widget('zii.widgets.CListView', array(
'dataProvider'=> $dataProvider,
'itemView' => '_frontpageAuction',
'summaryText' => '',
'emptyText' => '
No auctions available to display.
',
));
How do I change it so the pager doesn't appear at the bottom of the grid, but rather at the top?
Use the template property of CListView:
$this->widget('zii.widgets.CListView', array(
'dataProvider'=> $dataProvider,
'itemView' => '_frontpageAuction',
'summaryText' => '',
'emptyText' => '
No auctions available to display.
',
'template'=>'{pager}{items}'
));
Also:
These tokens are recognized: {summary}, {sorter}, {items} and {pager}. They will be replaced with the summary text, the sort links, the data item list, and the pager.
A similar property is available for CGridView also: template.

order data by desc order in default in YII

I am tyring to display somedata in desending order in YII view.HOw Do I order the data by studentID desc by default ?
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id' => 'student-grid',
'criteria'=>array(
'order'=>'StudentID DESC',
),
'dataProvider' => Agent::getStudents($model->agent_id),
'columns' => array(
'StudentID',
'first_name',
'last_name',
'dob',
'gender',
array(
'header' => 'Options',
'class' => 'CButtonColumn',
'template'=>'{View}',
'buttons'=>array(
'View' => array(
'url'=> 'Yii::app()->createUrl("/students/view/" . $data->StudentID)',
),
),
),
),
)); ?>
Thanks Ab
In your dataProvider (i assume that's what getStudents() function returns) add another array to your config array :) Like:
return new CActiveDataProvider(get_class($this), array(
'criteria'=>$some_criteria,
/* Your array */
'sort'=>array(
'defaultOrder'=>array(
'StudentID'=>true,
),
),
/***/
));
Value 'false' in 'defaultOrder' array refers to ascending order, 'true' refers to descending order.
I hope that's what you're looking for :).
Also check out this forum thread: http://www.yiiframework.com/forum/index.php/topic/8428-cgridview-default-sort/
and this doc: http://www.yiiframework.com/doc/api/1.1/CSort#defaultOrder-detail
Regards.