Выборка результатов за месяц $table->filters - Дизайн и модификация Invision Power Board

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

 

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

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

  • 2 Страниц +
  • 1
  • 2

Выборка результатов за месяц $table->filters

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 24 Октябрь 2018 - 15:27

Здравствуйте. У меня есть готовый модуль, мне нужно реализовать в нем выборку по месяцам или другим данным. Сначала по месяцам нужно сделать. Подскажите пожалуйста, с чего начать?

Вложений

  • Вложение  toplist.php (12,96К)
    Количество загрузок: 0

0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 24 Октябрь 2018 - 21:06

Сделал основу фильтра, он тоже нужен будет потом: http://prntscr.com/la0rac
Как лучше выборку по дате делать?
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 24 Октябрь 2018 - 21:18

http://prntscr.com/la0xgi такое бы сделать, вообще супер.
0

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

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

Отправлено 25 Октябрь 2018 - 12:44

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

http://prntscr.com/la0xgi такое бы сделать, вообще супер.


Так откройте файл и посмотрите, как реализовано
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 25 Октябрь 2018 - 13:09

Так и сделал, я не могу вывести нужны мне переменные с $table.

Сейчас в шаблон данные выводятся тегами:

$table->rowsTemplate = array( \IPS\Theme::i()->getTemplate('tables', 'sharedstats', 'front'), 'games' );
\IPS\Output::i()->output = (string) $table;


Куда мне вставить переменную $dates?
0

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

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

Отправлено 25 Октябрь 2018 - 13:21

Создайте новый шаблон и в него добавьте
\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('tables', 'sharedstats', 'front')->someTemplate($table, $dates);

0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 29 Октябрь 2018 - 02:30

Ничего не получилось. Не отображается информация из нового шаблона.
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 01:01

