我正在寻找一种使用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的搜索更好。
实现这样的事情的最佳方式是什么?
答案 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.
}
请注意:这是非常不安全的。确保用户的输入有效。