Jump to content
Sign in to follow this  
eugenex

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

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

 

 

Share this post


Link to post
Share on other sites

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

 

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

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

 

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

Share this post


Link to post
Share on other sites

код в CODE, полотна в SPOILER

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.