mFilter2: как вывести фильтр с пустым значением TV?

Всем привет!

Друзья, подскажите, пожалуйста решение задачи: создал свой фильтр для вывода товаров (обычные страницы с TV), который переключает дорогие либо дешевые товары (дороже 340000 или дешевле). За основу брал метод boolean. Как сделать, чтобы и в случае дешевых и в случае дорогих товаров выводились так же товары без цены?
<?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[$value])) {
        $results[$value] = array(
          'title' => $title,
          'value' => (int)!$chip,
          'type' => 'class',
          'resources' => array()
        );
      }

      foreach ($ids as $id) {
        $results[$value]['resources'][] = $id;
      }
    }

    ksort($results);

    return $results;
  }

  public function filterClass(array $requested, array $values, array $ids) {
    $matched = array();
    $value = $requested[0];
    $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;
  }
}
Заранее благодарен за ваши ответы.
Евгений
30 октября 2018, 12:44
modx.pro
687
0

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0