找到解决方案检查此文结束
我已经做了4个星期了,还没有任何进展。我在网上找到了很多类似的例子,但我试过的所有方法都无法奏效。所以我不得不用我的另一个问题给社区带来负担。
我有一个名为tbl_symptoms/Symptoms的模型/表,它有7列/属性:id,症候代码,标题,短标题,包含,排除,症候类别。
我使用下拉选择(从服务器上的一个表中填充,该表在一列中只包含症状类别)。
虽然我可以让gridview填充所有症状,但我无法让它只填充与下拉列表相同的类别症状。
这是我尝试过的最后一个解决方案(现在它甚至没有渲染gridview,但即使我有其他问题,所以我只是发布代码,所以你们有一个参考点关于潜在的解决方案):
症候。php搜索功能:
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('symptomCategory',$this->symptomCategory,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
SiteController.php函数我正在使用:
//returns symptom categories that the user can choose to pick a symptom
public static function getSymptomCategories()
{
return CHtml::listData(Yii::app()->db->createCommand()->select('category')->from('tbl_symptomcategory')->queryAll(), 'category', 'category');
}
public function actionLoadSymptoms()
{
$symptomsModel = new Symptoms;
if (isset($_POST)){
$symptomsModel->attributes = $_POST;
$dataProvider = $symptomsModel->search();
$this->renderPartial('_searchSymptomsView', array('dataProvider' => $dataProvider));
}
}
查看文件_seachSymptomsView:
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'searchSymptomsGrid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'symptomCode',
'title',
'inclusions',
'exclusions',
'symptomCategory',
)
));
?>
search.php功能:
<!-- Select symptom category dropdown menu -->
<div class="search-form">
<?php
echo $form->labelEx($model, 'symptomCategory');
echo $form->dropDownList($model, 'symptomCategory',
$this->getSymptomCategories(),
array( 'id'=>'symptomSelectDropdown',
'ajax'=>array('type'=>'POST',
'url'=>CController::createUrl('SiteController/loadSymptoms'),
'replace'=>'#symptomSelectDiv'
)));
?>
<!-- select symptom -->
<div class="row" id="symptomSelectDiv">
</div>
这段代码是基于这里问的一个类似的问题,但我不能让它像我尝试过的其他一切一样工作。如有任何帮助,不胜感激,谢谢。
SOLUTION I CAME UP WITH(供将来参考)
症状模型搜索函数:几乎是默认的构造函数,但是我注释掉了所有的东西,除了我想要搜索的症状类别。
搜索视图文件:(相关内容)
Yii::app()->clientScript->registerScript('search', "
$('#symptomSelectDiv').hide();
$('#categorySelectDropDown').change(function(){
$('#symptomSelectDiv').show();
$('#symptoms-grid').yiiGridView('update', {
data: $(this).serialize()
});
return false;
});
");
?>
<h1>Welcome to the search for symptoms page </h1>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'search-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<!-- Select symptom category dropdown menu -->
<div class="search-form">
<?php $this->renderPartial('_searchCategory',array('model'=>$model)); ?>
</div>
<!-- select symptom -->
<div class="row" id="symptomSelectDiv" >
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'symptoms-grid',
'dataProvider'=>$model->search(),
'columns'=>array(
'symptomCode',
'title',
'inclusions',
'exclusions',
'symptomCategory',
),
)); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton('Search'); ?>
</div>
<?php $this->endWidget(); ?>
_searchCategory.php视图:
<php $form=$this->beginWidget('CActiveForm', array(
'action'=>Yii::app()->createUrl($this->route),
'method'=>'get',
)); ?>
<!-- form is automatically submitted when dropdown selection changes -->
<div class="row">
<?php echo $form->label($model,'symptomCategory'); ?>
<?php echo $form->dropDownList($model, 'symptomCategory',
$this->getSymptomCategories(),
array('submit'=>'',
'id'=>'categorySelectDropDown',
'prompt'=>"Select Symptom Category")); ?>
</div>
<?php $this->endWidget(); ?>
你找到的解决方案,打破MVC结构。顺便说一下(跳过那个解决方案),您没有在gridView
中使用filter
。
默认CGridView
使用报头处的文本输入来执行过滤。如果您想使用dropDown
,您必须更改列的过滤器,如下所示:
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'searchSymptomsGrid',
'dataProvider'=>$dataProvider,
'columns'=>array(
'symptomCode',
'title',
'inclusions',
'exclusions',
array(
'name'=>'symptomCategory',
'type' => 'raw',
'filter' => array('KEY'=>'VALUE','KEY1'=>'VALUE1'), //Note 1
'value'=>'$data->symptomCategory' //Note 2
)
)
));
注释1
该数组将在symptomCategory
列标题中以dropdown
格式显示。你可以用你自己的数组替换它(带有特定的键和值)
注释2
显示symptomCategory
列的值。你可以用你自己的方式来改变它(例如格式化它或其他东西)
Yii有一个强大而全面的文档。建议大家看看CGridView来了解更多关于它的信息。如果你看一看,你一定能够执行更多的定制。
CGridView文件