Доп. поле Ваш водительский стаж - Дизайн и модификация Invision Power Board

Перейти к содержимому

 

Правила раздела

Здесь обсуждаются вопросы по настройке и администрированию форумов IPB 3.x.
Пожалуйста, не оффтопьте, если зашли сюда случайно, и обратите внимание на соседние разделы.
Установка, настройка и обслуживание форумов IPB 2.x.
Оформление форумов, включая верстку скинов.
Размещение рекламы на форумах.
SEO оптимизация форума.
Техническая поддержка наших скинов и модов.

СвернутьПрикрепленные теги

Теги не найдены

Страница 1 из 1

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

#1 Пользователь не на сайте   asterix_kpi ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 56
  • Регистрация: 10-Август 12
  • Репутация: 1
  • IPB version:3.4.x
 

Отправлено 15 Декабрь 2012 - 22:47

Доброго времени суток!
Подскажите... может кто-то уже делал такое....

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

#2 Пользователь не на сайте   Almaziko ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 2
  • Регистрация: 18-Август 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 18 Август 2015 - 16:47

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

#3 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 18 Август 2015 - 17:22

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

#4 Пользователь не на сайте   Almaziko ответил: »

 
 
  • Newbie
  • *
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 2
  • Регистрация: 18-Август 15
  • Репутация: 0
  • IPB version:3.4.x
 

Отправлено 18 Август 2015 - 17:34

Просмотреть сообщениеsiv1987 18 Август 2015 - 17:22 сказал(а):

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

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

#5 Пользователь не на сайте   MartinFox ответил: »

 
 
  • Member
  • **
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 70
  • Регистрация: 04-Июль 15
  • Репутация: 4
  • IPB version:3.4.x
 

Отправлено 18 Август 2015 - 17:47

Просмотреть сообщениеAlmaziko 18 Август 2015 - 17:34 сказал(а):

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

Думаю, что часть 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 (18 Август 2015 - 17:59)

0

#6 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 19 Август 2015 - 20:45

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

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>

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

#7 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 20 Август 2015 - 15:07

            return self::decline( $interval->y, 'y' ) . ( $interval->m ? ' ' . self::decline( $interval->m, 'm' ) : ' ' . decline( $interval->d, 'd' ) );
Пропустили self::

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

#8 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 20 Август 2015 - 15:39

Спасибо.

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

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

#9 Пользователь не на сайте   newbie ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins.ru Team
  • Сообщений: 2 166
  • Регистрация: 26-Октябрь 11
  • Репутация: 814
  • IPB version:I have no IPB
 

Отправлено 20 Август 2015 - 17:05

Цитата

Например вместо 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) : '--';
    }

1

#10 Пользователь не на сайте   siv1987 ответил: »

 
 
  • Advanced
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: IPB Skins Team
  • Сообщений: 8 763
  • Регистрация: 20-Март 09
  • Репутация: 2 287
  • IPB version:3.1.x
 

Отправлено 20 Август 2015 - 17:19

Просмотреть сообщениеnewbie сказал(а):

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

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

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

Сообщить об этой теме:


Страница 1 из 1


Быстрый ответ

  

1 пользователей читают эту тему
0 зарегистрированных, 1 гостей, 0 скрытых


Контактная информация

Вопросы по работе сайта

+7 (917) 501-4765
C 10 до 20 в рабочие дни (время московское)

Техническая поддержка

Контактные данные специалистов

Дизайн форумов

IPB 3.x ¦ IPB 2.x

Бесплатные шаблоны

IPB 3.2 – 3.4 ¦ IPB 3.1 ¦ IPB 3.0 ¦ IPB 2.2 – 2.3 ¦ IPB 2.1 ¦ Клипарт
Лицензия на использование ¦ Ваша поддержка ¦ О проекте
Copyright © 2005-2016 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна