Hi All,
I am trying to use CGridView and i have run into a problem and need all you guys n gals to help me out cause i am going crazy with this.
I have a page which loads a couple of dropdowns where the users select the filter on which the data will be provided to them.
When the form is submitted i am making an ajax request to create my query using the filters selected by users.
In the function i am creating an instance of dataprovider and sending it to a view where my Cgridview widget is present and i am partialy rendering that page.
The first time it loads as i want it.
But here is the problem when i use the paging to go to the next page(next set of records) it does not use the query i sent in the data provider but gets all the data from that model.
Also, the page nos do not come with the css
I know i maybe doing something stupid but please help me out to solve this…
code for the first view the div id "Tab" is where i am rendering the second view file.
<?php
Yii::import('application.modules.calendar.models.Days');
$criteria = new CDbCriteria();
$date = date('Y-m-d');
$criteria->select = "week_number";
$criteria->condition = "`date`='{$date}'";
$dateArr = Days::model()->find($criteria);
$this->Load_js_files = array('attMon');
$repTyp = array('1'=>'By Day','2'=>'Today','3'=>'This Week','4'=>'By Term','5'=>'Entire Year','6'=>'By Days Back');
$cat = Abs_categories::model()->findAll();
$this->pageTitle = 'Attendance Monitor'.Yii::app()->params['pageTitle'];
Yii::import('application.extensions.JScript');
JScript::showhide();
?>
<div id="pgSubHeader"><div class="pgTitle"><h2>Reports: Attendance Monitor</h2></div>
<br class="clearb"/></div><br /><br />
<?php
echo CHtml::beginForm();
echo CHtml::hiddenField('week_number', $dateArr->week_number);
?>
'
<fieldset class="form">
<legend>Filter <a href="javascript:;" id="shFilter" class="shlink sh-hide"> </a></legend>
<div id="Filter" align="center">
<span>
<span id="spn_mn"><?php echo CHtml::dropDownList('main', '',$repTyp,array('prompt'=>'--Report Type--')); echo CHtml::hiddenField('rptName');?></span>
<span id="spn_opts"></span>
<br class="clearb" /><br />
<div id="filOpts" style="display: none">
<span id="spn_cat"><?php echo CHtml::dropDownList('category', '',CHtml::listData($cat, 'id', 'category'),array('prompt'=>'--Category--')); echo CHtml::hiddenField('catName'); ?></span>
<span id="spn_type"><?php echo CHtml::dropDownList('type', '',array(),array('prompt'=>'--Type--')); echo CHtml::hiddenField('typName');?></span>
<span id="spn_excuse"><?php echo CHtml::dropDownList('excuse', '',array(),array('prompt'=>'--Excuse--')); echo CHtml::hiddenField('excName');?></span>
<span id="spn_valex"><?php echo CHtml::dropDownList('valid_excuse', '',array('0'=>'Invalid','1'=>'Valid'),array('prompt'=>'--Valid Excuse--'));echo CHtml::hiddenField('valName');?></span>
</div>
<br class="clearb" />
<div id="studFil" style="display: none">
<?php
$this->widget('application.widgets.ComFilter.ComFilter',array(
'controlOpts'=>'l|pg|s|t',
'tpl'=>'inline',
'studHtmlOpts' => array('prompt'=>'--Students--'),
));
?>
<br class="clearb" /><br />
<?php echo CHtml::button('Go',array('id'=>'go'));?>
</div>
</span>
</div>
</fieldset>
<fieldset id="filTab" class="form" style="display: none;">
<legend> <a href="javascript:;" id="shTab" class="shlink sh-hide"> </a></legend>
<div id="Tab">
</div>
</fieldset>
<?php echo CHtml::endForm();?>
Code for getting the data provider and rendering the second page. The below function is called through ajax
public function actionGetMonData(){
Yii::import('application.modules.calendar.models.Days');
$acadid =$_POST['acadid'];
$criteria = new CDbCriteria();
$criteria->select = 'user_code';
$criteria->condition = ComFunc::createCondition(array('level_code'=>$_POST['level'],'prog_group_code'=>$_POST['progGroup'],'sec_code'=>$_POST['section'],'valid'=>'1','acadid'=>$acadid));
$shMod = SchoolHistory::model()->findAll($criteria);
foreach($shMod as $n=>$mod){
$usrArr[] = $mod->user_code;
}
$usrArr = implode('\',\'',$usrArr);
$filter = "<div id=\"txtFilter\" style=\"align: center;text-align: center\"><h4>";
$filter .= "<span>{$_POST['rptName']}</span>";
if($_POST['main']=='1' || $_POST['main']=='2' || $_POST['main']=='3' || $_POST['main']=='6'){
if(!empty ($_POST['opts']) && $_POST['main']=='1'){
$filter .= "<span> - {$_POST['optName']}</span>";
$criteria->select = "code,DATE_FORMAT(date, '%a')As date";
$criteria->condition = "DATE_FORMAT(date, '%a')='{$_POST['opts']}' AND `acadid`='{$acadid}' ";
} else if(!empty ($_POST['opts']) && $_POST['main']=='6'){
$filter .= "<span> - {$_POST['optName']}</span>";
$date = date('Y-m-d');
$otherDate = date('Y-m-d',mktime(0, 0, 0, date("n"), date("j") - $_POST['opts'], date("Y")));
$criteria->select = "code";
$criteria->condition = "`acadid`='{$acadid}' AND `date` BETWEEN '{$otherDate}' AND '{$date}' ";
} else {
$date = date('Y-m-d');
$criteria->select = "code";
if($_POST['main']=='2'){
$criteria->condition = "`date`='{$date}' AND `acadid`='{$acadid}' ";
} else if($_POST['main']=='3') {
$criteria->condition = "`week_number`='{$_POST['week_number']}' AND `acadid`='{$acadid}' ";
}
}
$dateArr = Days::model()->findAll($criteria);
foreach($dateArr as $n=>$mod){
$dayArr[] = $mod->code;
}
$dayArr = implode('\',\'',$dayArr);
}
$filter .= "<span> - {$_POST['acadName']}</span>";
if(!empty($_POST['level'])){
$filter .= "<span> - {$_POST['levelName']}</span>";
$filter .= (!empty($_POST['progGroup'])) ? "<span> - {$_POST['progGroupName']}</span>": "<span> - All Program Groups</span>";
$filter .= (!empty($_POST['section'])) ? "<span> - {$_POST['sectionName']}</span>": "<span> - All Sections</span>";
$filter .= (!empty($_POST['term'])) ? "<span> - {$_POST['termName']}</span>": "<span> - All Terms</span>";
} else {
$filter .= '<span> - ALL Levels</span>';
}
if(empty($_POST['excuse']) && !empty($_POST['category'])){
$filter .= "<span> - {$_POST['catName']}</span>";
if(empty($_POST['type'])){
$filter .= "<span> - ALL Types</span>";
$criteria = new CDbCriteria();
$criteria->select = 'id';
$criteria->condition = "`categoryid`='{$_POST['category']}' AND `active`='1'";
$typeArr = Abs_types::model()->findAll($criteria);
foreach($typeArr as $n=>$model){
$typArr[] = $model->id;
}
$typArr = '\''.implode('\',\'',$typArr).'\'';
$criteria->select = 'id';
$criteria->condition = "`typeid` IN ({$typArr}) AND `active`='1'";
} else {
$filter .= "<span> - {$_POST['typName']}</span>";
$criteria->select = 'id';
$criteria->condition = "`typeid` = '{$_POST['type']}' AND `active`='1'";
}
$excuseArr = Abs_excuses::model()->findAll($criteria);
if(!empty($excuseArr)){
foreach($excuseArr as $n=>$model){
$excArr[] = $model->id;
}
$excArr = implode('\',\'',$excArr);
}
$filter .= "<span> - All Excuses</span>";
} else {
$filter .= (!empty($_POST['category'])) ? "<span> - {$_POST['catName']}</span>": "<span> - All Categories</span>" ;
$filter .= (!empty($_POST['type'])) ? "<span> - {$_POST['typName']}</span>": "<span> - All Types</span>" ;
$filter .= "<span> - {$_POST['excName']}</span>";
}
if(!empty($_POST['valid_excuse'])){
$filter .= "<span> - {$_POST['valName']}</span>";
}
$filter .="</h4></div>";
$excuse = (!empty($_POST['excuse'])) ? "'{$_POST['excuse']}'": $excArr ;
$criteria = new CDbCriteria();
$criteria->select = "stud_code,term_code,acadid, sum(valid_excuse) absValid, count(stud_code) absTotal, (count(stud_code) - sum(valid_excuse)) absInvalid";
$criteria->condition = ComFunc::createCondition(array('term_code'=>$_POST['term'],'acadid'=>$acadid,'excuseid'=>$excuse ,'valid_excuse'=>$_POST['valid_excuse'],'day_code'=>$dayArr,'stud_code'=>$usrArr),true);
$criteria->group = 'stud_code';
$criteria->order = 'absTotal desc';
$dataProvider=new CActiveDataProvider('Abs_absences', array(
'pagination'=>array(
'pageSize'=> '35',
),
'criteria'=>$criteria
));
$this->renderPartial('attMonGrid',array('dataProvider'=>$dataProvider,'filter'=>$filter));
}
the rendered page for cgridview
<?php
$this->Load_js_files = array('attMon');
echo $filter; ?>
<?php
echo CHtml::beginForm();
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'attendence-grid',
'dataProvider'=>$dataProvider,
'cssFile'=>false,
'itemsCssClass'=>'dataGrid',
'filterCssClass'=>'center',
'filterPosition'=>Yii::app()->params['gridFilterPosition'],
'columns'=>array(
array('header'=>'','name'=>'code', 'type'=>'raw', 'value'=>'CHtml::tag(\'div\',array(\'class\'=>\'open-details\',\'id\'=>\'shDe_\'.$data->stud_code),\' \',true)', 'filter'=>false),
array('header'=>'Student', 'name'=>'stud_code', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), Users::formatFullName($data->student),true)'),
array('header'=>'Level', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->term->level->level,true)'),
array('header'=>'Program Group', 'type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->term->prog_group->program_group,true)'),
array('header'=>'Invalid','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absInvalid,true)'),
array('header'=>'Valid','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absValid,true)'),
array('header'=>'Total','type'=>'raw', 'value'=>'CHtml::tag(\'span\', array(), $data->absTotal,true)'),
)
));
echo CHtml::endForm();
?>
Thank you guys and gals in advance,
Regards,
Wenceslaus D’silva