Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

[Решено] Фильтр по опциям: проблема с отображением


Recommended Posts

Пишу дополнение - фильтр по опциям. Опции и их значения выводятся списком друг под другом.

Нужно чтобы при выборе значения опции доступные значения нижележащих опций обновлялись.

 

На данный момент получается следующее: при выборе верхней опции значения двух нижележащих обновляются причем доступные значения правильные. Но под каждой опцией выводится список доступных значений обоих опций, а не только этой конкретной опции.

Выглядит это так:

post-694415-0-22617300-1427839959_thumb.png

 

Код шаблона:

<?php foreach ($options_list as $option) { ?>
    <li class="zfilter_category">
    <?php foreach ($option["option_value"] as $value) {
            if ($option["sort_order"] == $value["sort_order"]) {
    ?>
        <ul>
                <li class="zfilter_option" option_name="<?php echo $value["name"]; ?>" sort_order="<?php echo $value["sort_order"]; ?>">
                    - <?php echo $value['name']; ?>
                </li>
        </ul>    
    <?php     }
        }
    ?>
    </li>
<?php } ?>

 

JS обрабатывающий выбор значения опции

        $(".zfilter_option").each(function(index, el) {
            var sort_order = $(el).attr('sort_order');
            if (sort_order > option.order) {
                $.ajax({
                    type: 'post',
                    data: {
                        update_option: option.name,
                        sort_order: option.order
                    },
                    success: function(content) {
                        $(el).parent().html();
                        $(el).parent().html(content);
                    },
                    error: function() {
                        scope.hideMask();
                    }
                });
            }
        });

 

В параметре content передается заполненный вышеприведенный шаблон.

 

Код контроллера, обрабатывающий выбор опции

        if (isset($this->request->post["update_option"])) {
            $option_value = $this->request->post["update_option"];
            $sort_order = $this->request->post["sort_order"];
            $products = $this->model_module_zfilter->getProductsByOptionValue($option_value, $language_id);
            $products_id = array();
            foreach ($products as $product) {
                $products_id[] = $product['product_id'];
            }
            $options = $this->model_module_zfilter->getProductsOptions($products_id, $sort_order);//array();
            ?>
            <?php
            $this->template = 'default/template/module/zfilter_option_item.tpl';
            
            $this->data['options_list'] = $options;
            
            // Отрисовка
            echo $this->render();
            die;
        }

 

В $this->data['options_list'] находится данные со структурой, которая заполняется так

foreach ($product_option_query->rows as $product_option) {
    foreach ($product_option_value_query->rows as $product_option_value) {
        $product_option_value_data[] = array(
            'name'           => $product_option_value['name'],
            'sort_order'    => $product_option_value['sort_order']
        );
    }
    $product_option_data[] = array(
        'option_value' => $product_option_value_data,
        'sort_order' => $product_option['sort_order']    
    );    
}

 

Данные выбираются правильно.  Проблема, видимо, в шаблоне.

 

 

Исходный вид фильтра, до того, как выбрана опция:

post-694415-0-21250600-1427841314_thumb.png

 

 

Надіслати
Поділитися на інших сайтах


Да, так конечно не получилось бы.

 

Упростил шаблон до

<?php foreach ($options_list as $option) { ?>
    <?php foreach ($option["option_value"] as $value) { ?>
                <li class="zfilter_option" option_name="<?php echo $value["name"]; ?>" sort_order="<?php echo $value["sort_order"]; ?>">
                    - <?php echo $value['name']; ?>
                </li>
    <?php     }
 } ?>

 

То есть просто вывод списка полученных <li>.

Потом в javascript перебираю их, сравниваю атрибут sort_order у Ul и у LI, и если они равны, добавляю LI в UL.

 

Теперь отображается верно.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.