Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

como integrar laravel 4 y librerias para graficar series de tiempo

Estas en el tema de como integrar laravel 4 y librerias para graficar series de tiempo en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Actualmente estoy trabajando con Laravel 4 y necesito graficar 1000 registros (series de tiempo) que se encuentran en una base de datos, para este fin ...
  #1 (permalink)  
Antiguo 29/07/2013, 07:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
como integrar laravel 4 y librerias para graficar series de tiempo

Actualmente estoy trabajando con Laravel 4 y necesito graficar 1000 registros (series de tiempo) que se encuentran en una base de datos, para este fin tengo 2 caminos dos caminos:

1. graficar al lado del servidor utilizando JpGraph
2. graficar al lado del cliente con las librerias de jquery Highcharts js

es aquí donde tengo mi problema como integro estas librerías para graficar , osea para seguir el MVC
  #2 (permalink)  
Antiguo 08/08/2013, 22:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

amigos este es mi código para generar la gráfica, estoy utilizando jpgraph

Código PHP:
Ver original
  1. require_once ('jpgraph/jpgraph.php');
  2. require_once ('jpgraph/jpgraph_line.php');
  3.  
  4. $usuario = 'postgres';
  5. $contrasenia = '******';
  6.    
  7.             try {
  8.                 $db = new PDO('pgsql:host=localhost;dbname=meteo',$usuario,$contrasenia);
  9.                 }catch(PDOException $e) {
  10.                 //echo $e->getMessage();
  11.                 echo "Usuario y Clave Invalidas";
  12.                 throw new Exception("Usuario y Clave Invalidas", 0, $e);
  13.                 }
  14.  
  15.  
  16. $consulta = $db->prepare("SELECT * FROM anemometro");
  17. $consulta->execute();
  18.  
  19. while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  20.         {
  21.           $xdata[] = substr($fila['hora'], 0, -3);
  22.           $ydata[] = $fila['temperatura'];
  23.         }
  24.  
  25. $graph = new Graph(800,250,'auto');
  26. $graph->SetScale('linlin');
  27. $graph->SetMargin(40,40,30,130);
  28. $graph->title->Set('Temperatutra');
  29. $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  30. $graph->xaxis->SetPos('min');
  31. $graph->xaxis->SetLabelAngle(0);
  32. $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  33. $graph->xaxis->SetTitle("Tiempo",'center');
  34. $graph->xaxis->SetTickSide(SIDE_DOWN);
  35. $graph->xaxis->SetTickLabels($xdata);
  36. $graph->xgrid->Show();
  37. $p1 = new LinePlot($ydata);
  38. $p1->SetColor('teal');
  39. $graph->Add($p1);
  40. $graph->Stroke();

ahora bien como integro este código en laravel ?

mis dudas:

1. donde debo de colocar la carpeta que contiene todos los archivos de la libreria jpgraph.php y donde los require?
Código PHP:
Ver original
  1. require_once ('jpgraph/jpgraph.php');
  2. require_once ('jpgraph/jpgraph_line.php');

2. donde coloco la parte donde se construye la grafica?
Código PHP:
Ver original
  1. $graph = new Graph(800,250,'auto');
  2. $graph->SetScale('linlin');
  3. $graph->SetMargin(40,40,30,130);
  4. $graph->title->Set('Temperatutra');
  5. $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  6. $graph->xaxis->SetPos('min');
  7. $graph->xaxis->SetLabelAngle(0);
  8. $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  9. $graph->xaxis->SetTitle("Tiempo",'center');
  10. $graph->xaxis->SetTickSide(SIDE_DOWN);
  11. $graph->xaxis->SetTickLabels($xdata);
  12. $graph->xgrid->Show();
  13. $p1 = new LinePlot($ydata);
  14. $p1->SetColor('teal');
  15. $graph->Add($p1);
  16. $graph->Stroke();
  #3 (permalink)  
