如何在 Yii 中将搜索结果过滤为复选框和下拉列表的组合?我有一些类别作为复选框和预算作为从数据库中列出的下拉列表。选中多个复选框并从下拉列表中选择一个值,我如何过滤掉搜索结果..有没有更好的方法?(我的要求就像这个链接一样。http://www.ebay.in/sch/i.html ?_from=R40&_sacat=0&_nkw=pendrives&rt=nc&LH_FS=1 )
问问题
5269 次
2 回答
1
我建议使用搜索模型。这可能看起来像这样:
class SearchProducts extends CFormModel
{
public $minPrice;
public $maxPrice;
public $categories;
// Add a public property for each search form element here
public function rules()
{
return array(
// You should validate your search parameters here
array('minPrice,maxPrice,categories', 'safe'),
);
}
public function search()
{
$criteria = new CDbCriteria;
if(!empty($this->minPrice))
$criteria->addCondition('price > '.(int)$this->minPrice);
if(!empty($this->maxPrice))
$criteria->addCondition('price < '.(int)$this->maxPrice);
if(!empty($this->categories))
$criteria->addInCondition('category_id', $this->categories);
// Add more conditions for each property here
return new CActiveDataProvider('Product', array(
'criteria' => $criteria,
// more options here, e.g. sorting, pagination, ...
));
}
}
在您的控制器中,您创建一个新的搜索表单实例并像往常一样分配搜索变量:
public function actionProducts()
{
$searchModel = new ProductSearch();
if(isset($_POST['ProductSearch']))
$searchModel->attributes = $_POST['ProductSearch'];
$this->render('products', array(
'searchModel' => $searchModel,
));
}
最后在您的视图中,您现在可以渲染
- 用于
$searchModel
属性的常规 Yii 表单,它将成为您的搜索过滤器表单 - 您设置的A
CListView
或 a将成为您的搜索结果。CGridView
provider
$searchModel->search()
对于您将使用 checkBoxList 的复选框:
<?php $this->formCheckBoxList($model, 'categories[]', Category::opts()) ?>
注意[]
这表明这应该作为数组发布。为方便起见,我通常还在opts()
某些模型中实现静态方法,该方法返回id=>name
可用于 dropDownList 或 checkBoxList 选项的列表。
这只是基本模式。您可以轻松扩展它以创建真正强大的搜索表单和结果列表。请始终牢记,您应该将所有与搜索相关的数据保存在另一个模型中。
于 2013-04-02T09:06:32.277 回答
0
试试这个扩展:ddautofilter https://bitbucket.org/jwerner/yii-ddautofilter/overview
于 2013-11-02T13:26:44.680 回答