Como exibir 2 ou mais graficos na mesma tela ??? Boa tarde a todos, Gostaria de saber se tem como exibir dois gráficos diferentes na mesma tela, pois cria-los só aparece um e tenho o seguinte erro do console no navegador. Uncaught Error: Google Charts loader.js can only be loaded once. Alguem já passou por isso e como resolveu ? Desde já agradeço Jones ...
JL
Como exibir 2 ou mais graficos na mesma tela ???  
Boa tarde a todos,

Gostaria de saber se tem como exibir dois gráficos diferentes na mesma tela, pois cria-los só aparece um e tenho o seguinte erro do console no navegador.

Uncaught Error: Google Charts loader.js can only be loaded once.

Alguem já passou por isso e como resolveu ?

Desde já agradeço

Jones



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 (8)


NR

Jones, verifique o link abaixo:
https://developers.google.com/chart/interactive/docs/basic_multiple_charts

Umas das maneiras seria criar funções diferentes para cada gráfico e chamar a função setOnLoadCallback para cada uma delas. Ex:
... google.charts.setOnLoadCallback(drawGrafico1); google.charts.setOnLoadCallback(drawGrafico2); function drawGrafico1() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Topping'); ... } function drawGrafico2() { var data = new google.visualization.DataTable(); data.addColumn('string', 'Topping'); ... }
JL

Obrigado Nataniel , vou tentar fazer dessa forma :)
MS

Olá! Eu precisei fazer isso também, pois montei um dashboard no formulário inicial da aplicação e funcionou perfeitamente com 4 gráficos e alguns grids.
Porém, utilizei as classes nativas do Adianti 4 que encontram-se na pasta app/resourses. Mas é necessário alterar os packages que você irá utilizar caso a página possuir gráficos de diferentes tipos. Ex: google.charts.load('current', {'packages':['bar', 'corechart', 'line']});
MS

Mailson da Silva

Você tem disponibilizar o exemplo da tela dashboard, pra eu ter uma ideia de como montar uma tela desse tipo.

Desde já gradeço
JA

também gostaria de saber como foi feito.
IV

Não compreendi bem como faço para exibir dois ou mais graficos, tentei assim mas só é exibido o primeiro grafico.
Alguma dica galera?

 
  1. <?php
  2. function __construct()
  3. {
  4. parent::__construct();
  5. $html = new THtmlRenderer('app/resources/google_pie_chart.html');
  6. $data = array();
  7. $data[] = [ 'Orçamento', 'Value' ];
  8. $data[] = [ 'Pago', 73.8 ];
  9. $data[] = [ 'Saldo', 27 ];
  10. $panel = new TPanelGroup('Orçamento');
  11. $panel->add($html);
  12. // replace the main section variables
  13. $html->enableSection('main', array('data' => json_encode($data),
  14. 'width' => '100%',
  15. 'height' => '300px',
  16. 'title' => 'Pagamentos',
  17. 'ytitle' => 'Accesses',
  18. 'xtitle' => 'Day'));
  19. // add the template to the page
  20. $container = new TVBox;
  21. $container->style = 'width: 60%';
  22. $container->add(TXMLBreadCrumb::create(['Gráficos']));
  23. $container->add($panel);
  24. // GRAFICO DOIS
  25. $html1 = new THtmlRenderer('app/resources/google_line_chart.html');
  26. $data1 = array();
  27. $data1[] = [ 'Orçamento', 'Value' ];
  28. $data1[] = [ 'Pago', 73 ];
  29. $data1[] = [ 'Saldo', 27 ];
  30. $panel1 = new TPanelGroup('Orçamento');
  31. $panel1->add($html1);
  32. // replace the main section variables
  33. $html1->enableSection('main', array('data' => json_encode($data1),
  34. 'width' => '100%',
  35. 'height' => '300px',
  36. 'title' => 'Pagamentos',
  37. 'ytitle' => 'Accesses',
  38. 'xtitle' => 'Day'));
  39. // add the template to the page
  40. $container1 = new TVBox;
  41. $container1->style = 'width: 60%';
  42. $container1->add($panel1);
  43. parent::add($container);
  44. parent::add($container1);
  45. }
  46. ?>

MS

Oi Iran. O problema no seu código é que você está utilizando a seção 'main', a função 'drawVisualization' e o div 'chart_div' para todos os gráficos. Isso está fixado nos 'google_xxx_chart.html' dos 'resources'. Para cada gráfico você deve mudar esses três nome. Ex:

 
  1. <?php
  2. //->Alimentando os dados é normal
  3. $html = new \Adianti\Widget\Template\THtmlRenderer('app/resources/google_pie_chart.html');
  4. $data = array();
  5. $data[] = ['Situação', 'Quantidade'];
  6. foreach ($situacoes as $key => $value) {
  7. $data[] = [$key, $value];
  8. }
  9. //-
  10. //->Ao invés de 'main', use um nome de seção diferente para cada gráfico
  11. $html->enableSection('secaoPedidosPorSitChart', array('data' => json_encode($data),
  12. 'width' => '100%',
  13. 'height' => '300px',
  14. 'title' => '',
  15. 'ytitle' => 'Situação',
  16. 'xtitle' => 'Quantidade'));
  17. //->Tem que substituir alguns nomes que devem ser únicos, diferentes para cada gráfico
  18. $html->template = str_replace("drawVisualization", "drawPedidosPorSitChart", $html->template); //A função javascript também tem que ser única
  19. $html->template = str_replace("chart_div", "chartPedidosPorSitChart_div", $html->template); //O div também deve ser único
  20. $html->template = str_replace("main", "secaoPedidosPorSitChart", $html->template); //Substitua o nome de seção padrão para o do gráfico atual conforme utilizado no 'enableSection' logo acima
  21. ?>


Você também tem que acertar a linha nos html com os tipos de gráficos que irá utilizar. Ex:
google.charts.load('current', {'packages':['bar', 'corechart', 'line']})


Você também pode adicionar uma variável e substituir no código php. Ex:
google.charts.load('current', {'packages':[{$packages}]});

e então:
 
  1. <?php
  2. $html->enableSection('secaoPedidosPorSitChart', array('data' => json_encode($data),
  3. 'width' => '100%',
  4. 'height' => '300px',
  5. 'packages' => $uteis->getGraPackages(), //Aqui retorna os packages que vou utilizar na dash
  6. 'title' => '',
  7. 'ytitle' => 'Situação',
  8. 'xtitle' => 'Quantidade'));
  9. ?>

RS

Boa noite, Não entendi! Podeira colocar um exemplo