Foros del Web » Programando para Internet » PHP »

Clase + Objeto para generar simples graficos

Estas en el tema de Clase + Objeto para generar simples graficos en el foro de PHP en Foros del Web. hola, comprueben esta classe hacia un objeto.... que genera un simple grafico en barras.... sin usar gd... venga, a ver si os gusta.. Código PHP: ...
  #1 (permalink)  
Antiguo 23/08/2003, 16:45
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
Clase + Objeto para generar simples graficos

hola, comprueben esta classe hacia un objeto.... que genera un simple grafico en barras.... sin usar gd... venga, a ver si os gusta..


Código PHP:
<HTML>
 <HEAD>
   <TITLE>Graficos con HTML</TITLE>
 </HEAD>
 <STYLE TYPE="text/css">
     TD{
        text-align:center;
    font-family:"Verdana","Courier New";
    font-size:12px;
     }
     
     TD.titulo{
    font-size:20px;
    font-weight:bold;
    color:orange;
     }
 </STYLE>
 <BODY>
   <CENTER>
     <H2>Graficos<I></I></H2>
     <?php

       
class barra{
           var 
$color;
       var 
$alto;
       var 
$ancho;
       var 
$nombre;

       function 
barra($nombre,$color,$alto,$ancho=50){
          
$this->nombre=$nombre;
          
$this->color=$color;
          
$this->alto=$alto;
          
$this->ancho=$ancho;
       }
       }

       class 
graficaBarras{
       var 
$elementos;
           var 
$titulo;

           function 
graficaBarras(){
           
$this->elementos=array();
           
$this->titulo="";
           }

           function 
fijarValor($nombre,$color,$alto,$ancho=50){
           
$barra = new barra($nombre,$color,$alto,$ancho);
           
$this->elementos[]=$barra;
       }

           function 
fijarTitulo($titulo){
           
$this->titulo=$titulo;
       }

           function 
dibuja(){
          if(
count($this->elementos)==0) return 0;
          echo 
"<TABLE BORDER='0'>\n";
          if(
$this->titulo){
               echo 
"<TR><TD CLASS='titulo'>$this->titulo</TD></TR>";
             echo 
"<TR><TD></TD></TR>\n";
          }
          echo 
"<TR><TD>";
          echo 
"<DIV>\n";
          for(
$i=0;$i<count($this->elementos);$i++){
                echo 
"<SPAN STYLE='";
          echo 
"width:".$this->elementos[$i]->ancho."; ";
          echo 
"height:".$this->elementos[$i]->alto."; ";
          echo 
"background-color:".$this->elementos[$i]->color.";";
          echo 
"'>".$this->elementos[$i]->alto."</SPAN>\n";
          }
          echo 
"</DIV></TD></TR>\n";
          echo 
"<TR><TD><HR></TD></TR>\n";
          echo 
"<TR><TD CLASS='pie'>";
          echo 
"<DIV>\n";
          for(
$i=0;$i<count($this->elementos);$i++){
                echo 
"<SPAN STYLE='";
          echo 
"width:".$this->elementos[$i]->ancho.";'>";
                echo 
$this->elementos[$i]->nombre."</SPAN>\n";
          }
          echo 
"</DIV></TD></TR>\n";
          echo 
"</TABLE><BR>\n";
           }

      }

        
$migrafica1=new graficaBarras;
    
$migrafica1->fijarValor("dato1","red","100");
    
$migrafica1->fijarValor("dato2","green","150");
    
$migrafica1->fijarValor("dato3","blue","80");
    
$migrafica1->fijarValor("dato4","silver","130");
    
$migrafica1->fijarTitulo("Gráfica 1");
        
$migrafica1->dibuja();
    
        
$migrafica2=new graficaBarras;
    
$migrafica2->fijarValor("a","red","80","30");
    
$migrafica2->fijarValor("b","green","50","30");
    
$migrafica2->fijarValor("c","blue","35","30");
    
