Разделить фильтры в группе на под группы-mFilter2

Александр
Александр
821
5
Содержание:
  1. Комментарии
Александр здравствуйте! Возникла такая необходимость, объединить определённые фильтры в под группы.

В mFilter2, есть замечательный параметр &toSeparatePlaceholders, который позволяет получить плейсхолдеры групп фильтров, но как можно разделить фильтры в группе на под группы, приведу пример, есть группа фильтров «Страны» в ней фильтры (Россия, Англия, Британия, Монголия) к примеру нужно разделить эти четыре фильтра, на две под группы:

1. Россия и Англия
2. Британия и Монголия

Если возможно, расскажите пожалуйста как это можно сделать?

Комментарии:

  1. Александр Мальцев
    Александр Мальцев
    20.11.2019, 13:01
    Не встречал такой задачи.
    Если так нужно, то можно создать два фильтра и в них прописать необходимые условия.
    Например:
    public function getExtendresourceValues(array $fields, array $ids) {
      ...
      if ($v == 'Британия' || $v == 'Монголия') {
        continue;
      }
      $name = 'countries';
      if (isset($filters[$name][$v])) {
        $filters[$name][$v][$row['id']] = $row['id'];
      }
      ...
    }
    public function getExtendresourceotherValues(array $fields, array $ids) {
      ...
      if ($v == 'Россия' || $v == 'Англия') {
        continue;
      }
      $name = 'countries';
      if (isset($filters[$name][$v])) {
        $filters[$name][$v][$row['id']] = $row['id'];
      }
      ...
    }
    
    Далее их указать mFilter2:
    [[!mFilter2? 
      &filters=`extendresource|keywords:default, extendresourceother|keywords:default`
      ...
    
    1. Александр
      Александр
      21.11.2019, 01:27
      Александр спасибо за решение, но возможно я не совсем подробно описал суть проблемы у меня в файле custom.class.php поле с которого формируется группа фильтров страны, прописано так:

      $tmp = strpos($row['country'], '||') !== false
                ? explode('||', $row['country'])
                : array($row['country']);
              foreach ($tmp as $v) {
                $v = str_replace('"', '"', trim($v));
                if ($v == '') {
                  continue;
                }
                $name = 'country';
                if (isset($filters[$name][$v])) {
                  $filters[$name][$v][$row['id']] = $row['id'];
                } else {
                  $filters[$name][$v] = array($row['id'] => $row['id']);
                }
              }
      мне нужно некоторые страны объединить в под группы, чтобы иметь возможность, например применять к ним разные стили к примеру под группу (Россия Казахстан Англия) я хотел бы скрыть, пока не будет нажата кнопка или добавить свой фон и т.д стили применить не проблема а как объединить фильтры, к примеру под группа (Украина Монголия Франция) переместить в нижнюю часть всех фильтров в группе, то есть применять разные стили к созданным под группам, как это можно сделать?

      Или возможно это решение, которое Вы описали, как раз и подойдёт для этого? Как я понимаю этот код нужно поместить в файл custom.class.php но как только я его туда добавляю, сайт падает и возникает ошибка или как то по другому это нужно делать?
      1. Александр Мальцев
        Александр Мальцев
        21.11.2019, 12:26
        Нужно сделать копию функции getExtendresourceValues. В новой копии изменить её имя. После этого в каждой из них прописать необходимые условия.
        1. Александр
          Александр
          09.12.2019, 17:59
          Здравствуйте! Александр, если не трудно не могли бы Вы, скинуть пример полного кода файла custom.class, как должно быть прописано, исходя из того что в группе фильтров Страны (country) разделить нужно на подгруппы (Британия, Монголия) (Россия, Англия) с условием что первая подгруппа в группе фильтров Страны выше другой и имеет своё название (заголовок) и разный фон, сколько не пытаюсь это сделать, постоянно тупик, ошибки и всё остальное, подскажите пожалуйста?
          1. Александр Мальцев
            Александр Мальцев
            11.12.2019, 14:50
            Привет! Это будет зависеть от того, как это у вас реализовано. Вам необходимо просто создать два одинаковых фильтра, но с разными именами. В одном вы исключаете одни страны, а в другом — другие. Потом их указываете сниппету mFilter2.

            Попробуйте сделать так. Сначала создайте один фильтр, в котором выводятся все страны и проверьте как он работает. Потом из него исключите некоторые страны. Проверьте как это работает. Потом скопируйте этот фильтр, измените ему название и поменяйте в нём условия. Укажите второй фильтр сниппету mFilter2.
    Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.