我想自定义我的模型的yii gridview搜索,其中gridview上方的一些复选框不属于模型,但会影响搜索结果。这是关于应该由用户可以选择的标志修改的联系人搜索。我不知道如何执行ajax请求,以便在模型search()函数中可以使用复选框的值。
<?php
// print all flags
echo '<table class="flag_table"><tr>';
echo '<tr><th>Flags:</th></tr>';
foreach($flagRows as $key=>$value)
{
echo '<td>';
echo CHtml::tag('span', array(), "$value->flag: ");
echo CHtml::checkBox('flagId__'.$value->id, false, array('value'=>"$value->id"));
echo '</td>';
}
echo '</tr></table>';
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'contact-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
//'cssFile'=>Yii::app()->request->baseUrl.'/css/grid_view.css',
'columns'=>array(
'firm',
'last_name',
'forename',
'street',
'city',
'mobile_number',
'email',
'search_word',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
有什么想法吗?
答案 0 :(得分:1)
我仍然没有完全了解旗帜,但我想我有足够的信息给你一个例子。在这里:
在您的视图中,在复选框周围添加一个表单:
echo CHtml::form('','post', array('id' => 'checkbox-form'));
echo '<table class="flag_table"><tr>';
echo '<tr><th>Flags:</th></tr>';
foreach($flagRows as $key=>$value)
{
echo '<td>';
echo CHtml::tag('span', array(), "$value->flag: ");
echo CHtml::checkBox('flagId__'.$value->id, false, array('value'=>"$value->id"));
echo '</td>';
}
echo '</tr></table>';
echo CHtml::endForm();
在您的视图中,将其添加到您的cgridview:
'beforeAjaxUpdate' => "function(id, options){
options['data'] = getContactGridData(id);
}",
在您看来,请在下方添加以下内容:
Yii::app()->clientScript->registerScript('updateGrid', "
function getContactGridData(id)
{
var inputSelector = '#'+id+' .filters input, '+'#'+id+' .filters select';
var origData = $.param($(inputSelector));
return $('#checkbox-form').serialize() + '&' + origData;
}
$(function(){
$('#checkbox-form').change(function() {
$.ajax({
url: $(this).attr('action'),
data: $(this).serialize(),
type: 'get',
success: function(data) {
var id = 'emoticon-grid';
$.fn.yiiGridView.update(id, {data: getContactGridData(id)});
}
});
return false;
});
});
", CClientScript::POS_END);
*感谢this thread帮助我解决上述问题。
然后在您现有的控制器方法(用于填充网格视图的方法)中,您需要检查是否已设置任何标记值,并相应地调整$ model-&gt;搜索条件。
我没有足够的信息来确切知道需要如何调整$ model-&gt;搜索条件,但您需要使用以下格式。以下格式只是一个随机示例,与您的代码没有直接关系。
$model = new ModelName('search');
$model->unsetAttributes(); // clear any default values
if(isset($_GET['cat_id'])){
$model->getDbCriteria()->mergeWith(array(
'condition' => 'cat_id = :cat_id',
'params' => array(':cat_id' => 1),
));
}
$this->render('index',array(
'model'=>$model,
));
您应该查看CDbCriteria page,因为它解释了mergeWith,还有其他方法,如addInCondition()和addCondition(),您可以使用它们来修改搜索条件。
让我知道它是怎么回事。