CodeIgniter搜索查询过滤器参数

时间:2011-10-30 22:29:52

标签: php codeigniter search

我正在寻找一种使用CodeIgniter进行搜索的好方法以及带有复选框的多个过滤器参数。为了简单起见,想象一下:

[X] T-shirts
    [ ] M
    [ ] L
    [X] XL
[ ] Pants
    [ ] M
    [ ] L
    [ ] XL

页面显示商店中所有可用的衣服(get_all)。 您可以使用复选框仅显示t-shitrs。 我已经用这样的东西/衣服/类型/ T恤得到了这么远 但现在在T恤内我想要显示L和XL尺寸(两个选中的复选框)。

我不使用下拉菜单,因为我希望能够同时显示各种组合,例如L型T恤和XL裤子。

最终我希望这是一个基于AJAX的搜索,因此POST会比基于URI的搜索更好。

实现这样的事情的最佳方式是什么?

1 个答案:

答案 0 :(得分:0)

创建此表单。为每种产品类型重复字段集(此示例显示tshirt):

<form method="post" action="url/to/find_products">

    <!-- repeat for all product types -->
    <fieldset>
        <input type="checkbox" name="products[tshirt][active]" value="1" /> Tshirt

        <fieldset>
            <input type="checkbox" name="products[tshirt][size]" value="s" /> S
            <input type="checkbox" name="products[tshirt][size]" value="m" /> M
            <input type="checkbox" name="products[tshirt][size]" value="l" /> L
        </fieldset>
    </fielset>
    <!-- end repeat -->

</form>

未使用“有效”键,但确保在未选择任何选项时存在producttype键。

无论您是为每种产品类型使用单独的表,还是将它们全部放在一个表中,控制器方法都会有所不同。由于第一个更难,所以这里:

function find_products() {
    $products = $this->input->post('products');
    $results = array();

    foreach ($products as $product => $options) {
        $table_name = $product."s";
        $query = $this->db->from($table_name);

        if (count($options['size']) > 0) {
            $query->where_in('size', $options['size']);
        }

        $results = array_merge($results, $query->get());
    }

    return $results; # Or display view, or whatever.
}

请注意:这是非常不安全的。确保用户的输入有效。