У меня получилось, вроде работает )) Кому надо будет:

		/* Figure out dates */
		$dates = array();
		$timezone = new \DateTimeZone( \IPS\Settings::i()->reputation_timezone );
		$endDate = \IPS\DateTime::ts( time() )->setTimezone( $timezone );

		$firstRepDate = \IPS\DB::i('stats')->select( 'MIN(UNIX_TIMESTAMP(datetime))', 'stats_games' )->first();
		$firstIndexDate = \IPS\Content\Search\Index::i()->firstIndexDate();

		$dates[ 'oldest' ] = \IPS\DateTime::ts( ( $firstRepDate > $firstIndexDate ) ? $firstRepDate : $firstIndexDate );
		$oldestStamp = $dates[ 'oldest' ]->getTimeStamp();
		$date = $dates[ 'oldest' ];

		$aYearAgo = \IPS\DateTime::create()->setTimezone( $timezone )->sub( new \DateInterval( 'P1Y' ) );
		$month = \IPS\DateTime::create()->setTimezone( $timezone )->sub( new \DateInterval( 'P1M' ) )->setTime( 0, 0 );
		$week = \IPS\DateTime::create()->setTimezone( $timezone )->sub( new \DateInterval( 'P7D' ) )->setTime( 0, 0 );
		$today = \IPS\DateTime::create()->setTimezone( $timezone )->setTime( 0, 0 );

		if ( $aYearAgo->getTimeStamp() > $oldestStamp )
		{
			$dates[ 'year' ] = $aYearAgo;
		}

		if ( $month->getTimeStamp() > $oldestStamp )
		{
			$dates[ 'month' ] = $month;
		}

		if ( $week->getTimeStamp() > $oldestStamp )
		{
			$dates[ 'week' ] = $week;
		}

		if ( $today->getTimeStamp() > $oldestStamp )
		{
			$dates[ 'today' ] = $today;
		}

		/* Got a date? */
		if ( isset( \IPS\Request::i()->time ) and isset( $dates[ \IPS\Request::i()->time ] ) )
		{
			$date = $dates[ \IPS\Request::i()->time ];
		}
		else if ( isset( $dates[ 'month' ] ) )
		{
			/* Set the default to month */
			\IPS\Request::i()->time = 'month';
			$date = $dates[ 'month' ];
		}

		$form = new \IPS\Helpers\Form( 'popular_date', 'continue' );
		$form->class = 'ipsForm_vertical';
		$customStart = isset( \IPS\Request::i()->custom_date_start ) ? \IPS\Request::i()->custom_date_start : NULL;
		$customEnd = isset( \IPS\Request::i()->custom_date_end ) ? \IPS\Request::i()->custom_date_end : NULL;

		$form->add( new \IPS\Helpers\Form\DateRange( 'custom_date', array( 'start' => $customStart, 'end' => $customEnd ), FALSE, array( 'start' => array( 'min' => $dates[ 'oldest' ], 'time' => false ) ) ) );

		if ( $values = $form->values() )
		{
			$url = \IPS\Request::i()->url()->stripQueryString( 'time' );

			if ( isset( $values[ 'custom_date' ][ 'start' ] ) and $values[ 'custom_date' ][ 'start' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_start', $values[ 'custom_date' ][ 'start' ]->getTimeStamp() );
			}

			if ( isset( $values[ 'custom_date' ][ 'end' ] ) and $values[ 'custom_date' ][ 'end' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_end', $values[ 'custom_date' ][ 'end' ]->getTimeStamp() );
			}

			\IPS\Output::i()->redirect( $url );
		}
		else
		{
			if ( $customStart )
			{
				$date = \IPS\DateTime::ts( $customStart )->setTimezone( $timezone )->setTime( 0, 0, 1 );
			}

			if ( $customEnd )
			{
				$endDate = \IPS\DateTime::ts( $customEnd )->setTimezone( $timezone )->setTime( 23, 59, 59 );
			}
		}
		
		/* Get top rated contributors */
		$topContributors = array();

		$innerQueryWhere[] = array( 'id>0 and UNIX_TIMESTAMP(datetime) BETWEEN ' . intval( $date->getTimeStamp() ) . ' AND ' . intval( $endDate->getTimeStamp() ) );

		foreach( \IPS\Db::i('stats')->select( '*', 'stats_games', $innerQueryWhere, 'id DESC', 4 ) as $member )
		{
			$topContributors[] =  $member;
		}

		/* Display */
		\IPS\Output::i()->output = \IPS\Theme::i()->getTemplate('stats', 'sharedstats', 'front')->games( $topContributors, $dates, $form->customTemplate( array( call_user_func_array( array( \IPS\Theme::i(), 'getTemplate' ), array( 'forms', 'core' ) ), 'popupTemplate' ) ) );

0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 04:09

@newbie помогите плиз с пагинацией.
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 04:09

@newbie помогите плиз с пагинацией.
0

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

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

Отправлено 02 Ноябрь 2018 - 09:19

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

@newbie помогите плиз с пагинацией.


        foreach( \IPS\Db::i('stats')->select( '*', 'stats_games', $innerQueryWhere, 'id DESC', 4 ) as $member )
        {
            $topContributors[] =  $member;
        }

заменить на
		$page = isset(\IPS\Request::i()->page) ? intval(\IPS\Request::i()->page) : 1;

		if ($page < 1)
		{
			$page = 1;
		}
		
		$perPage = 4;
		
		$select = \IPS\Db::i('stats')->select('*', 'stats_games', $innerQueryWhere, 'id DESC', array(($page - 1) * $perPage, $perPage), null, null, \IPS\Db::SELECT_SQL_CALC_FOUND_ROWS);

        foreach ($select as $member)
        {
            $topContributors[] =  $member;
        }
		
		$pagination = \IPS\Theme::i()->getTemplate('global', 'core', 'global')->pagination($url, ceil($select->count(true) / $perPage), $page, $perPage);

0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 11:13

Спасибо, я уже нашел в другом модуле и реализовал, только есть баги: http://prntscr.com/ldfxnn какой код по лучше будет?

Баг в том, что когда идешь по страницам, зачем выбираешь дату, нажимаешь опять на пагинацию - всё сбрасывается. Но это тут я понимаю:

		if ( $values = $form->values() )
		{

		}
		else
		{
			if ( $customStart )
			{
				$date = \IPS\DateTime::ts( $customStart )->setTimezone( $timezone )->setTime( 0, 0, 1 );
			}

			if ( $customEnd )
			{
				$endDate = \IPS\DateTime::ts( $customEnd )->setTimezone( $timezone )->setTime( 23, 59, 59 );
			}
		}


щас буду копать.
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 11:45

Что скажете?

До:
		if ( $values = $form->values() )
		{
			$url = \IPS\Request::i()->url()->stripQueryString( 'time' );

			if ( isset( $values[ 'custom_date' ][ 'start' ] ) and $values[ 'custom_date' ][ 'start' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_start', $values[ 'custom_date' ][ 'start' ]->getTimeStamp() );
			}

			if ( isset( $values[ 'custom_date' ][ 'end' ] ) and $values[ 'custom_date' ][ 'end' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_end', $values[ 'custom_date' ][ 'end' ]->getTimeStamp() );
			}

			\IPS\Output::i()->redirect( $url );
		}
		else
		{
			if ( $customStart )
			{
				$date = \IPS\DateTime::ts( $customStart )->setTimezone( $timezone )->setTime( 0, 0, 1 );
			}

			if ( $customEnd )
			{
				$endDate = \IPS\DateTime::ts( $customEnd )->setTimezone( $timezone )->setTime( 23, 59, 59 );
			}
		}

		

		$page = isset( \IPS\Request::i()->page ) ? intval( \IPS\Request::i()->page ) : 1;

		if( $page < 1 )
		{
			$page = 1;
		}


После:
		$page = isset( \IPS\Request::i()->page ) ? intval( \IPS\Request::i()->page ) : 1;

		if( $page < 1 )
		{
			$page = 1;
		}

		if ( $values = $form->values() )
		{
			$url = \IPS\Request::i()->url()->stripQueryString( 'time' );

			if ( isset( $values[ 'custom_date' ][ 'start' ] ) and $values[ 'custom_date' ][ 'start' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_start', $values[ 'custom_date' ][ 'start' ]->getTimeStamp() );
			}

			if ( isset( $values[ 'custom_date' ][ 'end' ] ) and $values[ 'custom_date' ][ 'end' ] instanceof \IPS\DateTime )
			{
				$url = $url->setQueryString( 'custom_date_end', $values[ 'custom_date' ][ 'end' ]->getTimeStamp() );
			}

			\IPS\Output::i()->redirect( $url );
		}
		else
		{

			$url = \IPS\Request::i()->url()->stripQueryString( 'page', $page );

			if ( $customStart )
			{
				$date = \IPS\DateTime::ts( $customStart )->setTimezone( $timezone )->setTime( 0, 0, 1 );
			}

			if ( $customEnd )
			{
				$endDate = \IPS\DateTime::ts( $customEnd )->setTimezone( $timezone )->setTime( 23, 59, 59 );
			}
		}

0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 11:57

Да вроде всё супер, единственное, когда идешь по пагинации, затем выбираешь дату -> url такой: controller=games&page=3&time=week

Затем нажимаешь на пагинацию, url такой: controller=games&time=week&page=4

Местами меняется, как это пофиксить? не могу найти (
0

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

 
 
  • Advanced
  • ***
  • Insert nick to fast reply form
  • Quote selected text to fast reply form
  • Группа: Пользователи
  • Сообщений: 342
  • Регистрация: 16-Январь 18
  • Репутация: 1
  • IPB version:4.1.x
 

Отправлено 02 Ноябрь 2018 - 12:13

Еще бы AJAX подрубить сюда, и в принципе готово. Сегодня буду еще категории добавлять в фильтр.
0

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


  • 2 Страниц +
  • 1
  • 2


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

  

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-2018 IPBSkins.ru Team
При копировании материалов с сайта
прямая ссылка на источник обязательна