Antiguo 09/08/2013, 04:44
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

Teniendo en cuenta que la librería que mencionas esta composer bastaría con algo así:

Código BASH:
Ver original
  1. composer require jpgraph/jpgraph:dev-master

Sobre donde debería ir el código, depende de como trabajes, pero mínimo debería estar envuelto en un service al que invocas desde un controller(en tu lugar seguramente utilizaría service + builder)

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #4 (permalink)  
Antiguo 09/08/2013, 07:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

masterpuppet gracias por responder, te comento que apenas inicio con laravel.

En consola escribi composer require jpgraph/jpgraph:dev-master

Código BASH:
Ver original
  1. # composer require jpgraph/jpgraph:dev-master
  2. composer.json has been updated
  3. Loading composer repositories with package information
  4. Updating dependencies (including require-dev)
  5.   - Installing jpgraph/jpgraph (dev-master ad26df5)
  6.     Cloning ad26df5941e847cf1255aecd2011ce16207304cf
  7.  
  8. Writing lock file
  9. Generating autoload files
  10. Generating optimized class loader
  11. Compiling common classes

y comprobe
Código BASH:
Ver original
  1. [root@Manizales-20 jpgraph]# ls
  2. composer.json  lib  README.md
  3. [root@Manizales-20 jpgraph]# pwd
  4. /var/www/html/meteo/vendor/jpgraph/jpgraph



osea que hasta el momento ya tendría la librería osea que como la empiezo a utilizar o a invocar, por que cuando no se utiliza un framework seria asi

Código PHP:
Ver original
  1. $graph = new Graph(800,250,'auto');
  2. $graph->SetScale('linlin');
  3. $graph->SetMargin(40,40,30,130);
  4. $graph->title->Set('Temperatutra');
  5. $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  6. $graph->xaxis->SetPos('min');
  7. $graph->xaxis->SetLabelAngle(0);
  8. $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  9. $graph->xaxis->SetTitle("Tiempo",'center');
  10. $graph->xaxis->SetTickSide(SIDE_DOWN);
  11. $graph->xaxis->SetTickLabels($xdata);
  12. $graph->xgrid->Show();
  13. $p1 = new LinePlot($ydata);
  14. $p1->SetColor('teal');
  15. $graph->Add($p1);
  16. $graph->Stroke();

Última edición por Montes28; 09/08/2013 a las 07:37
  #5 (permalink)  
Antiguo 09/08/2013, 21:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

No se como funciona exactamente pero creo que deberia ser algo asi:

Código PHP:
Ver original
  1. use JpGraph\JpGraph;
  2. ...
  3. JpGraph::module('line');
  4. $graph = new Graph(800,250,'auto');
  5. ...

Saludos.
__________________
http://es.phptherightway.com/
thats us riders :)
  #6 (permalink)  
Antiguo 10/08/2013, 01:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

masterpuppet gracias por responder

el codigo que me indicas en que parte tendria que ponerlo, en la vista? route?
  #7 (permalink)  
Antiguo 11/08/2013, 05:30
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

En un controlador.
  #8 (permalink)  
Antiguo 11/08/2013, 23:47
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder,

No logro crear la grafica esto es lo que hecho

cree el controlador
Código BASH:
Ver original
  1. # php artisan controller:make GraficasController

