Kredov long

[Скрипт] Отбор по параметрам

Тема в разделе "Интернет-магазины", создана пользователем Kidwell, 26 апр 2016.

  1. Kidwell

    Kidwell

    Регистрация:
    26 апр 2016
    Сообщения:
    1
    Симпатии:
    0
    Камрады! помогите с проблемой, пожалуйста!
    Криво работает отбор - отбирает по любому из параметров, без группировок http://energoplus.com.ua/ т.е., если авт. выключатель 1Р и хар-ка С, то при выборе 2-х параметров выпадают все с хар-кой С и все 1Р

    фильтрация в левом блоке
    Код:
    <? if (isset($_URL[1]) && $_URL[1] == 'cat') { ?>
        <div class="filter">
    
    
            <div class="p5">
                <!--            <h3>Цена</h3>
                            <input class="w228" type="range" min="0" max="100" step="1" value="50">
                            <div class="f12 tac">от <b>0</b> до <b>12230</b> грн.</div>-->
                <?
                $getSubStatus = $_MOD['market']->getAllCategoryHierarchy($_URL[2]);
                if ($getSubStatus) {
                    if (isset($_GET['filter'])) {?>
                        <h1>Фильтрация товара</h1>
                        <? $filter_1 = explode(";", $_GET['filter']);
                        $filter_3 = "";
                        foreach ($filter_1 as $filter_1_key => $filter_1_val) {
                            $filter_2 = explode(":", $filter_1_val);
                            if (isset($filter_2[1])) {
                                $filter_3 .= $filter_2[1] . ",";
                            }
                        }
                        $filter_3 = array_filter(
                            explode(",", $filter_3), function($el) {
                            return !empty($el);
                        });
                    }
                    foreach ($getSubStatus as $getSubStatus_key => $getSubStatus_val) {
                        $res = "";
                        $res = $_MOD['market']->getAllFiltersCategory($getSubStatus_val);
                        if ($res) {
                            foreach ($res as $res_key) {
                                ?>
                                <div data-id="<?= $res_key['id'] ?>" class="block_filter">
                                    <h3><?= $res_key['name'] ?></h3>
                                    <?
                                    if ($res_key['value'] && count($res_key['value']) != 0) {
                                        foreach ($res_key['value'] as $value_val) {
                                            ?>
                                            <input name="<?= $res_key['id'] ?>" type="checkbox" id="<?= $value_val['id'] ?>" value="<?= $value_val['id'] ?>" <?= (isset($filter_3) && in_array($value_val['id'], $filter_3)) ? 'checked' : '' ?> /> <label for="<?= $value_val['id'] ?>"><?= $value_val['variant'] ?></label><br>
                                        <? } ?>
                                    <? } ?>
                                </div>
                            <? } ?>
    
    
                            <?
                        }
                    }
                }
                ?>
                <? if (isset($_GET['filter'])) { ?>
                    <div class="tac pt20"><button class="clear_filter">Сбросить</button></div>
                <? } ?>
            </div>
        </div>
        <script>
    
            function filter() {
                var selector = ".filter";
                var str = "";
    
                $(selector + " .block_filter").each(function() {
    
                    var id_filter = $(this).attr('data-id');
                    var strId = "";
                    var count_checked = $(selector + " [name=" + id_filter + "]:checked").size() - 1;
                    $(selector + " [name=" + id_filter + "]:checked").each(function(i) {
                        var value = $(this).val();
                        if (value !== "") {
                            strId += value;
                        }
                        if (i !== count_checked) {
                            strId += ",";
                        }
                    });
                    if (strId !== "") {
                        str += id_filter + ":";
                        str += strId;
                        str += ";";
                    }
                });
               
                $.post('', {type: 'filter', id: str, url: location.href}, function(url) {
                    location.href = url;
                });
            }
    
            $(function() {
                $('.filter input').change(function() {
                    filter();
                });
    
                $('.clear_filter').click(function() {
                    $.post('', {type: 'filter', id: "", url: location.href}, function(url) {
                        location.href = url;
                    });
                });
    
            });
        </script>
    <? } ?>