Параметры фильтра поискового запроса CodeIgniter - PullRequest
2 голосов
/ 31 октября 2011

Я ищу хороший способ сделать поиск, используя CodeIgniter и несколько параметров фильтра с флажками. Для простоты представьте следующее:

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

На странице отображается вся доступная одежда в магазине (get_all). Вы можете использовать флажок для отображения только футболки. Я получил это далеко с чем-то вроде этого / одежда / тип / футболка но теперь в футболках я хочу отобразить размеры L и XL (два отмеченных флажка).

Я не использую выпадающие меню, потому что хочу, чтобы я мог отображать все виды комбинаций, например, футболки размера L и брюки XL одновременно.

В конце концов я бы хотел, чтобы это был поиск на основе AJAX, поэтому POST будет лучше, чем поиск на основе URI.

Какой лучший способ реализовать что-то подобное?

1 Ответ

0 голосов
/ 31 октября 2011

Создать эту форму. Повторите набор полей для каждого типа продукта (в этом примере показана футболка):

<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' не используется, но он гарантирует, что ключ типа продукта существует, когда не выбраны параметры.

Метод контроллера будет отличаться, используете ли вы отдельные таблицы для каждого типа продукта или просто поместите их все в одну таблицу. Так как первое сложнее, здесь идет:

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.
}

Обратите внимание: это довольно небезопасно. Убедитесь, что введенные пользователем данные верны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...