InstantCMS 2.х - проблемы с возрастом

melkozaur
На сайте с 06.04.2010
Offline
536
593

Суть такова: создаем пользователя 18 лет. В поиске в фильтре ставим возраст: от 18 до 18 - не ищет. От 18 до 19 - ищет. Предполагаю, что дело в том, что возраст считается на основе даты рождения и таким образом движок считает, что 18-летнему пользователю больше 18 лет, поэтому и не показывает его при таком поиске, что совершенно неправильно.

Не знаю, где рыть. На оф. форуме молчание, уже 2 раза тему создавал. Может кто подскажет тут?

Ragnarok
На сайте с 25.06.2010
Offline
239
#1
Предполагаю, что дело в том, что возраст считается на основе даты рождения

Честно говоря, не ковырял 2 Instant, но на первом код достаточно понятный. Пробовали смотреть модель, отвечающую за поиск, и её логику?

//TODO: перестать откладывать на потом
Q8
На сайте с 02.08.2012
Offline
31
#2

Там как-то неверно обсчитывается верхний возрастной предел.

Вот в этой части запроса:


AND (i.birth_date >= DATE_SUB(NOW(), INTERVAL 18 YEAR))

При значении 19 все обрабатывается как надо.

Ради эксперимента попробовал увеличить значение в модели на единицу. Вроде ошибок нет. Если не боитесь моих дилетантских советов, сделайте так же.

В файле system/core/model.php найдите метод filterDateYounger (~624 строка) и увеличьте значение переменной $value на 1.

Можно как-то так:


public function filterDateYounger($field, $value, $interval='DAY'){
if (!strstr($field, '.')){ $field = 'i.' . $field; }
$value = $this->db->escape($value);
$value = intval($value)+1;
$interval = $this->db->escape($interval);
$this->filter("$field >= DATE_SUB(NOW(), INTERVAL {$value} {$interval})");
return $this;
}

to melkozaur

не поможете с одним деликатным вопросом, касаемо ICMS2 ?

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