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

Александр здравствуйте! Возникла такая необходимость, объединить определённые фильтры в под группы. В mFilter2, есть замечательный параметр &toSeparatePlaceholders, который позволяет получить плейсхолдеры групп фильтров, но как можно разделить фильтры в группе на под группы, приведу пример, есть группа фильтров "Страны" в ней фильтры (Россия, Англия, Британия, Монголия) к примеру нужно разделить эти четыре фильтра, на две под группы: 1. Россия и Англия 2. Британия и Монголия Если возможно, расскажите пожалуйста как это можно сделать?

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

Александр Мальцев
Александр Мальцев
Не встречал такой задачи.
Если так нужно, то можно создать два фильтра и в них прописать необходимые условия.
Например:
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`
  ...
Александр
Александр
Александр спасибо за решение, но возможно я не совсем подробно описал суть проблемы у меня в файле 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 но как только я его туда добавляю, сайт падает и возникает ошибка или как то по другому это нужно делать?
Александр Мальцев
Александр Мальцев
Нужно сделать копию функции getExtendresourceValues. В новой копии изменить её имя. После этого в каждой из них прописать необходимые условия.
Александр
Александр
Здравствуйте! Александр, если не трудно не могли бы Вы, скинуть пример полного кода файла custom.class, как должно быть прописано, исходя из того что в группе фильтров Страны (country) разделить нужно на подгруппы (Британия, Монголия) (Россия, Англия) с условием что первая подгруппа в группе фильтров Страны выше другой и имеет своё название (заголовок) и разный фон, сколько не пытаюсь это сделать, постоянно тупик, ошибки и всё остальное, подскажите пожалуйста?
Александр Мальцев
Александр Мальцев
Привет! Это будет зависеть от того, как это у вас реализовано. Вам необходимо просто создать два одинаковых фильтра, но с разными именами. В одном вы исключаете одни страны, а в другом — другие. Потом их указываете сниппету mFilter2.

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