Возраст в версии 2.x

Поиск по возрасту работает некорректно

#1 19 апреля 2015 в 08:50
Фильтр по пользователям не ищет людей, если задать четко их возраст. Например, выставляем возраст в фильтре "от 18 до 18" — 18-летних не находит. Если задать "от 18 до 19" — то находит 18-летних.
Как исправить?
#2 14 февраля 2018 в 09:54
3 года как с куста, а ошибка осталась smile

В общем, если вдруг кому-то важно, чтобы в поиске корректно искались пользователи (ищем от 18 до 18 — находит 18-летних, а не как сейчас), то решение вот такое:

В файле system/core/model.php надо добавить строчку $value = intval($value)+1;

  1. public function filterDateYounger($field, $value, $interval='DAY'){
  2. if (!strstr($field, '.')){ $field = 'i.' . $field; }
  3. $value = $this->db->escape($value);
  4. $value = intval($value)+1;
  5. $interval = $this->db->escape($interval);
  6. $this->filter("$field >= DATE_SUB(NOW(), INTERVAL {$value} {$interval})");
  7. return $this;
  8. }
#3 14 февраля 2018 в 12:15

3 года как с куста, а ошибка осталась

alkokrolik

точно, есть такое. Добавил, теперь норм ищет, только это же файлы движка, может на Гит предложите исправление.
#4 14 февраля 2018 в 12:25

точно, есть такое. Добавил, теперь норм ищет, только это же файлы движка, может на Гит предложите исправление.

Андрей
Честно говоря, я не уверен, что это правильное решение. Просто мне надо было и подсказали, вроде работает.
#5 14 февраля 2018 в 13:24
Поправлю в релизе.
А пока в файле /system/fields/age.php аналогичное условие заменить на

  1. if (!empty($value['to'])){
  2. $model->filterTimestampYounger($this->name, $value['to'], $this->getOption('range'));
  3. }
а в файле /system/core/model.php добавить метод

  1. public function filterTimestampYounger($field, $value, $interval='DAY'){
  2. if (strpos($field, '.') === false){ $field = 'i.' . $field; }
  3. $value = intval($value);
  4. $interval = $this->db->escape($interval);
  5. $this->filter("TIMESTAMPDIFF({$interval}, {$field}, CURDATE()) <= {$value}");
  6. return $this;
  7. }
#6 14 февраля 2018 в 13:42


Поправлю в релизе.
А пока в файле /system/fields/age.php аналогичное условие заменить на

  1. if (!empty($value['to'])){
  2. $model->filterTimestampYounger($this->name, $value['to'], $this->getOption('range'));
  3. }
а в файле /system/core/model.php добавить метод

  1. public function filterTimestampYounger($field, $value, $interval='DAY'){
  2. if (strpos($field, '.') === false){ $field = 'i.' . $field; }
  3. $value = intval($value);
  4. $interval = $this->db->escape($interval);
  5. $this->filter("TIMESTAMPDIFF({$interval}, {$field}, CURDATE())
  6.  

Fuze

Это в дополнение к тем действиям, что я описал или вместо них?
#7 14 февраля 2018 в 14:03
В дефолтных файлах /system/fields/age.php и system/core/model.php без ваших правок надо внести правки.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.