Нужно подкорректировать/написать пару фильтров для mFilter2

1 1
Приветствую!

Необходимо написать несколько простых фильтров для mFilter2:

1) Фильтр для выбора дорогой и дешевой недвижимости по TV-полю «цена» (по-сути аналог boolean). При этом объекты, у которых цена не указана должны отображаться и там и там.
2) Фильтр кол-ва комнат. Задача, чтобы отображались значения «1», «2», «3», «4+». Т.е. все объекты со значением 4 и больше должны группироваться в один параметр «4+».

Цена договорная. При знании темы работы на час максимум.

Вот что имеется:

1) по дорогой и дешевой недвижимости фильтр есть, но он не отображает товары без цены:

<?php
class myCustomFilter extends mse2FiltersHandler {

  public function buildClassFilter(array $values) {
    if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
      return array();
    }

    $results = array();
    $this->modx->lexicon->load('aveo:default');

    foreach ($values as $value => $ids) {
      $chip = empty($value) || (is_numeric($value) && (int)$value <= 340000);
      $title = $chip
      ? $this->modx->lexicon('affordable')
      : $this->modx->lexicon('elite');

      if (!isset($results[$title])) {
        $results[$title] = array(
          'title' => $title,
          'value' => (int)!$chip,
          'type' => 'class',
          'resources' => $ids
        );
      }
      else {
        $results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
      }
    }

    return $this->sortFilters($results, 'class', array('name' => $name));
  }

  public function filterClass(array $requested, array $values, array $ids) {
    $matched = array();
    $tmp = array_flip($ids);

    foreach ($requested as $value) {
      foreach ($values as $k => $resources) {
        $chip = empty($k) || (is_numeric($k) && (int)$k <= 340000);

        if ((empty($value) && !$chip) || (!empty($value) && $chip)) {
          continue;
        }

        foreach ($resources as $id) {
          if (isset($tmp[$id])) {
            $matched[] = $id;
          }
        }
      }
    }

    return $matched;
  }
2) По фильтру кол-ва комнат сейчас группируются они так:

public function buildBedroomsFilter(array $values) {
    if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
      return array();
    }

    $results = array();

    foreach ($values as $value => $ids) {
      $many = (is_numeric($value) && (int)$value >= 4);
      $title = !$many ? $value : '4+';
      $value = !$many ? $value : '4';

      if (!isset($results[$title])) {
        $results[$title] = array(
          'title' => $title,
          'value' => $value,
          'type' => 'bedrooms',
          'resources' => $ids
        );
      }
      else {
        $results[$title]['resources'] = array_merge($results[$title]['resources'], $ids);
      }
    }

    return $this->sortFilters($results, 'bedrooms', array('name' => $name));
}
Евгений
Евгений
30 октября 2018, 17:41
modx.pro
996