Перейти к публикации
Дизайн и модификация IPS Community IPBSkinsBETA
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...
asterix_kpi

Доп. поле Ваш водительский стаж

Рекомендованные сообщения

Доброго времени суток!

Подскажите... может кто-то уже делал такое....

 

Как организовать дополнительное поле в профиле "Ваш стаж вождения"

Вводят дату получения прав - а в профиле выводиться Ваш стаж - 1 год 9 месяцев и 2 дня...(ну и под аватарой тоже)

Спасибо!

Поделиться сообщением


Ссылка на сообщение

Хех и до сих пор ответа нет) Не уж то никто не знает как это сделать? Тоже нужно подобное, доп.поле где вводят дату, нажимают ок, а система сама высчитывает сколько времени с даты прошло и выводит в профиле пользователя. Только мне не обязательно что бы всё это выводилось в темах, только на страничках пользователей. Сколько искал, ничего не нашёл.

Поделиться сообщением


Ссылка на сообщение

Для этого нужно править шаблоны и вручную вывести это дополнительное поле, используя php выражение высчитываете текущаю дату минус дату получения прав.

Поделиться сообщением


Ссылка на сообщение

Для этого нужно править шаблоны и вручную вывести это дополнительное поле, используя php выражение высчитываете текущаю дату минус дату получения прав.

Примерно понимаю о чём вы говорите, но сам наврятли смогу реализовать)

Поделиться сообщением


Ссылка на сообщение
08/18/15 14:48 (изменено)

Примерно понимаю о чём вы говорите, но сам наврятли смогу реализовать)

Думаю, что часть 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']

Изменено пользователем MartinFox

Поделиться сообщением


Ссылка на сообщение

Там совсем другой способ хранения времени, и расчет тоже немного другой.

 

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>

ключ_поле - заменить на ключ дополнительного поле

ид_поле - заменить на ид дополнительного поле.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

            return self::decline( $interval->y, 'y' ) . ( $interval->m ? ' ' . self::decline( $interval->m, 'm' ) : ' ' . decline( $interval->d, 'd' ) );

Пропустили self::

 

Может лучше if/else заменить на цикл? :)

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

Спасибо.

 

Можно и циклом, но я использовал if/else из расчета на то чтобы для разных относительных дат использовать разные условия. Например вместо 1 год 0 месяцев - 1 год 15 дней, 1 месяц 6 часов и тд. При том для малых значений типа минуты и секунды допустимо значение 0 - 1 час 0 минут. Хотя если будет оптимальный цикл то почему бы и нет - например следующие ненулевое значение + для каждого типа массив со своим форматом времени.

 

Пожалуй да, заменю. :)

Поделиться сообщением


Ссылка на сообщение
Например вместо 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) : '--';
   }

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение

А в первом варианте, если установить дату с сегодняшними месяцем и числом и отличным от текущего годом (20.08.2000), как раз выходило 15 лет 0 дней.

Мне было лень еще одно условие дописать для дня.

 

Заменил. Думаю предустановленные форматы никому не нужны.

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...