Нужно подкорректировать/написать пару фильтров для 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
555
0

Комментарии в этом разделе отключены, так что вы должны указать свои контакты прямо в объявлении, или активировать отправку сообщений из профиля.

Обратите внимание, что modx.pro не несёт никакой ответственности за выполнение работы или оплату заказа. Это просто доска объявлений, дальше вы общаетесь за пределами нашей площадки.