Пишу дополнение - фильтр по опциям. Опции и их значения выводятся списком друг под другом.
Нужно чтобы при выборе значения опции доступные значения нижележащих опций обновлялись.
На данный момент получается следующее: при выборе верхней опции значения двух нижележащих обновляются причем доступные значения правильные. Но под каждой опцией выводится список доступных значений обоих опций, а не только этой конкретной опции.
Выглядит это так:
Код шаблона:
<?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'] ); }
Данные выбираются правильно. Проблема, видимо, в шаблоне.
Исходный вид фильтра, до того, как выбрана опция: