Olá pessoal, tudo certo?
Hoje tive minha primeira experiência com o HTML 5 e posso dizer que fiquei realmente bastante satisfeito com o resultado de tudo isso.
Até então, em um sistema que desenvolví na empresa, os dados eram exibidos em forma de gráfico utilizando a biblioteca em PHP JPgraph, que por sinal muito boa, entretanto não possuia interatividade com o usuário e pecava um pouco na aparência, foi quando comecei a procurar por outras soluções, que localizei a biblioteca baseada no elemento Canvas, utilizando HTML 5, chamada RGraph. Lí a documentação, gostei do que ví, entretanto minha necessidade era trazer estes dados do banco, e com isto começa nosso post.
Utilizando gráfico em HTML5 com dados dinâmicos via PHP e MySQL!
Obs: Precisava de alguns dados para deixar nosso post ainda melhor, então perguntei 4 idades a meus queridos amigos seguidores e eles serão utilizados em nosso teste.
Abaixo a tabela, com os dados:
E agora, vamos começar o nosso processo para trazer estes dados ao gráfico.
Antes, vamos relembrar a estrutura de um documento HTML5:
1 2 3 4 5 6 7 8 | <!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html> |
Como vemos, não mudou muita coisa, certo?
Vamos dividir o post em 3 partes, ok? Primeiramente chamando os arquivos que carregam os métodos do gráfico.
1 2 3 4 5 6 7 8 | <head> <script src="libraries/RGraph.common.core.js" ></script> <script src="libraries/RGraph.common.annotate.js" ></script> <script src="libraries/RGraph.common.context.js" ></script> <script src="libraries/RGraph.common.tooltips.js" ></script> <script src="libraries/RGraph.common.resizing.js" ></script> <script src="libraries/RGraph.bar.js" ></script> </head> |
Não esqueça de colocar no diretório a pasta libraries com os scripts dentro.
Em seguida, vamos trazer do banco nossos dados utilizando o php:
1 2 3 4 5 6 7 8 9 10 11 | $myQuery = "SELECT twitter, idade FROM exemplo_2"; $consultar = mysql_query($myQuery); $i = 1; while($resultado = mysql_fetch_array($consultar)){ $idade[$i] = $resultado['idade']; $i++; } $dadosIdades = join(",", array($idade[1],$idade[2],$idade[3],$idade[4],$idade[5])); $dadosIdades = "[$dadosIdades]"; |
Agora vamos descrever todo este procedimento acima:
Primeiramente realizamos uma query normal e trazemos os dados de cada pessoa, incluindo-os nas posições de uma variável chamada idade.
Logo após, unimos todos estes dados e formamos um array só, já com as posições separadas por vírgula, e em seguida colocamos este array entre “[]”.
Feitos isso, será necessário trazer estes dados para o JavaScript, e agora?
Calma calma, não priemos cânico (Chapolin sempre, rs)
Utilizando PHP, vamos realizar esta tarefa:
1 2 3 4 5 6 7 8 | echo "<script>" . "\n"; echo "var dadosIdades = $dadosIdades" . "\n"; echo "var idadevilourenco = $idade[1];"; echo "var idadembrena = $idade[2];"; echo "var idadefausto = $idade[3];"; echo "var idadegenes = $idade[4];"; echo "var idadeandre = $idade[5];"; echo "</script>" . "\n"; |
Veja só, coloquei o meu array que estava em PHP na variável “dadosIdades” agora em JavaScript e cada idade de seus respectivos donos em uma variável diferente.
Ok, quase pronto, agora vamos criar nosso gráfico.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <script> window.onload = function () { var meuGraficoIdades = new RGraph.Bar('meuCanvasGraficoIdades', dadosIdades); meuGraficoIdades.Set('chart.background.barcolor1', 'white'); meuGraficoIdades.Set('chart.background.barcolor2', 'white'); meuGraficoIdades.Set('chart.title', 'Exemplo Idades - www.vilourenco.com.br'); meuGraficoIdades.Set('chart.title.vpos', 0.6); meuGraficoIdades.Set('chart.labels', ['@vilourenco', '@monteirobrena', '@g0nc1n', '@webgenes', '@andredmolin']); meuGraficoIdades.Set('chart.tooltips', ['@vilourenco tem ' + idadevilourenco + ' anos', '@monteirobrena tem ' + idadembrena + ' anos', '@g0nc1n tem ' + idadefausto + ' anos', '@webgenes tem ' + idadegenes + ' anos', '@andredmolin tem ' + idadeandre + ' anos']); meuGraficoIdades.Set('chart.text.angle', 45); meuGraficoIdades.Set('chart.gutter', 35); meuGraficoIdades.Set('chart.shadow', true); meuGraficoIdades.Set('chart.shadow.blur', 5); meuGraficoIdades.Set('chart.shadow.color', '#aaa'); meuGraficoIdades.Set('chart.shadow.offsety', -3); meuGraficoIdades.Set('chart.colors', ['#00CED1']); meuGraficoIdades.Set('chart.key.position', 'gutter'); meuGraficoIdades.Set('chart.text.size', 10); meuGraficoIdades.Set('chart.text.font', 'Georgia'); meuGraficoIdades.Set('chart.text.angle', 0); meuGraficoIdades.Set('chart.grouping', 'stacked'); meuGraficoIdades.Set('chart.strokecolor', 'rgba(0,0,0,0)'); meuGraficoIdades.Draw(); } </script> |
Notem que no início, eu instancio minha variável meuGraficoIdade, que passa a herdar as propriedades da classe RGraph.Bar.
1 | var meuGraficoIdades = new RGraph.Bar('meuCanvasGraficoIdades', dadosIdades); |
O que eu fiz nesta linha?
Conforme dito, foi instanciada a variável, e em seguida eu passo como parâmetro o id do meu elemento Canvas (falaremos disto mais abaixo) onde será abrigado meu gráfico, e passo o array com os dados das idades, que foram transferidos do php para o javascript, lembra? (Explicado acima)
Ok, olhando com carinho, é possível perceber que você consegue customizar o gráfico inteiro.
Neste exemplo, utilizei apenas as propriedades:
chart.title – Para alterar o título do gráfico.
chart.labels – Para inserir o ‘nome’ das barras.
chart.tooltips – Para inserir a legenda de cada barra.
chart.colors – Alterar a cor do gráfico.
chart.text.angle – Alterar o ângulo do texto dos ‘nomes’ das barras.
Lembra-se que separei a idade de cada dono e inserí no JavaScript? Pois bem, eles servirão para informar a idade de cada um quando clicado sobre as barras, são os famosos tooltips!
Olhe aonde eu as utilizei:
1 | meuGraficoIdades.Set('chart.tooltips', ['@vilourenco tem ' + idadevilourenco + ' anos', '@monteirobrena tem ' + idadembrena + ' anos', '@g0nc1n tem ' + idadefausto + ' anos', '@webgenes tem ' + idadegenes + ' anos', '@andredmolin tem ' + idadeandre + ' anos']); |
Ok, agora, voltando a parte de html, vamos inserir o elemento canvas, atribuí-lo um id para que seja reconhecido pelo script JavaScript e que seja desenhado nosso gráfico.
1 2 3 | <div style="width: 450px;"> <canvas id="meuCanvasGraficoIdades" width="700" height="350">[No canvas support]</canvas> </div> |
Relendo o script:
Este mesmo id do Canvas, foi informado na primeira linha do script responsável por montar o gráfico, ou seja, informando o local em que será desenhado.
E temos a frase “No canvas support”, que entrará em campo caso seu navegador ainda não esteja apto a utilizar HTML5.
Veja aqui o resultado.
Obs: Clique nas barras para ver os tooltips.
Bom pessoal, espero que tenham gostado do post, darei início a vários posts falando sobre esta maravilha que é o HTML 5 e ensinando sobre novos tipos de gráficos.
Lembrando que, eu de forma alguma estou contra ou desmerecendo o nosso querido e velho Flash, mas, como diria @vedovelli: “Tenho que estar atento a tecnologia que pagará minhas contas”.
E se você gostou, detestou, amou, adorou, deixeu seu feedback, eu prezo por um post que seja agradável de ler e entender, e sua ajuda contribuirá para essa constante melhora.
Um grande abraço e boa semana.