$migrafica2->fijarValor("d","silver","30","30");
    
$migrafica2->fijarValor("e","yellow","70","30");
    
$migrafica2->fijarTitulo("Gráfica 2");
        
$migrafica2->dibuja();
     
?>
   </CENTER>
 </BODY>
</HTML>
lo pongo pq me han llegado varios mensajes privados pidiendo un ejemplo como el de mi web....
__________________
3w.valenciadjs.com
3w.laislatv.com
  #2 (permalink)  
Antiguo 23/08/2003, 20:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cuando pongas una classe (o serie de classes que tengan una relación directa como es tu caso que tienes dos classes) ... Intenta poner el ejemplo (el "objeto" como tal) cómo un código PHP aislado y luego haces un ejemplo de uso ..

Así cumplirá uno de los objetivos principales de programar en OOP (programación orientada a objetos) que es la de hacer código portable/ampliable y reusable ...

graficar.class.php
Código PHP:
<?
// tu código del objeto ..
?>
ejemplo.php
Código PHP:
<HTML>
 <HEAD>
   <TITLE>Graficos con HTML</TITLE>
 </HEAD>
 <STYLE TYPE="text/css">
     TD{
        text-align:center;
    font-family:"Verdana","Courier New";
    font-size:12px;
     }
     
     TD.titulo{
    font-size:20px;
    font-weight:bold;
    color:orange;
     }
 </STYLE>
 <BODY>
   <CENTER>
     <H2>Graficos<I></I></H2>
<?
    
//  incluimos la classe(s).   
    
require("graficar.class.php");

     
// El ejemplo ...
        
$migrafica1=new graficaBarras;
    
$migrafica1->fijarValor("dato1","red","100");
    
$migrafica1->fijarValor("dato2","green","150");
    
$migrafica1->fijarValor("dato3","blue","80");
    
$migrafica1->fijarValor("dato4","silver","130");
    
$migrafica1->fijarTitulo("Gráfica 1");
        
$migrafica1->dibuja();
    
        
$migrafica2=new graficaBarras;
    
$migrafica2->fijarValor("a","red","80","30");
    
$migrafica2->fijarValor("b","green","50","30");
    
$migrafica2->fijarValor("c","blue","35","30");
    
$migrafica2->fijarValor("d","silver","30","30");
    
$migrafica2->fijarValor("e","yellow","70","30");
    
$migrafica2->fijarTitulo("Gráfica 2");
        
$migrafica2->dibuja();
     
?>
   </CENTER>
 </BODY>
</HTML>
Y .. sobre todo ya que estamos en un foro temático de PHP .. intenta explicar el código ya sea en el própio código (muyyy recomendable para que documentes los métodos que usas y demás variables que uses ..) y el própio ejemplo ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 23/08/2003, 21:06
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 20 años, 11 meses
Puntos: 2
xxxdddd, esq me emocione y pege el code a piñonnn,jejeje ;)
__________________
3w.valenciadjs.com
3w.laislatv.com
  #4 (permalink)  
Antiguo 24/08/2003, 14:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

A mi personalmente no me gusta que los metodos o funciones llamen a echo directamente. Prefiero que devuelvan la cadena y luego yo hago el echo. Es una mania personal.

Otra cosa mas grave. Estoy un poco flojo en CSS, pero creo que en tus estilos estas creando un estilo propio para todos los TD que no tengan class (creo). Eso creo que puede interferir con el diseño de la pagina.

Luego esta el detalle de que el valor que muestras en el grafico es el alto en pixeles. No se el uso que le estas dando a la clase, pero si quieres que sea general deberias hacerlo en base a una escala. Es decir, el valor maximo a representar es x, y se representa con y pixeles. Entonces el valor z se representa con v pixeles.

Y un detalle sobre OOP, creo que seria mas correcto que seria el objeto barra el que se dibujara a si mismo. Es decir, crear un barra->dibuja() que dibuje esa barra.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 22:14.