Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

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

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

 

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

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

Спасибо!

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

Опубликовано:

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

Опубликовано:

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

Опубликовано:

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

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

Опубликовано:

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

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

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

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

Опубликовано:

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

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

 

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

Опубликовано:

Спасибо.

 

Можно и циклом, но я использовал 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) : '--';
   }

Опубликовано:

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

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

 

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

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

Сейчас на странице 0

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.