Стандартный модуь фильтр - выбор параметров Списком

Тема в разделе "Модули и дополнения", создана пользователем Tetiana, 17 авг 2015.

  1. Tetiana

    Tetiana Новичок

    Сообщения:
    5
    Симпатии:
    0
    А можно фильтр в виде выпадающего списка сделать?
     
  2. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
  3. Tetiana

    Tetiana Новичок

    Сообщения:
    5
    Симпатии:
    0
  4. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    Понял. Фильтр, элементом список нужен.

    В файле шаблона \catalog\view\theme\default\template\module\filter.tpl

    Заменим это
    Код:
          <div id="filter-group<?php echo $filter_group['filter_group_id']; ?>">
            <?php foreach ($filter_group['filter'] as $filter) { ?>
            <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
            <label class="checkbox">
              <input name="filter[]" type="checkbox" value="<?php echo $filter['filter_id']; ?>" checked="checked" />
              <?php echo $filter['name']; ?></label>
            <?php } else { ?>
            <label class="checkbox">
              <input name="filter[]" type="checkbox" value="<?php echo $filter['filter_id']; ?>" />
              <?php echo $filter['name']; ?></label>
            <?php } ?>
            <?php } ?>
          </div>
    на это
    Код:
          <div id="filter-group<?php echo $filter_group['filter_group_id']; ?>">
            <select class="form-control" name="filter[]">
                 <option selected="selected" value=""> --- Выберите --- </option>
                <?php foreach ($filter_group['filter'] as $filter) { ?>
                <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
                     <option selected="selected" value="<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></option>
                <?php } else { ?>
                       <option  value="<?php echo $filter['filter_id']; ?>"><?php echo $filter['name']; ?></option>
                <?php } ?>
                <?php } ?>
             </select>
          </div>


    А вот это
    Код:
      $('input[name^=\'filter\']:checked').each(function(element) {
         filter.push(this.value);
       });
    
    на это
    Код:
      $('select[name^=\'filter\'] option:selected').each(function(element) {
         if (this.value != "") {
           filter.push(this.value); 
         }
       });
    
     
    Последнее редактирование: 17 авг 2015
    Ecsiron, artaaroth и Zlata Jesen нравится это.
  5. Tetiana

    Tetiana Новичок

    Сообщения:
    5
    Симпатии:
    0
    Вид изменился, но поиск не работает
     
  6. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    исправил код. И не надо цитировать весь код..., это лишнее..
     
    Tetiana нравится это.
  7. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    @Ален , у меня шаблон фильтров измененный (возможно, из-за версии) и данное решение вызывает ошибку. Не могли бы Вы посмотреть, как мне заменить чекбоксы на выпадающий список?

    PHP:
    <div class="panel panel-default">
      <div class="panel-heading"><?php echo $heading_title?></div>
      <div class="list-group">
        <?php foreach ($filter_groups as $filter_group) { ?>
        <a class="list-group-item"><?php echo $filter_group['name']; ?></a>
        <div class="list-group-item">
       

         <div id="filter-group<?php echo $filter_group['filter_group_id']; ?>">
            <?php foreach ($filter_group['filter'] as $filter) { ?>
            <div class="checkbox">
              <label>
                <?php if (in_array($filter['filter_id'], $filter_category)) { ?>
                <input type="checkbox" name="filter[]" value="<?php echo $filter['filter_id']; ?>" checked="checked" />
                <?php echo $filter['name']; ?>
                <?php } else { ?>
                <input type="checkbox" name="filter[]" value="<?php echo $filter['filter_id']; ?>" />
                <?php echo $filter['name']; ?>
                <?php ?>
              </label>
            </div>
            <?php ?>
          </div>
        
        
        
        </div>
        <?php ?>
      </div>
      <div class="panel-footer text-right">
        <button type="button" id="button-filter" class="btn btn-primary"><?php echo $button_filter?></button>
      </div>
    </div>
    <script type="text/javascript"><!--
    $('#button-filter').on('click', function() {
        filter = [];

        $('input[name^=\'filter\']:checked').each(function(element) {
            filter.push(this.value);
        });

        location = '<?php echo $action?>&filter=' + filter.join(',');
    });
    //--></script>
     
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.981
    Симпатии:
    1.087
    пишите сразу что за ошибка. Хоть код вижу и изменен немного, но не критично...
     
    Zlata Jesen нравится это.
  9. Zlata Jesen

    Zlata Jesen Продвинутый пользователь

    Сообщения:
    165
    Симпатии:
    98
    Был белый лист, я решила, что это ошибка в PHP, но сейчас попробовала еще раз внимательно изменить, сохранив правильную вложенность и все работает.
     
  10. Romans

    Romans Administrator Команда форума

    Сообщения:
    1.453
    Симпатии:
    787
  11. Sanek

    Sanek Пользователь

    Сообщения:
    79
    Симпатии:
    3
    Alen, Вид изменился но поиск не работает. Фильтр нестандартный, без кнопки. Можете глянуть как скрипт подправить?
    Код:
    <div class="box bt-filter not-animated" data-animate="fadeInLeft" data-delay="200">
      <div class="box-heading"><h3><?php echo $heading_title; ?></h3></div>
        <div class="box-content"><div class="list">
        <?php foreach ($filter_groups as $filter_group) { ?>
        <a class="title"><?php echo $filter_group['name']; ?></a>
        <?php if($filter_group['show_image']=='image'){ ?>
            <div class="bt-filter-image">
                <div id="filter-group<?php echo $filter_group['filter_group_id']; ?>">
                    <ul>
                    <?php foreach ($filter_group['filter'] as $filter) { ?>
                        <noindex><li <?php echo(in_array($filter['filter_id'], $filter_category))?'class="active"':''; ?>><a rel="nofollow" title="<?php echo $filter['name']; ?>" href="<?php echo $filter['filter_id']; ?>" ><img alt="<?php echo $filter['name']; ?>" src="<?php echo $filter['image']; ?>" /></a></li></noindex>
                    <?php } ?>
                    </ul>
                </div>
            </div>
        <?php }else{ ?>
            <div class="">
              <div id="filter-group<?php echo $filter_group['filter_group_id']; ?>">
                <ul>
                <?php foreach ($filter_group['filter'] as $filter) { ?>
                    <noindex><li <?php echo(in_array($filter['filter_id'], $filter_category))?'class="active"':''; ?>><a rel="nofollow" title="<?php echo $filter['name']; ?>" href="<?php echo $filter['filter_id']; ?>"><span class="fe-checkbox"></span> <?php echo $filter['name']; ?></a></li></noindex>
                <?php } ?>
                </ul>
              </div>
            </div>
        <?php } ?>
       
        <?php } ?>
      </div></div>
    </div>
    <?php global $request;?>
    <script type="text/javascript"><!--
    var filter = [];
    <?php if (isset($request->get['filter'])){ ?>
    <?php $filters =  explode(',', (string)$request->get['filter']); ?>
        <?php foreach($filters as $filter){ ?>
        filter.push(<?php echo $filter; ?>);
        <?php } ?>
    <?php } ?>
    var idarr = '';
    <?php foreach ($filter_groups as $filter_group) { ?>
        <?php if($filter_group == end($filter_groups)){ ?>
            mark = '';
        <?php }else{ ?>
            mark = ',';
        <?php } ?>
        idarr = idarr + '#filter-group<?php echo $filter_group['filter_group_id']; ?> ul li a'+ mark;
    <?php } ?>
    $(function () {
        $(idarr).click(function (event) {
          event.preventDefault();
          $(this).parent('li').toggleClass('active');     
          var a = filter.indexOf(parseInt($(this).attr('href')));
          if(a == -1){
            filter.push(parseInt($(this).attr('href')));
          }else{
            filter.splice(a,1)
          }
          var url = '<?php echo $action; ?>&filter=' + filter.join(',');
          $.ajax({
            type: 'GET',
            url: url,
            data: {},
            beforeSend: function( xhr ) {
                $("#tags-load").show();
            },
            complete: function (data) {         
              $('#content').html($("#content", data.responseText).html());
              history.pushState({
                page: url
              }, url, url);     
              $("#tags-load").hide();
              handleGridList();
            }
          });
        });
    });
    
    $(document).ready(function(){
    
        $( document ).ajaxComplete(function() {
    
            //handleGridList();
    
        });
    })
    function handleGridList(){
        if (typeof boss_quick_shop == 'function') {
            boss_quick_shop();
        }
       
        dataAnimate();
       
        $('#list-view').click(function() {
            $('#content .product-layout > .clearfix').remove();
    
            $('#content .product-layout').attr('class', 'product-layout product-list col-xs-12');
    
            localStorage.setItem('display', 'list');
        });
    
        // Product Grid
        $('#grid-view').click(function() {
            $('#content .product-layout').attr('class', 'product-layout product-grid col-md-4 col-sm-4 col-xs-12');   
             localStorage.setItem('display', 'grid');
        });
        if (localStorage.getItem('display') == 'list') {
            $('#list-view').trigger('click');
        } else {
            $('#grid-view').trigger('click');
        }
    }
    
    //--></script>
    
     
  12. Vlad

    Vlad Эксперт

    Сообщения:
    4.151
    Симпатии:
    1.004
    тема!! Стандартный модуль фильтр
    Отсюда и вопрос, зачем вы пробуете то, что явно не подходит?
    Решение только для стандартного, и сама тема для вопросов по стандартному фильтру.
     
  13. Sanek

    Sanek Пользователь

    Сообщения:
    79
    Симпатии:
    3
    Фильтр почти стандартный, с небольшой доработкой.
     
  14. sinattor

    sinattor Новичок

    Сообщения:
    5
    Симпатии:
    0
    Извиняйте если не в тему. Подскажите как сделать автоматическое применение стандартного фильтра. Версия ocStore 2.1.0.2.1
     
  15. Ravilr

    Ravilr Специалист

    Сообщения:
    3.981
    Симпатии:
    1.087
    не в тему. Уже было на форуме как сделать в теме тоже про стандартный филтр.
     
  16. sinattor

    sinattor Новичок

    Сообщения:
    5
    Симпатии:
    0
    Спасибо нашел.
     
  17. roman_1790

    roman_1790 Новичок

    Сообщения:
    19
    Симпатии:
    0
    Ален, подскажите пожалуйста, очень нужно перенести стандартный фильтр под описание категории. У меня он сейчас настроен и отображается вверху страницы нужной категории прямо над описанием и фотографиями подкатегорий. Хочу его опустить под описание категории и под сортировку, чтобы он был прямо перед товарами. Если сможете подсказать как сделать буду очень признателен, заранее спасибо!