在yii中搜索和过滤

时间:2013-04-02 07:49:03

标签: yii yii-components yii-events

如何将搜索结果过滤为Yii中的复选框和下拉列表的组合?我有一些类别作为复选框和预算作为从数据库列出的下拉列表。选中多个复选框并从下拉列表中选择一个值,如何过滤掉搜索结果..有没有更好的方法? (我的要求就像在这个链接中。http://www.ebay.in/sch/i.html?_from=R40&_sacat=0&_nkw=pendrives&rt=nc&LH_FS=1

2 个答案:

答案 0 :(得分: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,
    ));
}

最后在您的视图中,您现在可以呈现

  1. $searchModel属性的常规Yii表单,将成为您的搜索过滤器表单
  2. CListViewCGridView,您将provider设置为$searchModel->search(),这将是您的搜索结果。
  3. 对于复选框,您将使用checkBoxList:

    <?php $this->formCheckBoxList($model, 'categories[]', Category::opts()) ?>
    

    请注意[],表示应将其作为数组发布。为方便起见,我通常还在某些模型中实现静态opts()方法,该方法返回可用于dropDownList或checkBoxList选项的id=>name列表。

    这只是基本模式。您可以轻松扩展它以创建非常强大的搜索表单和结果列表。请务必记住,您应该将所有与搜索相关的数据保存在其他模型中。

答案 1 :(得分:0)

尝试此扩展程序:ddautofilter https://bitbucket.org/jwerner/yii-ddautofilter/overview