Научите передавать данные между функциями - Дизайн и модификация Invision Power Board

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

 

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

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

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

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

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

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

Отправлено 24 Февраль 2019 - 19:14

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

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

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

    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 ) ) );
            }
        }


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

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

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

Отправлено 24 Февраль 2019 - 22:27

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

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

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

Отправлено 25 Февраль 2019 - 03:01

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

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

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

Отправлено 25 Февраль 2019 - 10:19

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