Foros del Web » Programando para Internet » PHP »

Grafico_De_Torta->mi_primera_clase!

Estas en el tema de Grafico_De_Torta->mi_primera_clase! en el foro de PHP en Foros del Web. Buenas, Hace unos dias terminé mi primera clase, que "intenta" crear graficos de torta, asi que la comparto!. Espero que les sea útil y no ...
  #1 (permalink)  
Antiguo 14/04/2003, 18:16
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Grafico_De_Torta->mi_primera_clase!

Buenas,
Hace unos dias terminé mi primera clase, que "intenta" crear graficos de torta, asi que la comparto!.
Espero que les sea útil y no encuentren demasiodos errores (aparte de los de ortografia D), pues le dediqué bastante tiempo.
Caracteristicas:
  • Calcula los porcentajes
  • Crea automaticamente las referencias
  • Soporta fuentes monoespacio (predefinidas de la libreria GD) y fuentes ¡TrueType! (arial, verdana, Times New Roman, etc)
  • Se puede definir los colores para cada "porcion", de lo contrario se usan los predeterminados,
  • Los errores pueden ser mostrados en formato HTML, texto, o como una imágen.
  • Las referencias pueden ser situadas en 8 diferentes lugares y con diferentes razgos.
  • Otras caracteristicas como entrelazado, resaltar aristas, recuadro sombreado, rotacion aleatoria, y mas!
  • Tambien esta comentada segun PHPDoc/PHPDocumentor

Acas estan las URLs:
Sintaxis coloreada: http://purohumor.webcindario.com/fra...a.inc.php.html
Texto Plano: http://purohumor.webcindario.com/fra...ta.inc.php.txt

Aca pongo una especie de documentacion gauchesca de los metodos suponiendo que se empieza por:
Código PHP:
include_once("class.graficodetorta.inc.php");
$grafico = new Grafico_De_Torta($data); 
fijarse que a Grafico_De_Torta se le pasa una variable $data, esta es un array bidimensional asociativo (y eso que era gauchesca!) que debe ser asi por cada valor:
Código PHP:
$data[] = array("valor"=>1000"etiqueta"=>"Este es el valor [%] %"); //esto será una porcion
$data[] = array("valor"=>750"etiqueta"=>"Este es el valor que tiene [%] %"); //esto será otra porcion 
La clave "valor" es un entero y "etiqueta" (opcional) es una cadena. Notar que [%] luego se reemplazará con el porcentaje correspondiente a ese valor.

Luego si se agrega,
Código PHP:
$grafico->estableceInicioAleatorio(1); 
la torta (independiente de las referencias) aparecera en un angulo de rotacion distinto cada vez que se cree.

Agregando,
Código PHP:
$grafico->estableceEntrelazado(1); 
El grafico sera una imagen entrelazada de manera que a medida que se baja, la calidad aumente.

Agregando,
Código PHP:
$grafico->paletadecolores($array); 
Se utilizaran los colores especificados en la matriz para cada porcion de la torta(ver ejemplos).

Agregando,
Código PHP:
$grafico->aristasDeTorta(3"0,0,0"); 
nos permitirá configurar las aristas (bordes) de la torta: el primer parametro es el ancho de la linea y el segundo (opcional) serian valores RGB separador por coma. En el ej "0,0,0" representa el color negro.

Agregando,
Código PHP:
$grafico->formatoNumerico(2"."); 
cambiará la forma en que se presenten los porcentajes: el primer parametro indica el numero de decimales, y el segundo el separador entre decimales y enteros. Por ejemplo en vez de mostrar 33,3 (como es predeterminado) se mostrará 33.33 y asi se aumenta la presicion.

Agregando,
Código PHP:
$grafico->diametroDeTorta(200); 
se establece el diametro de la torta. El predeterminado es 300.

Luego para definir las fuentes que se usaran en las referencias hay 2 opciones
Código PHP:
$grafico->fuentepredefinida(2); 
usando esto se usan las fuentes tipo Courier New (que son bastante feas). Solo puedes mandar valores del 1 al 5 (lo que cambiará el tamaño).
O de lo contrario:
Código PHP:
$grafico->fuenteTT(9"c:\\windows\\fonts\\arial.ttf"); 
aqui los 2 parametros son requeridos: el primero es el tamaño de la fuente, y el segundo la ubicacion de la fuente TrueType a usar.

Algo de lo mas importante es esto:
Código PHP:
$grafico->estiloDeReferencias(000000); 
Aqui todos los parametros son opcionales, y basta con poner a 0 para que se use el valor por defecto:
El primero: es la ubiacion de las referencias con respecto a la torta. Para saber los posibles valores revisar los comentarios, ponerle cualquier cosa (algo asi como $grafico->estiloDeReferencias("a");) para que te mande un mensaje de error y te explique, o sino mandar un MP.
El segundo: si lo pones a non-cero las referencias seran encuadradas.
Parametros 3 , 4 y 5: indican el ancho x alto de cada cuadrito de las referencias y el espacio de separacion entre ellos
El sexto parametro: puede ser GT_REFERENCIA_RECTANGULAR o GT_REFERENCIA_CIRCULAR (experimentar!)

Al final y lo que siempre hay que hacer es:
Código PHP:
if ( !$img $grafico->obtenerGrafico() ) {
    
// usar los metodos que se expliacn abajo
} else {
    
Header("Content-type: image/png");
    
imagepng($img);*/

echo $grafico->erroratxt(); // -----> imprime los errores con formato de texto
echo $grafico->errorahtml(); // -----> imprime los errores con formato de HTML
Header("Content-type: image/png"); imagepng($grafico->erroraimagen()); // -----> imprime los errores en una imagen

Finalmete si no tienen ganas de leer todo lo de arriba aca hay ejemplos de codigo listos para usar:

Código PHP:
<?php
include("class.graficodetorta.inc.php");
$data[] = array("valor"=>41"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>89"etiqueta"=>"Este valor [%]%");
$data[] = array("valor"=>145"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>50"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>78"etiqueta"=>"Este valor [%]%");
$data[] = array("valor"=>41"etiqueta"=>"Este es el valor [%]%");

$grafico = new Grafico_De_Torta($data);
$grafico->estableceInicioAleatorio(1);
$grafico->estableceEntrelazado(1);
$grafico->aristasDeTorta(1"0,0,0");
$grafico->formatoNumerico(2",");
$grafico->fuenteTT(9"c:\\windows\\fonts\\futurab.ttf");
$grafico->diametroDeTorta(200);
$grafico->estiloDeReferencias(GT_POSICION_ABAJO_IZQUIERDA);
if (
$img $grafico->obtenerGrafico()){
    
$img $grafico->_agregaSombraRectangular($img,5);
} else {
    
$img $grafico->erroraimagen();
}
Header("Content-type: image/png");
imagepng($img);
?>
Código PHP:
<?php
include("class.graficodetorta.inc.php");
$data[] = array("valor"=>250"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>308"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>158"etiqueta"=>"Este valor [%]%");
$data[] = array("valor"=>510"etiqueta"=>"Este es el valor [%]%");

$grafico = new Grafico_De_Torta($data);
$grafico->estableceInicioAleatorio(1);
$grafico->formatoNumerico(5",");
$grafico->fuentepredefinida(2);
$grafico->diametroDeTorta(150);
$grafico->estiloDeReferencias(GT_POSICION_ARRIBA_DERECHA1000GT_REFERENCIA_CIRCULAR);
if (
$img $grafico->obtenerGrafico()){
    
$img $grafico->_agregaSombraRectangular($img3);
} else {
    
$img $grafico->erroraimagen();
}
Header("Content-type: image/png");
imagepng($img);
?>
Código PHP:
<?php
include("class.graficodetorta.inc.php");
$data[] = array("valor"=>66"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>33"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>33"etiqueta"=>"Este es el valor [%]%");
$colores = Array ("0,0,0","200,200,200");

$grafico = new Grafico_De_Torta($data);
$grafico->diametrodetorta(100);
$grafico->paletadecolores($colores);
$grafico->aristasdetorta(4"0,0,0");
if (
$img $grafico->obtenerGrafico()){
    
Header("Content-type: image/png");
    
imagepng($img);
} else {
    echo 
$grafico->errorahtml();
}
?>
Esto intencionalmente mostrara un error
Código PHP:
<?php
include("class.graficodetorta.inc.php");
$data[] = array("valor"=>66"etiqueta"=>"Este es el valor [%]%");
$data[] = array("valor"=>33"etiqueta"=>"Este es el valor [%]%");

$grafico = new Grafico_De_Torta($data);
$grafico->estilodereferencias("nada");
if (
$img $grafico->obtenerGrafico()){
    
Header("Content-type: image/png");
    
imagepng($img);
} else {
    echo 
$grafico->errorahtml();
}
?>
Por favor, espero sus comentarios, criticas, sugerencias para nuevas versiones, etc. Cualquier cosita pueda ayudar a mejorar esta clase.

Saludos!

Última edición por fran86; 14/04/2003 a las 18:33
  #2 (permalink)  
Antiguo 14/04/2003, 18:34
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Ha, me olvide...
Con un vistaso general al codigo se nota de lejos que la manera en que las funciones admiten listas de argumentos de longitud variables es muy parecida a la usada por webstudio, y esto es porque su clase de paginado me sirvio muuuuuucho de guia mientras yo aprendía. Asi que muchas gracias a él (y que no se enoje).

Saludos,
  #3 (permalink)  
Antiguo 14/04/2003, 19:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Está muy bien la classe. Te recomiendo que hagas un "zip" con algo de ducumentación aunque sea algo "gauchesca" y sobretodo con estos ejemplos que has puesto y que lo subas a tu web ...

Tambien podrias ver si lo puedes dejar en phpclasses.org como promoción y/o en Hotscripts.com .. hasta que zonaphp.com tenga sección para scripts/proyectos xDD.

Sobre la descripción en sí de los requisitos de la classe .. sería bueno que indicases si trabaja con las extensiones GD versión 1.x y/o 2.x

Un saludo, y suerte!.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 14/04/2003, 20:27
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Felicidades!
__________________
Manoloweb
  #5 (permalink)  
Antiguo 14/04/2003, 22:03
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Manoloweb, muchas gracias por tu apoyo.

Cluster, no quise usar este post como host para la documentacion, es que empece a meter ejemplos y se hiso un poquititititito largo. Igualmete un dia de estos recargo pilas y empieso con un PDF con todos los chiches x-P.
Con respecto a lo de phpclasses/hotscripts/zonaphp voy a esperar a aplicar unas ideas que tengo en mente: como graficos en 3D, y referencias integradas con la torta (sacando flechitas). Ademas se me va a dificultar la redaccion en ingles (no es mi fuerte) - claro que no es problema en zonaphp.com-

Por el tema de la version de GD requiere 2.0.1 (principalmete por imagefilledarc())

Muchas Gracias.
  #6 (permalink)  
Antiguo 14/04/2003, 22:45
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
Fijate que lo probé y así de primera mano me marco un par de errores en la linea 306 y 308,

La primera es un array_map donde me dice que el primer argumento no es válido, y la de la linea 308 es consecuencia de la anterior, ya que es un foreach que no está recibiendo el array.

Mañana le doy una revisada, pero mientras ahi te lo dejo para ver si encuentras cual ha sido mi error.

Saludos!
__________________
Manoloweb
  #7 (permalink)  
Antiguo 15/04/2003, 02:28
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
No se que podrá ser...
Al parecer la variable $datos no llegó apropiadamente, revisa cuando instancias el objeto:
$grafico = new Grafico_De_Torta($data);
que $data sea un array válido.

Otra que podrías hacer es agregar arriba de la linea en cuestion un print_r($datos); exit;
y si esta vacia, o no es bidimensional, pues alli esta el problema.

En caso de que uses alguno de los ej que puse ¿cual es?, y si estas experimentando con uno tuyo postealo aqui o manda MP.

saludos,
  #8 (permalink)  
Antiguo 15/04/2003, 08:52
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 2 meses
Puntos: 5
El error me lo dió con cada uno de los ejemplos que posteaste...
__________________
Manoloweb
  #9 (permalink)  
Antiguo 15/04/2003, 09:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
fran86

Lo de phpclasses/hotscripts .. etc No te preocupes por tu documentación .. Solo tienes que hacer una introducción/descripcion en ingles y listo .. (avisa que la documentación está en castellano). Yo así lo he hecho con un script q tengo por Hotscripts ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 15/04/2003, 12:29
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
Ok Cluster, gracias.

Manoloweb, bajate el zip este que tiene la clase, los ejemplos, y las imagenes que corresponden a cada ejemplo.
http://purohumor.webcindario.com/fra...icodetorta.zip

saludos,
  #11 (permalink)  
Antiguo 15/04/2003, 12:39
Avatar de payo22  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 839
Antigüedad: 21 años, 5 meses
Puntos: 1
no me funciona me manda el siguiente mensaje de error en la clase :

class.graficodetorta.inc.php

error:

Fatal error: Call to undefined function: array_map() in C:\apache\htdocs\class.graficodetorta.inc.php on line 306
  #12 (permalink)  
Antiguo 15/04/2003, 12:49
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
payo22, array_map() lo tenes a partir de PHP 4.0.6.
  #13 (permalink)  
Antiguo 15/04/2003, 14:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Funcionan correctamente los ejemplos (los del .zip que dejastes junto con la classe del .zip) ...

Solo tengo problemillas con los MIME de mi Apache/PHP .. (supongo)? .. pues me dá problemas con los image/png si lo hago tal cual el ejemplo me "tira" el gráfico generado a descargar y no me lo presenta el navegador (IE 5.5 y Opera 7 lo probé) ..

El caso que si uso jpeg (tanto en el MIME image/jpeg como en el imagecreate ...) ahí me va OK .. por lo q deduzco que es un problema mio de configuración ..

Por otro lado (anecdota) .. si llamo a un ejemplo (que genere .png) via:

<img src="ejemplo2.php">

Lo interpreta bien el navegador (cualquier de los q usé) ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 15/04/2003, 14:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Solo un consejo: se mas consistente con la forma de nombrar a las funciones. Si eliges la del "camello" (primera letra de cada palabra en mayusculas menos la de la primera palabra), mantenla en todas las funciones.

Todavia no he examinado el codigo, pero parece tener buena pinta.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #15 (permalink)  
Antiguo 15/04/2003, 17:35
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 21 años, 8 meses
Puntos: 8
josemi, si ves el codigo fuente todas las funciones siguen el mismo estandar: la del "camello" (no sabia que se llamaba así), y los metodos que "supuestamente" son privados empiezan con _.
Lo que sucede es que algunos de los ejemplos estan hechos "al vuelo" y no me detuve en esos detalles.

Saludos y gracias.
  #16 (permalink)  
Antiguo 15/04/2003, 21:24
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 21 años, 11 meses
Puntos: 7
Bien jugado, fran86!

Por cierto... Cluster, tenemos un lugar en el cual almacenar estas clases zipeadas? No estaria de mas de repente usar un Yahoo briefcase o un site en Tripod, creo, no?
__________________
No tengo firma ahora... :(
  #17 (permalink)  
Antiguo 15/04/2003, 21:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Bueno Mikel .. hotscrips.com por ejemplo es un simple "directorio" .. ellos no dan "hosting" a las aplicaciones que ahí aparencen, así que tienes que tenerlas en algun sitio propio (ya sea hosting gratuito o de pago .. o como gustes ..)

Yo por ejemplo uso host.sk (hosting gratis) para alojar mi scripcito q tengo por ahí .. Eso sí, dejé "constancia" en el directorio de hotscripts.com .. en su apartado correspondiente ..

En cuando a phpclasses .. ellos si que dan soporte a tu "zip" .. pero ahí son solo "classes".. y como lo de fran86 es una classe por eso le animé a que lo dejara por allá tan solo como promoción simplemente ..

Esos dos sitios solo fueron ejemplos .. Tambien está sourceforge.net y algunos proyectos así más que te dan alojamiento a tu proyecto para que metas tu "zip" y tengas control de tus actualizaciones .. foro para tus usuarios.. reportes de bug .. etc ..

Y bueno .. tambien mil paginas web con scripts.php a modo de directorios algunas y otras dando alojamiento a tu "zip" ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 15/04/2003 a las 21:32
  #18 (permalink)  
Antiguo 15/04/2003, 22:09
Avatar de Mickel  
Fecha de Ingreso: mayo-2002
Ubicación: Lima, Peru
Mensajes: 4.619
Antigüedad: 21 años, 11 meses
Puntos: 7
Gracias por el dato, Cluster. Entonces, te lo sugiero formalmente a ti como moderador del foro PHP: Que tal si generamos un sitio de storage para todas las clases y ejemplos que se han posteado?
__________________
No tengo firma ahora... :(
  #19 (permalink)  
Antiguo 15/04/2003, 22:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues eso ya se puede hacer .. osese, crear un "post" nuevo para tal fin y que la gente suba sus "zip" al foro .. Eso está permito en este foro .. solo requiere de validación del "zip" por parte de los moderadores ..

En el foro "flash" ya se ha creado algo similar .. eso sí allá lo manejan todo los própios moderadores .. A mi me gustaría para el foro PHP algo público (eso sí .. con la validación del zip minimo como ya está ..)

Si quieres comenzar Mickel .. Inicia un post así, detalla un poco las normas del post (una guía de como publicar su classe) y .. bueno por mi parte lo marcaré como "importante" para que quede destacado.

Solo recalcar que sería interesante que las "classes" que se publiquen sean originales de las personas que las publiquen .. Tampoco es plan de hacer de forosdelweb.com otro "phpclasses.org" con classes de aquí y de allá .. sino que sea de los própios integrantes del foro. Así mismo dejar claro que el uso/mal uso/bugg y agradecimientos de la "classe" se hagan en privado o inicien un nuevo mensaje en el foro público si la ocasión lo amerita.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 15/04/2003 a las 22:19
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 20:50.