y en el controlador
Código PHP:
Ver original
  1. class GraficasController extends \BaseController {
  2.  
  3.     /**
  4.      * Display a listing of the resource.
  5.      *
  6.      * @return Response
  7.      */
  8.      
  9.      public function graficar()
  10.     {
  11.         $graph = new Graph(800,250,'auto');
  12.         $graph->SetScale('linlin');
  13.         $graph->SetMargin(40,40,30,130);
  14.         $graph->title->Set('Temperatutra');
  15.         $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  16.         $graph->xaxis->SetPos('min');
  17.         $graph->xaxis->SetLabelAngle(0);
  18.         $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  19.         $graph->xaxis->SetTitle("Tiempo",'center');
  20.         $graph->xaxis->SetTickSide(SIDE_DOWN);
  21.         $graph->xaxis->SetTickLabels($xdata);
  22.         $graph->xgrid->Show();
  23.         $p1 = new LinePlot($ydata);
  24.         $p1->SetColor('teal');
  25.         $graph->Add($p1);
  26.         $graph->Stroke();
  27.     }

pero no me funciona

Última edición por Montes28; 11/08/2013 a las 23:52
  #9 (permalink)  
Antiguo 12/08/2013, 02:55
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

Lo más sencillo sería:

Código PHP:

//routes.php

get("la-grafica""GraficaController@pintarGrafica");


//controllers/GraficaController.php

use JpGraph/JpGraph/// Poner barra al reves!!

class GraficaController extends BaseController
{
     public function 
pintarGrafica() {
          
JpGraph::module('line');
          
$graph = new Graph(800,250,'auto');
          
// ........
     
}

  #10 (permalink)  
Antiguo 12/08/2013, 19:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder hice lo que me indicaste pero no me funciona , que estoy haciendo mal?

obtengo este error

Cita:
Class GraficaController does not exist

en el controlador GraficaController.php
Código PHP:
Ver original
  1. use JpGraph\JpGraph;
  2.  
  3. class GraficasController extends \BaseController {
  4.  
  5.     /**
  6.      * Display a listing of the resource.
  7.      *
  8.      * @return Response
  9.      */
  10.      
  11.      
  12.      
  13.      
  14.      
  15.     public function pintarGrafica() {
  16.        
  17.         JpGraph::module('line');
  18.         $graph = new Graph(800,250,'auto');
  19.         $graph->SetScale('linlin');
  20.         $graph->SetMargin(40,40,30,130);
  21.         $graph->title->Set('Temperatutra');
  22.         $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  23.         $graph->xaxis->SetPos('min');
  24.         $graph->xaxis->SetLabelAngle(0);
  25.         $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  26.         $graph->xaxis->SetTitle("Tiempo",'center');
  27.         $graph->xaxis->SetTickSide(SIDE_DOWN);
  28.         $graph->xaxis->SetTickLabels($xdata);
  29.         $graph->xgrid->Show();
  30.         $p1 = new LinePlot($ydata);
  31.         $p1->SetColor('teal');
  32.         $graph->Add($p1);
  33.         $graph->Stroke();
  34.     }


en routes.php
Código PHP:
Ver original
  1. Route::get("la-grafica", "GraficaController@pintarGrafica");


tengo estas preguntas, en un archivo php me conecto a una base de datos y guardo el resultado de la consulta en dos array (array para el eje x y otro array para el eje y)

este es el codigo

Código PHP:
Ver original
  1. $usuario = 'postgres';
  2. $contrasenia = '*****';
  3.             try {
  4.                 $db = new PDO('pgsql:host=localhost;dbname=meteo',$usuario,$contrasenia);
  5.                 }catch(PDOException $e) {
  6.                 //echo $e->getMessage();
  7.                 echo "Usuario y Clave Invalidas";
  8.                 throw new Exception("Usuario y Clave Invalidas", 0, $e);
  9.                 }
  10.  
  11.  
  12. $consulta = $db->prepare("SELECT * FROM anemometro");
  13. $consulta->execute();
  14.  
  15. while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  16.         {
  17.           $xdata[] = substr($fila['hora'], 0, -3);
  18.           $ydata[] = $fila['temperatura'];
  19.         }  
  20.  
  21.  
  22. // y ahora construyo la grafica
  23. $graph = new Graph(800,250,'auto');
  24. $graph->SetScale('linlin');
  25. $graph->SetMargin(40,40,30,130);
  26. $graph->title->Set('Temperatutra');
  27. $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  28. $graph->xaxis->SetPos('min');
  29. $graph->xaxis->SetLabelAngle(0);
  30. $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  31. $graph->xaxis->SetTitle("Tiempo",'center');
  32. $graph->xaxis->SetTickSide(SIDE_DOWN);
  33. $graph->xaxis->SetTickLabels($xdata);
  34. $graph->xgrid->Show();
  35. $p1 = new LinePlot($ydata);
  36. $p1->SetColor('teal');
  37. $graph->Add($p1);
  38. $graph->Stroke();

para mi la parte de la consulta debo de colocarlo en el route.php?
  #11 (permalink)  
Antiguo 13/08/2013, 01:11
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

Si la clase se llama GraficasController entonces tienes que tener en el route:

Route::get("la-grafica", "GraficasController@pintarGrafica");


Y respecto a la consulta SQL, puedes ponerlo en un modelo, algo así:

Código PHP:
Ver original
  1. // models/Anemometro.php
  2.  
  3. class Anemometro extends eloquent {
  4.        protected $table = "anemometro";
  5.  
  6.        static function getPrepararDatosGrafica()
  7.        {
  8.              $filas = Anemometro::orderBy('hora')->get();
  9.              $xdata = array();
  10.              $ydata = array();
  11.  
  12.              foreach($filas as $fila) {
  13.                   $xdata[] = substr($fila->hora, 0, -3);
  14.                   $ydata[] = $fila->temperatura;
  15.              }
  16.  
  17.              return array($xdata, $ydata);
  18.        }
  19. }
  20.  
  21. // controllers/graficaController.php
  22.  
  23. class graficaController extends BaseController
  24. {
  25.         function pintarGrafica()
  26.        {
  27.                list($xdata, $ydata) = Anemometro::getPrepararDatosGrafica();
  28.         }
  29. }
  #12 (permalink)  
Antiguo 13/08/2013, 23:32
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder , ya visualizo la grafica pero tengo un problema en la vista necesito mostras la grafica y una tabla con los datos de una consulta.

Sin utilizar Laravel (con código spaghetti) haría lo siguiente

Código PHP:
Ver original
  1. <?
  2. $usuario = 'postgres';
  3. $contrasenia = '***';
  4.    
  5.     try {
  6.         $conexion1 = new PDO('pgsql:host=localhost;dbname=estaciones',$usuario,$contrasenia);
  7.                  }catch(PDOException $e) {
  8.                     echo "Usuario y Clave Invalidas";
  9.                 throw new Exception("Usuario y Clave Invalidas", 0, $e);
  10.                 }
  11.  
  12. $consulta = $db->prepare("consulta sql ");
  13. $consulta->execute();
  14.  
  15. while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  16.     {
  17.         $fila['usu_clave'];
  18.     }
  19.  
  20. //y para incluir la grafica en esta misma pagina (vista)
  21.  
  22. echo  '<img src="grafica.php">';

y en grafica.php
Código PHP:
Ver original
  1. $usuario = 'postgres';
  2. $contrasenia = '***';
  3.    
  4.     try {
  5.         $db = new PDO('pgsql:host=localhost;dbname=meteo',$usuario,$contrasenia);
  6.         }catch(PDOException $e) {
  7.             echo "Usuario y Clave Invalidas";
  8.             throw new Exception("Usuario y Clave Invalidas", 0, $e);
  9.             }
  10.  
  11. $consulta = $db->prepare("SELECT * FROM anemometro");
  12. $consulta->execute();
  13.  
  14.  
  15. while($fila = $consulta->fetch(PDO::FETCH_ASSOC))
  16.         {
  17.           $xdata[] = substr($fila['hora'], 0, -3);
  18.           $ydata[] = $fila['temperatura'];
  19.         }
  20. $graph = new Graph(800,250,'auto');
  21. .....
  22. .....
  23. $p1 = new LinePlot($ydata);
  24. $p1->SetColor('teal');
  25. $graph->Add($p1);

como puedo lograr utilizando el framework laravel para que en la vista blade poder mostrar una consulta como tambien la grafica en un <img src= ?

inclui la grafica asi
Código PHP:
Ver original
  1. '<img src="/meteo/public/la-grafica">';
en una vista blade.php

hasta el momento la grafica la estoy contruyendo asi

GraficasController.php
Código PHP:
Ver original
  1. class GraficasController extends \BaseController {
  2.  
  3. function pintarGrafica()
  4.            
  5.        {
  6.                list($xdata, $ydata) = Anemometro::getPrepararDatosGrafica();
  7.         JpGraph::module('line');
  8.             $graph = new Graph(800,250,'auto');
  9.                $graph->SetScale('linlin');
  10.                $graph->SetMargin(40,40,30,130);
  11.                $graph->title->Set('Temperatutra');
  12.                $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  13.                $graph->xaxis->SetPos('min');
  14.                $graph->xaxis->SetLabelAngle(0);
  15.                $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  16.                $graph->xaxis->SetTitle("Tiempo",'center');
  17.                $graph->xaxis->SetTickSide(SIDE_DOWN);
  18.                $graph->xaxis->SetTickLabels($xdata);
  19.                $graph->xgrid->Show();
  20.                $p1 = new LinePlot($ydata);
  21.                $p1->SetColor('teal');
  22.                $graph->Add($p1);
  23.                $graph->Stroke();
  24.         }
  25. }


Anemometro.php
Código PHP:
Ver original
  1. class Anemometro extends Eloquent {
  2. static function getPrepararDatosGrafica()
  3.        {
  4.              $filas = DB::select('select * from anemometro');
  5.              $xdata = array();
  6.              $ydata = array();
  7.  
  8.              foreach($filas as $fila) {
  9.                   $xdata[] = substr($fila->hora, 0, -3);
  10.                   $ydata[] = $fila->temperatura;
  11.              }
  12.  
  13.              return array($xdata, $ydata);
  14.        }
  15. }


routes.php
Código PHP:
Ver original
  1. Route::get("la-grafica", "GraficasController@pintarGrafica");

Última edición por Montes28; 13/08/2013 a las 23:48
  #13 (permalink)  
Antiguo 14/08/2013, 01:24
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

Creo que es porque Laravel, por defecto, manda unas cabeceras de tipo HTML (o json, según el contenido).

Prueba algo así:

Código PHP:
Ver original
  1. class GraficasController extends \BaseController {
  2.  
  3. function pintarGrafica()
  4. {
  5.             // .....
  6.             $graph->Stroke(_IMG_HANDLER); // Generamos la imagen pero no la volcamos
  7.             $response = Response::make($graph->img->Stream(), 200); // Preparamos la respuesta de laravel con la imagen generada, PERO SIN CABECERAS
  8.             $response->header('Content-type', 'image/jpeg'); // Indicamos a Laravel que cabeceras enviar
  9.             return $response;
  10. });

Y por cierto, en la plantilla de blade puedes poner algo así:

Código PHP:
Ver original
  1. <img src="{{ action('GraficasController@pintarGrafica') }}">

Blade debería ponerte la ruta automáticamente según el routes.php
  #14 (permalink)  
Antiguo 20/08/2013, 21:24
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder me funciono muy bien , pero como puedo mostrar otras dos graficas mas en una misma pagina.

este es el codigo para solo mostrar una grafica

modelo Anemometro.php
Código PHP:
Ver original
  1. static function getPrepararDatosGrafica()
  2.        {
  3.              $filas = DB::select('select * from anemometro');
  4.              $xdata = array();
  5.              $ydata = array();
  6.  
  7.              foreach($filas as $fila) {
  8.                   $xdata[] = substr($fila->hora, 0, -3);
  9.                   $ydata[] = $fila->temperatura;
  10.              }
  11.  
  12.              return array($xdata, $ydata);
  13.        }

Controlador GraficasController.php
Código PHP:
Ver original
  1. function pintarGrafica()
  2.            
  3.        {
  4.                
  5.                list($xdata, $ydata) = Anemometro::getPrepararDatosGrafica();
  6.                JpGraph::module('line');
  7.                $graph = new Graph(820,194,'auto');
  8.                $graph->SetScale('linlin');
  9.                $graph->SetMargin(40,40,20,10);
  10.                $graph->title->Set('Temperatutra');
  11.                $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  12.                $graph->xaxis->SetPos('min');
  13.                $graph->xaxis->SetLabelAngle(0);
  14.                $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  15.                $graph->xaxis->SetTitle("Tiempo",'center');
  16.                $graph->xaxis->SetTickSide(SIDE_DOWN);
  17.                $graph->xaxis->SetTickLabels($xdata);
  18.                $graph->xgrid->Show();
  19.                $p1 = new LinePlot($ydata);
  20.                $p1->SetColor('teal');
  21.                $graph->Add($p1);
  22.                $graph->Stroke(_IMG_HANDLER);
  23.                $response = Response::make($graph->img->Stream(), 200);
  24.                $response->header('Content-type', 'image/jpeg');
  25.                return $response;
  26.         }

vista registros.blade.php
Código PHP:
Ver original
  1. <img src="{{ action('GraficasController@pintarGrafica') }}">
  #15 (permalink)  
Antiguo 21/08/2013, 05:14
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

Pues supongo que la función de la gráfica deberá permitir recibir parámetros para hacer búsquedas distintas:

Código PHP:
Ver original
  1. // routes.php
  2. Route::get("la-grafica/{nombre}", "GraficasController@pintarGrafica");
  3.  
  4.  
  5.  
  6. // GraficasController.php
  7. function pintarGrafica($nombre)
  8. {
  9.   // .... con $nombre, o lo que quieras, hacer búsquedas condicionadas
  10. }
  11.  
  12.  
  13.  
  14. //registros.blade.php
  15. <img src="{{ action('GraficasController@pintarGrafica', array('nombre' => 'grafica-1')) }}">
  16. <img src="{{ action('GraficasController@pintarGrafica', array('nombre' => 'grafica-2')) }}">
  #16 (permalink)  
Antiguo 21/08/2013, 22:16
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder , estoy implementando lo que me indicas pero no me funciona

este es mi codigo:

Modelo Anemometro.php

Código PHP:
Ver original
  1. class Anemometro extends Eloquent {
  2.          
  3.        protected $table = "anenometros";
  4.        public static function getLast()
  5.        {
  6.              return Anemometro::orderBy('id', 'desc')->take(1)->first();
  7.        }               
  8.        static function getPrepararDatosGrafica()
  9.        {
  10.              $filas = DB::select('select * from anemometro');
  11.              $xdata = array();
  12.              $ydata = array();
  13.  
  14.              foreach($filas as $fila) {
  15.                   $xdata[] = substr($fila->hora, 0, -3);
  16.                   $ydata[] = $fila->temperatura;
  17.              }
  18.  
  19.              return array($xdata, $ydata);
  20.        }
  21. }

Controlador GraficasControlador.php

Código PHP:
Ver original
  1. use JpGraph\JpGraph;
  2.  
  3. class GraficasController extends \BaseController {
  4.  
  5.     function pintarGrafica($nombre)
  6.       {
  7.            list($xdata, $ydata) = Anemometro::getPrepararDatosGrafica();
  8.            JpGraph::module('line');
  9.                $graph = new Graph(820,194,'auto');
  10.                $graph->SetScale('linlin');
  11.                $graph->SetMargin(40,40,20,10);
  12.                $graph->title->Set('Temperatutra');
  13.                $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  14.                $graph->xaxis->SetPos('min');
  15.                $graph->xaxis->SetLabelAngle(0);
  16.                $graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  17.                $graph->xaxis->SetTitle("Tiempo",'center');
  18.                $graph->xaxis->SetTickSide(SIDE_DOWN);
  19.                $graph->xaxis->SetTickLabels($xdata);
  20.                $graph->xgrid->Show();
  21.                $p1 = new LinePlot($ydata);
  22.                $p1->SetColor('teal');
  23.                $graph->Add($p1);
  24.                $graph->Stroke(_IMG_HANDLER);
  25.                $response = Response::make($graph->img->Stream(), 200);
  26.                $response->header('Content-type', 'image/jpeg');
  27.                return $response;
  28.        }

en routes.php

Código PHP:
Ver original
  1. Route::get('registro', function()
  2. {
  3.     $registros = DB::table('anemometro')->orderBy('id', 'desc')->take(1)->get();
  4.     return View::make('registros')->with('registros', $registros);
  5. });

vista registros.blade.php
Código PHP:
Ver original
  1. <img src="{{ action('GraficasController@pintarGrafica', array('nombre' => 'grafica-1')) }}">

que estoy haciendo mal?
  #17 (permalink)  
Antiguo 22/08/2013, 03:11
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

En la función:

Código PHP:
Ver original
  1. class GraficasController extends \BaseController {
  2.  
  3.     function pintarGrafica($nombre) {

No estás usando para nada la variable $nombre. Tendrías que usar ese parámetro para preparar datos para una gráfica u otra. Supongo que lo que quieres es pintar dos gráficas distintas, ¿no?

Esquemáticamente, el funcionamiento en laravel de controladores con parámetros puede ser así:

Código PHP:
Ver original
  1. // routes.php
  2. Route::get("usuario/{nombre}", "UsuariosController@getFicha");
  3.  
  4.  
  5. // UsuariosController.php
  6. class UsuariosController extends BaseController {
  7.  function getFicha($nombre)
  8.  {
  9.     // segun el parámetro, cargamos un usuario u otro (o una gráfica u otra)
  10.     $usuario = Usuario::where('nombre', '=', $nombre);
  11.     return $usuario;  
  12.  }
  13. }
  14.  
  15.  
  16. //usuarios.blade.php
  17. <a href="{{ action('UsuariosController@getFicha', array('nombre' => 'pepe')) }}">Ficha de Pepe</a>
  18. <a href="{{ action('UsuariosController@getFicha', array('nombre' => 'luis')) }}">Ficha de Luis</a>

Como ves, es en el controlador UsuariosController, función getFicha donde, en según el parámetro {nombre}, que llega como $nombre a la función, se busca un usuario u otro. Aquí deberías cargar los datos de una gráfica u otra y devolver el jpgraph correspondiente.
  #18 (permalink)  
Antiguo 22/08/2013, 22:39
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder , hice lo que me indicas pero no logro que me funcione. que estoy haciendo mal?

mi objetivo: en una vista(pagina) mostrar el utimo registro que se inserto a la base de datos y 3 graficas

este es mi codigo

Modelo Anemometro.php
Código PHP:
Ver original
  1. class Anemometro extends Eloquent {
  2.          
  3.        protected $table = "anenometros";
  4.  
  5.        public static function getLast()
  6.        {
  7.              return Anemometro::orderBy('id', 'desc')->take(1)->first();
  8.        }
  9.        
  10.        
  11.        
  12.        static function getPrepararDatosGrafica()
  13.        {
  14.              $filas = DB::select('select * from anemometro');
  15.              $xdata = array();
  16.              $ydata = array();
  17.  
  18.              foreach($filas as $fila) {
  19.                   $xdata[] = substr($fila->hora, 0, -3);
  20.                   $ydata[] = $fila->temperatura;
  21.              }
  22.  
  23.              return array($xdata, $ydata);
  24.        }
  25. }

Controlador GraficasController.php
Código PHP:
Ver original
  1. use JpGraph\JpGraph;
  2.  
  3. class GraficasController extends \BaseController {
  4.     function pintarGrafica($parametro)
  5.            
  6.        {
  7.            list($xdata, $ydata) = Anemometro::getPrepararDatosGrafica();
  8.            JpGraph::module('line');
  9.                $graph = new Graph(820,194,'auto');
  10.                $graph->SetScale('linlin');
  11.                $graph->SetMargin(40,40,20,10);
  12.                $graph->title->Set('Temperatutra');
  13.                $graph->title->SetFont(FF_ARIAL,FS_NORMAL,12);
  14.                $graph->xaxis->SetPos('min');
  15.                $graph->xaxis->SetLabelAngle(0);
  16.              //$graph->yaxis->SetTitle("Grados Centigrados (C)",'center');
  17.                $graph->yaxis->SetTitle($parametro);
  18.                $graph->xaxis->SetTitle("Tiempo",'center');
  19.                $graph->xaxis->SetTickSide(SIDE_DOWN);
  20.                $graph->xaxis->SetTickLabels($xdata);
  21.                $graph->xgrid->Show();
  22.                $p1 = new LinePlot($ydata);
  23.                $p1->SetColor('teal');
  24.                $graph->Add($p1);
  25.                $graph->Stroke(_IMG_HANDLER);
  26.                $response = Response::make($graph->img->Stream(), 200);
  27.                $response->header('Content-type', 'image/jpeg');
  28.                return $response;
  29.  
  30.        }
  31. }

routes.php

Código PHP:
Ver original
  1. Route::get('registro', function()
  2. {
  3.     $registros = DB::table('anemometro')->orderBy('id', 'desc')->take(1)->get();
  4.     return View::make('registros')->with('registros', $registros);
  5. });


vista registros.blade.php

Código PHP:
Ver original
  1. <div><strong>Último Registro</strong>
  2. @foreach($registros as $registro)
  3. {{ $registro->hora }}
  4. {{ $registro->temperatura }} °C
  5.  
  6. <img src="{{ action('GraficasController@pintarGrafica', array('parametro' => 'temperatura')) }}">
  7. <img src="{{ action('GraficasController@pintarGrafica', array('parametro' => 'velocidad')) }}">
  8. <img src="{{ action('GraficasController@pintarGrafica', array('parametro' => 'velocidad_sonido')) }}">
  9. @endforeach
  10. @stop

no Obtengo la grafica , que estoy haciendo mal?
  #19 (permalink)  
Antiguo 23/08/2013, 03:16
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 73
Antigüedad: 10 años, 10 meses
Puntos: 27
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

En tu routes.php no veo ninguna ruta asociada a GraficasController@pintarGrafica.

De hecho, si tuvieras algo como:

Código PHP:
Ver original
  1. // routes.php
  2.  
  3. route->get("la-grafica/{parametro}", "GraficasController@pintarGrafica");

Podrías poner directamente en el navegador:

http://localhost/la-grafica/temperatura

Y tendría que salirte la imagen.
  #20 (permalink)  
Antiguo 23/08/2013, 06:25
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: como integrar laravel 4 y librerias para graficar series de tiempo

eternoaprendiz gracias por responder

en routes.php no coloque lo que me indicas
Código PHP:
Ver original
  1. route->get("la-grafica/{parametro}", "GraficasController@pintarGrafica

ya quen en la vista debo de mostrar primero el ultimo registro qeu se ingreso a las base de datos y despues las grfaicas

este es emi routes.php
Código PHP:
Ver original
  1. Route::get('registro', function()
  2. {
  3.     $registros = DB::table('anemometro')->orderBy('id', 'desc')->take(1)->get();
  4.     return View::make('registros')->with('registros', $registros);
  5. });

que estoy haciendo mal? como debe de ser para que en la mista pagina (vista) poder mostrar la consulta y las graficas

Etiquetas: integrar, laravel, series, tiempo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:39.