Перейти к содержанию
s27

[Решено] Стандартный фильтр тип Checkbox на Select

Рекомендуемые сообщения

Доброго времени суток всем!

Решил переделать стандартную форму фильтра OsStore 1.5... Хочется видеть выпадающий список (экономия места) вместо длинного check... сделал форму, сменил значение.. теперь список ЕСТЬ, но не работает кнопка ФИЛЬТР.. товар перестал отфильтровываться... Может кто встречался с подобным? Что не так?

 

Переделывался файл catalog\view\theme\default\template\module\filter.tpl

 

Ссылка где можно его увидеть  http://auto575.ru/

 

      <?php foreach ($filter_groups as $filter_group) { ?>
      <span id="filter-group<?php echo $filter_group['filter_group_id']; ?>"><?php echo $filter_group['name']; ?></span>
        <div><select name="$filter[<?php echo $filter_id; ?>]">
          <?php foreach ($filter_group['filter'] as $filter) { ?>
          <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
          
            <option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>" selected="selected" />
            <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
          
          <?php } else { ?>
          
            <option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>" />
            <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
          
          <?php } ?>
          <?php } ?>
              
      <?php } ?>
    </select></div></form>
    <a id="button-filter" class="button"><?php echo $button_filter; ?></a>
  </div>
</div>
<script type="text/javascript"><!--
$('#button-filter').bind('click', function() {
    filter = [];
    
    $('.box-filter input[type=\'option\']:selected').each(function(element) {
        filter.push(this.value);
    });
    
    location = '<?php echo $action; ?>&filter=' + filter.join(',');
});
//--></script>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@s27 , так понимаю, вам просто совет нужен? Есть раздел Помощь программистам и разработчикам, там надо было тему создавать.
 

input[type=\'option\']:selected

input type="option" - нет таких элементов, есть Input type='select'.
Вместо

 $('.box-filter input[type=\'option\']:selected').each(function(element) {
        filter.push(this.value);
    });

Напишите

 $('.box-filter input[type=\'select\']).each(function(element) {
        filter.push(this.value);
    });

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@s27 , так понимаю, вам просто совет нужен? Есть раздел Помощь программистам и разработчикам, там надо было тему создавать.

 

input type="option" - нет таких элементов, есть Input type='select'.

Вместо

Напишите

Спасибо за подсказку, буду знать где публиковать такие темы. Поправил, но фильтр так же не срабатывает, не отфильтровывает по результату.. Что может быть еще не так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что-то я заработался, какой нафиг input type=select))) Такого тоже нет) Вот так правильно:

$('.box-filter select option:selected').each(function(element) {

filter.push(this.value);

});

И вот это

<select name="$filter[<?php echo $filter_id; ?>]">

заменить на

<select name="filter[<?php echo $filter['filter_id']; ?>]">

Хотя там по идее name и не нужен, можно просто <select> оставить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

$('.box-filter select option:selected').each(function(element) {

filter.push(this.value);

});

 

<select name="filter[<?php echo $filter['filter_id']; ?>]">

Спасибо большое!!! Все работает!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно проще

location = '<?php echo $action; ?>&' + $('.box-filter :input').serialize();

только name value задать нормальные. и без ошибок

"$filter[<b>Notice</b>: Undefined variable: filter in <b>/var/www/vhosts/auto575.ru/httpdocs/catalog/view/theme/default/template/module/filter.tpl</b> on line <b>9</b>]"

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо freelancer and efremovav

можно проще

location = '<?php echo $action; ?>&' + $('.box-filter :input').serialize();

только name value задать нормальные. и без ошибок

 

Значения заданы вроде правильно, ошибку эту видел, не могу понять в чем дело...

И теперь при добавлени новой группы фильтра приклеивается следующая строка http://auto575.ru/index.php?route=product/category&path=82

Исходник полностью выглядит сейчас так:

<div class="box">
  <div class="box-heading"><?php echo $heading_title; ?></div>
  <div class="box-content">
    <div class="box-filter">
      
        
      <?php foreach ($filter_groups as $filter_group) { ?>
      <span id="filter-group<?php echo $filter_group['filter_group_id']; ?>"><?php echo $filter_group['name']; ?></span>
        <div><select name="$filter[<?php echo $filter['filter_id']; ?>]">
          <?php foreach ($filter_group['filter'] as $filter) { ?>
          <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
          
            <option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>" selected="selected" />
            <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
          
          <?php } else { ?>
          
            <option value="<?php echo $filter['filter_id']; ?>" id="filter<?php echo $filter['filter_id']; ?>" />
            <label for="filter<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></label>
          
          <?php } ?>
          <?php } ?>
              
      <?php } ?>
    </select></div></form>
    <div style="padding: 6px; text-align: right;"><a id="button-filter" class="button"><?php echo $button_filter; ?></a></div>
  </div>
</div>
<script type="text/javascript"><!--
$('#button-filter').bind('click', function() {
    filter = [];
    
    $('.box-filter select option:selected').each(function(element) {
        filter.push(this.value);
    });
    
    location = '<?php echo $action; ?>&filter=' + filter.join(',');
});
//--></script>
 

Изменено пользователем s27

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Опять ошибся...

Вместо

<select name="$filter[<?php echo $filter['filter_id']; ?>]">

Добавить

<select name="filter[<?php echo $filter_group['filter_group_id']; ?>]">

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал и себе фильтр в виде селектов, всплыл следующий вопрос, а как сделать кнопку "ресет", или как добавить в этот список "все товары" 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.