Conheça as melhorias da versão 8.0, 8.1, 8.2!
Clique aqui para saber mais
Ajuda para utilizar highcharts com banco de dados !!!! Pessoal boa noite, uma ajuda por favor. Estou tentando utilizar highcharts para gerar graficos e não estou conseguindo. Eu preciso de um exemplo lendo banco de dados. Outro detalhe, gostaria de ter uns 2 ou 3 botoes no grafico onde possa mudar o tipo grafico, de pizza para barras, para radar, etc. sem sair do formulario.. Obrigado....
NP
Ajuda para utilizar highcharts com banco de dados !!!!  
Pessoal boa noite, uma ajuda por favor.
Estou tentando utilizar highcharts para gerar graficos e não estou conseguindo.
Eu preciso de um exemplo lendo banco de dados.
Outro detalhe, gostaria de ter uns 2 ou 3 botoes no grafico onde possa mudar o tipo grafico, de pizza para barras, para radar, etc. sem sair do formulario..
Obrigado.

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (5)


NR

Nilton, você vai ter que ser mais específico. Em qual parte você está tendo dificuldades?
NP

Nataniel bom dia, minha dificuldade esta na parte do Javascript. Não consigo fazer executar o javascript, a parte da query no banco esta rodando. E ao clicar nos botoes, não muda o tipo do grafico.

Segue abaixo o codigo.

 
  1. <?php
  2. class Grafico_sindrome extends TPage {
  3. function __construct()
  4. {
  5. parent::__construct();
  6. // creates the customer form and add a table inside it
  7. $this->form = new TQuickForm('form');
  8. $this->form->class = 'tform';
  9. // loads the galleria javascript library
  10. TPage::include_js('app/lib/jquery/js/Highcharts-4.1.5/js/highcharts.js');
  11. TPage::include_js('app/lib/jquery/js/Highcharts-4.1.5/js/highcharts-3d.js');
  12. TPage::include_js('app/lib/jquery/js/Highcharts-4.1.5/js/highcharts-more.js');
  13. TPage::include_js('app/lib/jquery/js/Highcharts-4.1.5/js/modules/exporting.js');
  14. // creates a table
  15. $table = new TTable;
  16. $div = new TElement('div');
  17. $div->id = 'container';
  18. $div->style = "width:800px;height:500px";
  19. $table->addRow()->addCell($div);
  20. //--------------------------------------------------------------------------------//
  21. $div1 = new TElement('div');
  22. $div1->id = 'plain';
  23. $div1->style = "width:800px;height:500px";
  24. //--------------------------------------------------------------------------------//
  25. $div2 = new TElement('div');
  26. $div2->id = 'inverted';
  27. $div2->style = "width:800px;height:500px";
  28. //--------------------------------------------------------------------------------//
  29. $div3 = new TElement('div');
  30. $div3->id = 'polar';
  31. $div3->style = "width:800px;height:500px";
  32. //--------------------------------------------------------------------------------//
  33. $table->addRow()->addCell($div);
  34. //--------------------------------------------------------------------------------//
  35. // create an action button
  36. $btplain=new TButton('plain');
  37. $btplain->setAction(new TAction(array($this, 'onInverted')), 'plain');
  38. $btplain->setImage('ico_datagrid.gif');
  39. $btinverted=new TButton('inverted');
  40. $btinverted->setImage('ico_datagrid.gif');
  41. $btinverted->setAction(new TAction(array($this, 'onInverted')), 'inverted');
  42. $btpolar=new TButton('polar');
  43. $btpolar->setAction(new TAction(array($this, 'onInverted')), 'polar');
  44. $btpolar->setImage('ico_datagrid.gif');
  45. $vbox = new TVBox;
  46. $btbarra = new TButton('plain');
  47. $bt2b = new TButton('inverted');
  48. $bt2c = new TButton('polar');
  49. $btbarra->setAction(new TAction(array($this, 'onInverted')), 'plain');
  50. $btbarra->setLabel('plain');
  51. $bt2b->setLabel('inverted');
  52. $bt2c->setLabel('polar');
  53. $btbarra->setImage('fa:save red');
  54. $bt2b->setImage('fa:edit green');
  55. $bt2c->setImage('fa:trash-o blue');
  56. $this->form->setFields(array($btbarra));
  57. $vbox = new TVBox;
  58. $vbox->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  59. $vbox->add($this->form);
  60. parent::add($vbox);
  61. //--------------------------------------------------------------------------------//
  62. parent::add($table);
  63. $this->onGenerator();
  64. }
  65. function onGenerator(){
  66. //==================================================================================//
  67. TTransaction::open('sgp');
  68. // Convert an Active Record into array
  69. $conn = TTransaction::get();
  70. $sql = " SELECT S.descricao as Descricao_Sindrome,
  71. COUNT(P.sindrome_id) as QtdPacientes
  72. FROM paciente P
  73. LEFT JOIN sindrome S
  74. ON P.sindrome_id = S.sindrome_id
  75. WHERE P.status <> 'EX'
  76. GROUP BY S.descricao
  77. ORDER BY COUNT(P.sindrome_id) desc ";
  78. $colunas = $conn->query($sql);
  79. //crio as variaveis
  80. $dados_completo = "";
  81. $dados = "[";
  82. $qtd_dados = "[";
  83. //percorro as colunas e coloco na string
  84. foreach ($colunas as $coluna)
  85. {
  86. $dados_completo = $dados_completo . "['".$coluna[0]."',".$coluna[1].'],';
  87. $dados = $dados . "'". $coluna[0]."',";
  88. $qtd_dados = $qtd_dados .$coluna[1].",";
  89. }
  90. //retiro a ultima virgula
  91. $dados_completo = substr($dados_completo,0,-1);
  92. $dados = substr($dados,0,-1);
  93. $qtd_dados = substr($qtd_dados,0,-1);
  94. $dados = $dados .']';
  95. $qtd_dados = $qtd_dados .']';
  96. //echo "<br> DADOS COMPLETOS => ".$dados_completo;
  97. //echo "<br> DADOS => ".$dados;
  98. //echo "<br> QTD DADOS => ".$qtd_dados;
  99. //==================================================================================//
  100. TTransaction::close();
  101. //==================================================================================//
  102. $script = new TElement('script');
  103. $script->type = 'text/javascript';
  104. $javascript = "
  105. $('#container').highcharts({
  106. chart: {
  107. renderTo: 'container',
  108. type: 'column',
  109. options3d: {
  110. enabled: true,
  111. alpha: 0,
  112. beta: 0,
  113. depth: 20,
  114. viewDistance: 30
  115. }
  116. },
  117. title: {
  118. text: 'Estatistica - Sindromes'
  119. },
  120. subtitle: {
  121. text: 'Quantidade de pacientes por Síndrome'
  122. },
  123. plotOptions: {
  124. column: {
  125. depth: 25
  126. }
  127. },
  128. xAxis: {
  129. type: 'category',
  130. labels: {
  131. rotation: -50,
  132. style: {
  133. fontSize: '13px',
  134. fontFamily: 'Verdana, sans-serif'
  135. }
  136. }
  137. },
  138. yAxis: {
  139. min: 0,
  140. title: {
  141. text: 'Total Pacientes'
  142. }
  143. },
  144. legend: {
  145. enabled: false
  146. },
  147. tooltip: {
  148. pointFormat: '<b>{point.y} pacientes</b>'
  149. },
  150. series: [{
  151. type: 'column',
  152. data: [ ".$dados_completo." ],
  153. showInLegend: false
  154. }]
  155. });
  156. $('#plain').click(function () {
  157. chart.update({
  158. chart: {
  159. inverted: false,
  160. polar: false
  161. },
  162. subtitle: {
  163. text: 'Plain'
  164. }
  165. });
  166. });
  167. $('#inverted').click(function () {
  168. chart.update({
  169. chart: {
  170. inverted: true,
  171. polar: false
  172. },
  173. subtitle: {
  174. text: 'Inverted'
  175. }
  176. });
  177. });
  178. $('#polar').click(function () {
  179. chart.update({
  180. chart: {
  181. inverted: false,
  182. polar: true
  183. },
  184. subtitle: {
  185. text: 'Polar'
  186. }
  187. });
  188. });
  189. ";
  190. $script->add($javascript);
  191. parent::add($script);
  192. }
  193. }
  194. ?>



