Опубликовано: 15 декабря 201212 г Доброго времени суток!Подскажите... может кто-то уже делал такое.... Как организовать дополнительное поле в профиле "Ваш стаж вождения" Вводят дату получения прав - а в профиле выводиться Ваш стаж - 1 год 9 месяцев и 2 дня...(ну и под аватарой тоже)Спасибо!
Опубликовано: 18 августа 201510 г Хех и до сих пор ответа нет) Не уж то никто не знает как это сделать? Тоже нужно подобное, доп.поле где вводят дату, нажимают ок, а система сама высчитывает сколько времени с даты прошло и выводит в профиле пользователя. Только мне не обязательно что бы всё это выводилось в темах, только на страничках пользователей. Сколько искал, ничего не нашёл.
Опубликовано: 18 августа 201510 г Для этого нужно править шаблоны и вручную вывести это дополнительное поле, используя php выражение высчитываете текущаю дату минус дату получения прав.
Опубликовано: 18 августа 201510 г Для этого нужно править шаблоны и вручную вывести это дополнительное поле, используя php выражение высчитываете текущаю дату минус дату получения прав.Примерно понимаю о чём вы говорите, но сам наврятли смогу реализовать)
Опубликовано: 18 августа 201510 г Примерно понимаю о чём вы говорите, но сам наврятли смогу реализовать)Думаю, что часть PHP кода можно взять из даты рождения. Там расчет идет по такому же способу. $member['bday_day'] = intval( ipsRegistry::$request['day'] ); $member['bday_month'] = intval( ipsRegistry::$request['month'] ); $member['bday_year'] = intval( ipsRegistry::$request['year'] ); $to_update = array( 'bday_day' => $member['bday_day'], 'bday_month' => $member['bday_month'], 'bday_year' => $member['bday_year'] Изменено 18 августа 201510 г пользователем MartinFox
Опубликовано: 19 августа 201510 г Там совсем другой способ хранения времени, и расчет тоже немного другой. 1. Открыть /admin/sources/base/core.phpНайти /** * Set the timestamp * * @param int New timestamp * @return @e void */ static public function setTimestamp( $time ) Выше добавить static public function time_diff( $date ) { $datetime1 = new DateTime(); $datetime2 = new DateTime( $date ); $interval = $datetime1->diff( $datetime2 ); $keys = array( 'y', 'm', 'd', 'h', 'i', 's' ); $iter = 0; $time_diff = array(); foreach( $keys as $k => $v ) { if( $interval->$v ) { $time_diff[] = self::decline( $interval->$v, $v ); $cn = ( ! $iter ) ? ( ( $v == 'y' ) ? 3 : 2 ) : $cn; if( ++$iter == $cn ) { break; } } } return count( $time_diff ) ? implode( " ", $time_diff ) : "--"; } static public function decline( $num, $values=array() ) { $decline = array( 'y' => array( 'год', 'года', 'лет' ), 'm' => array( 'месяц', 'месяца', 'месяцев' ), 'd' => array( 'день', 'дня', 'дней' ), 'h' => array( 'час', 'часа', 'часов' ), 'i' => array( 'минута', 'минуты', 'минут' ), 's' => array( 'секунда', 'секунды', 'секунд' ), ); if( is_string( $values ) ) { $values = isset( $decline[ $values ] ) ? $decline[ $values ] : array(); } $keys = array( 2, 0, 1, 1, 1, 2 ); return $num . ' ' . $values[ ( $num % 100 > 4 && $num %100 < 20) ? 2 : $keys[min($num % 10, 5)] ]; } Файл сохранить как UTF-8 безм BOM. 2. Создать новое дополнительное поле в группе Profile information.Тип поля -одна строкаФормат поля - nn.nn.nnnn 3. Открыть шаблон Профили пользователей -> profileModernНайти <if test="!empty($value)"> <li class='clear clearfix'> {$value} </li> </if> Заменить на <if test="!empty($value)"> <li class='clear clearfix'> <if test="$key == 'ключ_поле'"> {parse expression="str_replace( $member['field_ид_поле'], IPSTime::time_diff( $member['field_ид_поле'] ), $value)"} <else /> {$value} </if> </li> </if> ключ_поле - заменить на ключ дополнительного полеид_поле - заменить на ид дополнительного поле.
Опубликовано: 20 августа 201510 г return self::decline( $interval->y, 'y' ) . ( $interval->m ? ' ' . self::decline( $interval->m, 'm' ) : ' ' . decline( $interval->d, 'd' ) );Пропустили self:: Может лучше if/else заменить на цикл? :)
Опубликовано: 20 августа 201510 г Спасибо. Можно и циклом, но я использовал if/else из расчета на то чтобы для разных относительных дат использовать разные условия. Например вместо 1 год 0 месяцев - 1 год 15 дней, 1 месяц 6 часов и тд. При том для малых значений типа минуты и секунды допустимо значение 0 - 1 час 0 минут. Хотя если будет оптимальный цикл то почему бы и нет - например следующие ненулевое значение + для каждого типа массив со своим форматом времени. Пожалуй да, заменю. :)
Опубликовано: 20 августа 201510 г Например вместо 1 год 0 месяцев - 1 год 15 дней, 1 месяц 6 часов и тд.А в первом варианте, если установить дату с сегодняшними месяцем и числом и отличным от текущего годом (20.08.2000), как раз выходило 15 лет 0 дней. static public function time_diff( $date ) { $datetime1 = new DateTime(); $datetime2 = new DateTime( $date ); $interval = $datetime1->diff( $datetime2 ); $result = array(); $iter = 0; foreach (array('y', 'm', 'd', 'h', 'i', 's') as $i) { if ($interval->$i) { $result[] = self::decline( $interval->$i, $i ); $iter++; if ($iter == 2) { break; } } } return count($result) ? implode(' ', $result) : '--'; }
Опубликовано: 20 августа 201510 г А в первом варианте, если установить дату с сегодняшними месяцем и числом и отличным от текущего годом (20.08.2000), как раз выходило 15 лет 0 дней.Мне было лень еще одно условие дописать для дня. Заменил. Думаю предустановленные форматы никому не нужны.
Доброго времени суток!
Подскажите... может кто-то уже делал такое....
Как организовать дополнительное поле в профиле "Ваш стаж вождения"
Вводят дату получения прав - а в профиле выводиться Ваш стаж - 1 год 9 месяцев и 2 дня...(ну и под аватарой тоже)
Спасибо!