Правильное создание компонента

Подскажите как правильно реализовать (Написать) данный код

#1 8 ноября 2014 в 10:40
Добрый день уважаемый инстант и все его пользователи.

Создаю компонент, вроде бы часть функционала реализовал, но понимаю что это сделано на столько коряво. crazy

Поэтому мой вопрос к людям которые много программируют. Я уверен что можно сделать всё намного проще.

Вот смотрите у меня в компоненте идёт плотная связь с API одной игры. Там около 40 урлов на которые делается запрос и для каждого урла от 0 до 4 параметров может передаваться для получения той или иной информации.

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

Некоторые данные постоянны, некоторые динамичны, (некоторые есть смысл запилить в базу данных, некоторые можно использовать напрямую).

Давайте теперь чуть на пальцах покажу.

Например вот кусок кода моего корявого) crazy

  1.  
  2.  
  3. //Добавляем в массив с персонажем информацию о пользователе добавившем персонажа
  4. $charters['userid'] = $user->id;
  5.  
  6. //Зная vCode и keyID мы можем получить информацию characterID и ник персонажа
  7. $url = 'https://api.eveonline.com/account/Characters.xml.aspx?keyID='. $charters['keyid']. '&vCode='. $charters['vcode'];
  8. $xml = simplexml_load_file($url);
  9.  
  10. //Передаём значение characterID в массив для записи в базу данных.
  11. $chardata = (array) $xml->result->rowset->row;
  12. $charters['characterid'] = $chardata['@attributes']['characterID'];
  13. $charters['charname'] = $chardata['@attributes']['name'];
  14.  
  15. //Получаем более подробную информациюо персонаже
  16. $url2 = 'https://api.eveonline.com/Char/CharacterSheet.xml.aspx?keyID='. $charters['keyid']. '&vCode='. $charters['vcode'].'&characterID='. $charters['characterid'];
  17. $xml2 = simplexml_load_file($url2);
  18. $pilotdata = (array) $xml2 -> result;
  19.  
  20. //Получаем аватар пилота
  21. $url2 = 'https://api.eveonline.com/Char/CharacterSheet.xml.aspx?keyID='. $charters['keyid']. '&vCode='. $charters['vcode'].'&characterID='. $charters['characterid'];
  22.  
  23. //Информация которая не изменяется записываем в массив и передаём на запись в базу.
  24. $charters['createdata'] = $pilotdata['DoB'];
  25. $charters['race'] = $pilotdata['race'];
  26. $charters['bloodline'] = $pilotdata['bloodLine'];
  27. $charters['ancestry'] = $pilotdata['ancestry'];
  28. $charters['gender'] = $pilotdata['gender'];
  29. $charters['corporationname'] = $pilotdata['corporationName'];
  30. $charters['corporationid'] = $pilotdata['corporationID'];
  31. $charters['alliancename'] = $pilotdata['allianceName'];
  32. $charters['allianceid'] = $pilotdata['allianceID'];
  33.  
  34. //Запрашиваем у уважаемой евы картинки и так же запихиваем их в масив
  35. $charters['charimg'] = 'http://image.eveonline.com/Character/' . $charters['characterid'] . '_256.jpg';
  36. $charters['corporationimg'] = 'http://image.eveonline.com/Corporation/' . $charters['corporationid'] . '_64.png';
  37. $charters['allianceimg'] = 'http://image.eveonline.com/Alliance/' . $charters['allianceid'] . '_64.png';
  38.  
  39. //Добавляем в масив с данными персонажа информацию о ид группы его корпорации
  40. $group_id = $this->model->getGroupcorp($pilotdata['corporationName']);
  41. $charters['group_id'] = $group_id['id'];
  42.  
  43. //Выполняем сохранения массива в базу данных.
  44. $charterid = $this->model->addCharters($charters);
  45.  
  46. //после сохранения данных делаем редирект на страницу персонажа
  47. $this->redirectToAction('pilot', array($charterid));
  48.  
  49.  
Думаю некоторые люди уже догадались что за игру я имею ввиду. Но вернёмся к вопросу. У меня тут очень коряво как то всё. Это самый корявый кусок.

Тут обращение к 1 урлу на прямую идёт патом полученная информация из него идёт во второй запрос и так далее патом, складываю всё в 1 масив и заливаю в базу. Это всё данные которые не изменяются, но есть ещё те которые постоянно меняются.

Я например понимаю что можно создать где то отдельные 40 функции и патом обращаться к ним передавая нужные параметры в них, но где их создать и как к ним обращаться? Например если в модели, то по логике разработчиков инстанта, модель только для функций работы с базой, а у меня есть данные которые меняются каждую минуту, их заливать в базу нет смысла.

Думаю мой вопрос понятен, как это сделать более логично и главное ПРАВИЛЬНО. хочу чтоб мой первый компонент был правильным. а не как курица лапой)
#2 9 ноября 2014 в 11:22
А пАтом эту игру в бесплатный доступ выложите?
#3 9 ноября 2014 в 11:57
Доротея, ничего общего с самой игрой товарищ не имеет. Речь об этой игре ссылка И выложить её он не может)
#4 9 ноября 2014 в 12:01
Ну я имею ввиду привязку API popcorn
#5 9 ноября 2014 в 12:21
Taurus, можно создать необходимые методы, например, в frontend.php, внутри объявления класса

  1.  
  2. class ваш класс extends cmsFrontend {
  3. public function ваш метод(){
  4. }
  5. }
  6.  
и обращаться к нему

  1. $this->controller->ваш метод
А вообще рекомендую очень поставить нормальный IDE редактор, и уже в нем смотреть примеры использования и объявления тех или иных методов в стандартных компонентах.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.