NR

Vamos por partes.

Copiei o código que passou e apareceu um erro dizendo que a função onInverted não existe.

Criei a função para continuar testando, modifiquei o sql para uma tabela existente em meu banco de dados e... funcionou, o gráfico foi gerado corretamente.

Não testei a parte dos botões porque acho que está faltando a parte do código responsável por isso, pois os botões não estão sendo exibidos na tela.
NP

Nataniel boa noite, ontem eu fiquei tentando ajustar o codigo e a partir do grafico que postei realmente passou a funcionar. Só não avisei antes, porque estou tentando agora fazer estes botões de mudança do tipo grafico funcionar. Mas não consigo. Está dificil.

Estou tentando utilizar este exemplo: www.highcharts.com/demo/chart-update

Admito que estou com dificuldades com os graficos, por exemplo, ontem eu tentei fazer este exemplo funcionar e não dá erro mas nao aparece nada na tela.

O exemplo é este: www.highcharts.com/demo/column-drilldown
Mesmo copiando fielmente o exemplo do site, não aparecia nada.
NR

Nilton, testei o exemplo do chart-update. Parece que a função highcharts está sendo chamada antes do término do carregamento da biblioteca. Resolvi colocando as bibliotecas para carregamento junto com as demais bibliotecas do sistema, no arquivo app/templates/themeX/libraries.html, assim não foi preciso utilizar a função TPage::include_js.

Outra coisa, sugiro separar o html e o js do código php. Veja o exemplo do tutor:
www.adianti.com.br/framework_files/tutor/index.php?class=PieChartVie