Перейти к публикации
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.

Разработка приложения с нуля

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

Здравствуйте. Я начал делать приложение с нуля, у меня есть исходники от другого движка, там методы лучше используются, я всё перенесу просто и будет супер. Мне нужна будет небольшая консультация, со многим я уже разобрался, всё довольно просто.

 

Скажите, возможно ли дампить данные из модуля? вообще информация не выводится. С шаблоном разобрался, скажите как вставить форматирование:

 

{{var_dump($games);exit;}}

 

И сразу вопрос по теме:

 

Это код из другого движка, мне его надо интегрировать в IPS методы.

$lobbies = $this->getDoctrine()
                       ->getRepository(Gamelist::class, 'ghostpp')
                       ->findBy(['lobby' => true]);

 

findBy - я так понимаю, это тот же SELECT?

 

И вот ошибка почему-то: http://prntscr.com/ldta6t

Изменено пользователем TemKa_SD

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

Опубликовано:
findBy - я так понимаю, это тот же SELECT?

Да

И вот ошибка почему-то: http://prntscr.com/ldta6t

 

Потому что в $lobbies у Вас 1 объект, и Вы перебираете его свойства в цикле

Опубликовано:
  • Автор

http://prntscr.com/le8eba

 

Ну я понимаю на что ругается, почему нельзя использовать? что делать?

 

$games = StatsGamelist::constructFromData(\IPS\DB::i('stats')->select('*', StatsGamelist::$databaseTable, (['lobby=?', true])));

 

Весь код: http://prntscr.com/le8ev2

Изменено пользователем TemKa_SD

Опубликовано:
$games = new \IPS\Patterns\ActiveRecordIterator(\IPS\DB::i('stats')->select('*', StatsGamelist::$databaseTable, (['lobby=?', true])), 'StatsGamelist');

Опубликовано:
  • Автор

Для чего последний параметр? Ну т.е идет селект поля, и,з по, StatsGamelist. Там после where вроде идет сортировать по.

 

Ой, это за селектом же, ясно, это для актив рекорд параметр.

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Еще вопрос, а если у меня в классе указан обычный ActiveRecord, конфликта не будет? И еще, не подгрузился класс по его названию, почему?

 

http://prntscr.com/le8lov - здесь понятно, нужно переменную в ISSET добавить, g тоже? И вообще все переменные так делать, которые могут быть не выбраны, и там уже писать условие что делать, если она не выбрана?

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Так. Помогите разобраться с подключением файлов.

 

Активные игры:

Есть API.

Есть модуль.

Есть файл с ActiveRecord.

 

Я не могу сообразить как правильно подключить файл с функциями. В файле API у меня такой код:

 

	public function GETindex()
{
       $gameList = $this->getGamelist();


	return new \IPS\Api\Response( 200, $gameList );
}

   /**
    * GET /wc3/Gamelist
    * Get list of wc3er applications and what can be wc3ed from each application
    *
    * @apiclientonly
    * @apiparam    string  applications    Comma-delimited list of applications to filter by
    * @return      array
    */
   public function getGamelist()
   {
       $lobbies = new \IPS\Patterns\ActiveRecordIterator(\IPS\DB::i()->select('*', \IPS\wc3\Entity\GHostPP\Gamelist::$databaseTable, (['lobby=?', true])), '\IPS\wc3\Entity\GHostPP\Gamelist');

       $mappedContent = [];

       foreach($lobbies as $lobby) {
           $mappedContent[] = [
               'gamename'  => $lobby->getGamename(),
               'slots'     => $lobby->getSlotstotal(),
               'taken'     => $lobby->getSlotstaken(),
               'players'   => $this->getUsers($lobby->getUsernames())
           ];
       }

       return $mappedContent;
   }

   /**
    * Helper function for split user-string to array based return
    * @param string $usernames
    * @return array
    */
   protected function getUsers(string $usernames): array {
       $parts = explode("\t",$usernames);

       $players = [];
       for($i = 0; $i < count($parts) - 1; $i = $i + 4) {
           $players[] = [
               'name'  => $parts[$i],
               'realm' => $parts[$i + 1],
               'ping'  => $parts[$i + 2],
               //'ip'    => $parts[$i + 3]
           ];
       }

       return $players;
   }

Всё выводит, проблем нет. У меня вопрос касательно вывода функций. Если эти функции getGamelist() getUsers() используются еще и в файле с МОДУЛЕМ как их сделать в одном месте?

 

И еще, я хочу подгружать в модуле данные из апи, это можно сделать без авторизации?

Изменено пользователем TemKa_SD

Опубликовано:
Еще вопрос, а если у меня в классе указан обычный ActiveRecord, конфликта не будет? И еще, не подгрузился класс по его названию, почему?

Не понятно

 

http://prntscr.com/le8lov - здесь понятно, нужно переменную в ISSET добавить, g тоже? И вообще все переменные так делать, которые могут быть не выбраны, и там уже писать условие что делать, если она не выбрана?

Да

 

Если эти функции getGamelist() getUsers() используются еще и в файле с МОДУЛЕМ как их сделать в одном месте?

Переместите, например, в \IPS\wc3\Entity\GHostPP\Gamelist

И тогда

    public function GETindex()
   {
       $gameList = new \IPS\wc3\Entity\GHostPP\Gamelist;

       return new \IPS\Api\Response( 200, $gameList->getGamelist() );
   }

Опубликовано:
  • Автор

Спасибо, я сегодня уже реализовал такое, только немного в другом виде.

 

Файл с исходниками: http://prntscr.com/lek32u

API: http://prntscr.com/lek3bn

http://prntscr.com/lek3j0 модуль

 

Еще сегодня разобрался с массивами, что нельзя строку выводить, как разобрать его и т.д. Касательно массивов, мне ведь не нужно выводить для клиентов его разобранным ? Это должно делать приложение клиента?

 

И скажите как правильно var_dump выводить. Я в шаблоне умею, но не до конца, как вывести в нем <pre> ? А если бебажить в модуле, ничего не происходит, пробовал даже переменную которая идет в шаблон в функции manage() всё равно не хочет.

Изменено пользователем TemKa_SD

Опубликовано:
  • Автор

Сюда выпишу чтобы не забыть.

            {{echo "<pre>";}}
           {{var_dump($games);}}
           {{echo "</pre>";}}
           {{exit;}}

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

Сейчас на странице 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.