经过一番辛劳:
你必须做两件事。首先,我们需要来自服务器的修改数据,因为您可以修改模型的搜索功能,因为它是为 CListView 提供数据提供者的功能。
因此,在search()
您的模型的功能中,您可以添加一个if
条件来修改$criteria
数据提供者的,例如:
public function search() {
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
// added the following if condition to modify the criteria to include only videos of a certain category
if (isset($_GET['category']))
$criteria->compare('category',$_GET['category'],true);// my category is string, hence the third attribute
else
$criteria->compare('category',$this->category,true);// we need the else part, coz the search function is used for actual searching also, for instance in gridview filters/search
$criteria->compare('id',$this->id);
// your other attributes follow
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
注意:我不确定在比较之前是否绝对有必要对 $_GET['category'] 进行清理。
其次,我们需要更新可以使用其功能的 CListView $.fn.yiiListView.update
。例如:
<div id="categoryupdating">
<?php
echo CHtml::dropDownList('dropit', '',
array('1'=>'Cateogry1','2'=>'Category2','3'=>'Category3','4'=>'Category4'),
array('onchange'=>"$.fn.yiiListView.update('videos', {url: '".Yii::app()->createUrl('controller/action')."?category='+$('#dropit option:selected').val()})"));
?>
</div>
在这里,您当然应该使用可能的函数动态填充下拉列表的数据CHtml::listData
,并且控制器/动作应该是 CListView 的控制器/动作。
查看jquery.yiilistview.js文件以了解更多关于 yii 的 listview 小部件的 javascript 函数的信息。
注意:$.fn.yiiListView.update 将id
列表视图的 和url
调用更新的 ,作为参数。
编辑:还添加了else
条件,因为搜索功能用于在 gridview 和其他地方进行实际搜索。