#php #codeigniter #search
#php #codeigniter #Поиск
Вопрос:
Я ищу хороший способ выполнить поиск с использованием CodeIgniter и нескольких параметров фильтра с флажками. Чтобы упростить, представьте себе следующее:
[X] T-shirts
[ ] M
[ ] L
[X] XL
[ ] Pants
[ ] M
[ ] L
[ ] XL
На странице отображается вся доступная одежда в магазине (get_all).
Вы можете использовать флажок для отображения только t-shitr.
Я зашел так далеко с чем-то вроде этого / одежда / тип / футболка
, но теперь внутри футболок я хочу отобразить размеры L и XL (два установленных флажка).
Я не хочу использовать выпадающие меню, потому что я хочу иметь возможность отображать всевозможные комбинации, например, футболки размера L и брюки размера XL одновременно.
В конце концов, я бы хотел, чтобы это был поиск на основе AJAX, поэтому POST был бы лучше, чем поиск на основе URI.
Каков наилучший способ реализовать что-то подобное?
Ответ №1:
Создайте эту форму. Повторите набор полей для каждого типа продукта (в этом примере показана футболка):
<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>
Ключ ‘active’ не используется, но он гарантирует, что ключ 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.
}
Пожалуйста, обратите внимание: это довольно небезопасно. Убедитесь, что вводимые пользователем данные действительны.
Комментарии:
1. Большое спасибо! В конце концов мне нужно было что-то еще, кроме примера, который я опубликовал, но это заставило меня начать!