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

Научите передавать данные между функциями

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

Здравствуйте.

 

У меня есть две функции:

 

Основная (лишний код удалил) :

 

   public function getGamelist($ActiveGamesWidgetType, $ActiveGamesWidgetBots, $ActiveGamesWidgetSortBy, $ActiveGamesWidgetPagination, $ActiveGamesWidgetPerPage, $uniqueKey)
   {
       $where = array();
       $botIds = array();
       $ids = array();

       // Фильтр по botid

       if ( isset( \IPS\Request::i()->botId ) )
       {
           $ids = explode( ',', \IPS\Request::i()->botId );
       }

       else if ( isset( \IPS\Request::i()->cookie['runningGames_botIds'] ) )
       {
           $ids = explode( ',', \IPS\Request::i()->cookie['runningGames_botIds'] );
       }

       if ( isset( $ActiveGamesWidgetBots ) AND (!isset( \IPS\Request::i()->botId ) AND !isset( \IPS\Request::i()->cookie['runningGames_botIds'] ) ) )
       {
           $ids = explode( ',', $ActiveGamesWidgetBots );
       }

       if ( \count( $ids ) )
       {
           foreach( $ids as $id )
           {
               $botIds = array_filter( $ids, 'intval' );
           }

           if ( \count( $botIds ) )
           {
               $where[] = array( \IPS\Db::i()->in( 'botid', array_filter( $botIds ) ) );
           }
       }
   }

 

Это передается из настроек виджета:

 

public function getGamelist($ActiveGamesWidgetType, $ActiveGamesWidgetBots, $ActiveGamesWidgetSortBy, $ActiveGamesWidgetPagination, $ActiveGamesWidgetPerPage, $uniqueKey)

 

ВТОРАЯ ФУНКЦИЯ СО СТАТИСТИКОЙ:

 

   public function getStats()
   {

       $where = array();
       $botIds = array();
       $ids = array();

       // Фильтр по botid
       if ( isset( \IPS\Request::i()->botId ) )
       {
           $ids = explode( ',', \IPS\Request::i()->botId );
       }
       else if ( isset( \IPS\Request::i()->cookie['runningGames_botIds'] ) )
       {
           $ids = explode( ',', \IPS\Request::i()->cookie['runningGames_botIds'] );
       }

       if ( \count( $ids ) )
       {
           foreach( $ids as $id )
           {
               $botIds = array_filter( $ids, 'intval' );
           }

           if ( \count( $botIds ) )
           {
               $where[] = array( \IPS\Db::i()->in( 'botid', array_filter( $botIds ) ) );
           }
       }

       $cg = new \IPS\Patterns\ActiveRecordIterator(\IPS\Db::i('wc3')->select('*', static::$databaseTable, $where, 'lobby DESC'), '\IPS\wc3\ActiveGames\ActiveGames');
       $lobbies = $games = $players = 0;
       foreach($cg as $g) {
           if($g->getLobby()) {
               $lobbies++;
           } else {
               $games++;
           }

           $players += $g->getSlotstaken();
           foreach( static::getUsers($g->getUsernames()) as $realm )
           {
               isset( $realms[ $realm['realm'] ] ) ? $realms[ $realm['realm'] ]++ : $realms[ $realm['realm'] ] = 1;
           }
       }
       return [
           'lobbies' => $lobbies,
           'games' => $games,
           'players' => $players,
           'realms' => isset( $realms ) ? $realms : ''
       ];
   }

 

Этот код в статистике дублируется:

 

       $botIds = array();
       $ids = array();

       // Фильтр по botid
       if ( isset( \IPS\Request::i()->botId ) )
       {
           $ids = explode( ',', \IPS\Request::i()->botId );
       }
       else if ( isset( \IPS\Request::i()->cookie['runningGames_botIds'] ) )
       {
           $ids = explode( ',', \IPS\Request::i()->cookie['runningGames_botIds'] );
       }

       if ( \count( $ids ) )
       {
           foreach( $ids as $id )
           {
               $botIds = array_filter( $ids, 'intval' );
           }

           if ( \count( $botIds ) )
           {
               $where[] = array( \IPS\Db::i()->in( 'botid', array_filter( $botIds ) ) );
           }
       }

 

Как правильно передать значения из первой функции во вторую, чтобы не дублировать код?

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


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

Я думаю тут уместо написать отдельную функцию которая вернет массив where.

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


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

Потом вызывать в этих функциях с помощью $this?

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


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

Абсолютли.

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


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

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

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

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

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

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

Войти

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

Войти сейчас

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

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

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