Gráfico de amstock dentro de Drupal

  • 9 Nov 2011
  • Drupal, php snippets

amstock (http://www.amcharts.com/stock/) es una librería en flash muy práctica a la hora de graficar cualquier cosa referida a las finanzas o al mercado bursatil.. o al de divisas. Es un subproducto de la gente de amCharts que además tiene gráficos de tortas, lineas y otros tipos que no nos interesan para nada en este momento.

La metodología para alcanzar la meta es casi simple. Consiste en crear una vista o view que nos permita generar una salida csv que va a ser la que amstock va a graficar. Después, basta crear un artículo o node con un poco de código js y un poco de php. La parte de php sirve principalmente para pasar distintas url de la salida csv y poder así reutilizar el mismo node para distintos propósitos.

Antes de codear, hay que bajar la librería desde este link. Descomprimir y copiar la carpeta amstock dentro del theme que estemos utilizando. Por ejemplo, quedaría así: sites/all/themes/tu_tema/amstock

Imaginando que ya tenemos la salida csv que no voy a explicarme ahora, pasamos directamente al código del nuevo artículo... algo así:

<div id="flashcontent">
    <strong>You need to upgrade your Flash Player</strong>
  </div>

<?php
  global $base_url;
  drupal_add_js(path_to_theme()."/amstock/swfobject.js");
  $theme_path = $base_url."/".path_to_theme();
  $data_url = base64_encode($base_url."/rates/xml?out=csv");

  $amchart = <<<EOF

  var so = new SWFObject("{$theme_path}/amstock/amstock.swf", "amstock", "100%", "500", "8", "#FFFFFF");
  so.addVariable("path", "{$theme_path}/amstock/");
  so.addVariable("path", "");
  so.addVariable("settings_file", encodeURIComponent("{$theme_path}/amstock/amstock_settings.php?data={$data_url}"));
  so.addVariable("preloader_color", "#999999");
  so.write("flashcontent");

EOF;

print "<script type=\"text/javascript\">{$amchart}</script>";

?>

En vez de hardcodear /rates/xml?out=csv lo bueno sería pasarlo directamente desde la url y después tomarla con $_REQUEST

Salud