Easy Google Maps: clase PHP para facilitar el uso de la API de Google Maps

0 - , , - 13/03/2009 16:26:51

Easy Google Maps es una clase para PHP que, como su nombre indica facilita la inclusión de mapas a través de Google Maps en un sitio web. Lo primero que deberemos hacer, para poder utilizar la API de Google Maps es obtener una key o clave para el dominio en el que pensemos utilizar la API.

Una vez tenemos una key podemos invocar un mapa de un modo tan sencillo como:

<?php
require'EasyGoogleMap.class.php';
$key ="XXXXXXXXXX";
$gm = & new EasyGoogleMap($key);
$gm->SetMapZoom(15);
$gm->SetAddress("Colon 22, Valencia");
$gm->SetInfoWindowText("Esta es la primera dirección");
$gm->SetAddress("Periodista Azzati 7, Valencia");
$gm->SetInfoWindowText("Esta es la segunda dirección");
?>
<html>
<head>
<title>EasyGoogleMap</title>
<?php echo $gm->GmapsKey(); ?>
</head>
<body>
<?php echo $gm->MapHolder(); ?>
<?php echo $gm->InitJs(); ?>
<?php echo $gm->UnloadMap(); ?>
</body>
</html>
  

Donde "XXXXXXXXXX" es la key que acabamos de obtener.
Ver ejemplo en funcionamiento » »

Algunas de las propiedades que podemos establecer son las siguientes:

//Para habilitar/deshabilitar el zoom progresivo.
// De modo predeterminado deshabilitado (FALSE)
$gm->mContinuousZoom = FALSE;
//Para habilitar/deshabilitar La escala del mapa.
// De modo predeterminado habilitado (TRUE)
$gm->mScale = TRUE;

//Para habilitar/deshabilitar el mapa interno.
// De modo predeterminado deshabilitado (FALSE)
$gm->mInset = FALSE;

//Para habilitar/deshabilitar el tipo de mapa.
// De modo predeterminado deshabilitado (FALSE)
$gm->mMapType = FALSE; # default

//Para establecer las dimensiones del mapa
//De modo predeterminado 300px x 300px
$gm->SetMapWidth(500); 
$gm->SetMapHeight(500);

//Para establecer el zoom
//De modo predeterminado 13
$gm->SetMapZoom(10);

//Para establecer el tipo de puntero
// De modo predeterminado se utiliza GT_FLAT
$gm->SetMarkerIconStyle('FLAG');
$gm->SetMarkerIconStyle('GT_FLAT');
$gm->SetMarkerIconStyle('GT_PILLOW');
$gm->SetMarkerIconStyle('HOUSE');
$gm->SetMarkerIconStyle('PIN');
$gm->SetMarkerIconStyle('PUSH_PIN');
$gm->SetMarkerIconStyle('STAR');

//Para establecer el color del puntero
// De modo predeterminado se utiliza PACIFICA
$gm->SetMarkerIconColor('PACIFICA');
$gm->SetMarkerIconColor('YOSEMITE');
$gm->SetMarkerIconColor('MOAB');
$gm->SetMarkerIconColor('GRANITE_PINE');
$gm->SetMarkerIconColor('DESERT_SPICE');
$gm->SetMarkerIconColor('CABO_SUNSET');
$gm->SetMarkerIconColor('TAHITI_SEA');
$gm->SetMarkerIconColor('POPPY');
$gm->SetMarkerIconColor('NAUTICA');
$gm->SetMarkerIconColor('DEEP_JUNGLE');
$gm->SetMarkerIconColor('SLATE');
//Establecer el texto del bocadillo informativo
$gm->SetInfoWindowText("Este es el punto uno")

El uso es realmente sencillo. Lo unico que no me acababa de gustar es que apareciese el bocadillo de la primera dirección. Prefiero que aparezcan los bocadillos cuando el usuario hace click. Simplemente cogiendo la clase y comentando estas dos líneas ya lo tendremos,

if ($i===0) 
$ret .= "marker.openInfoWindowHtml(address_$i.infowindowtext);\n";

Ver un segundo ejemplo en funcionamiento » »

Descargar ejemplo completo » »

Obtener un listado de todas las clases disponibles en PHP

0 - , - 23/12/2008 00:00:00

PHP dispone de una función denominada get_declared_clases() que permite obtener una lista de todas las clases disponibles tanto por la propia instalación de PHP como las definidas por nosotros mismos o incluidas en bibliotecas de terceros. Con el siguiente ejemplo obtendríamos un listado alfabético de todas las clases disponibles para tu aplicación:

<?php
$classes = get_declared_classes();
sort($classes);
echo "<pre>";
print_r($classes);
echo "</pre>";
?>

Lo que nos devolvería un listado similar al siguiente:

Array
(
    [0] => AppendIterator
    [1] => AppendIterator
    [2] => ArrayIterator
    [3] => ArrayIterator
    [4] => Arrayobject
    [5] => Arrayobject
    [6] => BadFunctionCallException
    ........................
    [223] => stdClass
    [224] => tidy
    [225] => tidy
    [226] => tidyNode
    [227] => tidyNode
)

PHP DocWriter

0 - , , - 27/11/2008 13:14:00

Interesante biblioteca de clases. Muy útil por ejemplo para dar salida a informes creados por aplicaciones web en entornos abiertos.

PHP DocWriter es conjunto de clases escritas en PHP capaz de generar documentos en formato OpenOffice.org XML (es decir, documentos StarOffice/OpenOffice.org). Tambíen es capaz de comunicarse con la aplicación OpenOffice.org con el objetivo de que esta pueda convertir los documentos OpenOffice.org XML generados a cualquier otro formato soportado por la aplicación OpenOffice.org de forma autómatica y transparente. Esta librería esta todavia bajo desarrollo pero es completamente usable en este momento. Hasta ahora, soporta las siguientes características: Cabecera y pie de página, Cuadros de texto, Imágenes, Tablas, Dibujos, Meta-información de los documentos, Conversión automática de los documentos creados a otros formatos, etc.

PHP DocWriter » »

Clase para enviar correos con PHP

0 - , , - 07/05/2008 16:32:23

Esta es la primera clase que hago en PHP. Ya había hecho alguna en Actionscript pero ésta es la primera que hago para PHP. Ocurre que PHP es un lenguaje con una comunidad tan grande que ya hay clases para todo lo que uno pueda imaginar. Clases para enviar correos deben haber bastantes y con bastantes más funcionalidades, pero ésta es sencilla y funciona correctamente. La clase es:

class correo{
	var $destinatario;
	var $remitente;
	var $asunto;
	var $mensaje;

function enviar() {
	$headers = "From: ".$this->remitente."\r\nReply-To: ". $this->remitente;
	ob_start(); 
	$message = ob_get_clean();
	$mail_sent = @mail( $this->destinatario, $this->asunto, $this->mensaje, $headers );
	echo $destinatario;
	echo $mail_sent ? "Correo Enviado" : "No se ha podido enviar el correo";
	}
}

Para hacer uso de ella (Un servicio SMTP debe estar disponible para PHP en el servidor):

$g = new correo();
$g->destinatario = 'direccion@correo.com';
$g->remitente = 'remitente@correo.com';
$g->asunto = 'Este es el asunto del mensaje';
$g->mensaje = 'Este es el cuerpo del mensaje.';
$g->enviar();

Clase SoundDataLayer

0 - , , - 23/01/2007 15:19:31
Autor:PollyJex
E-mail: pollyjex@emc2zen.com.ar
URL:www.emc2zen.com.ar

Ver ejemplo en funcionamiento » »
Archivos fuente del ejemplo » »
Archivos Fuente de la clase » »
Documentación de la clase » »

Estructura de la clase:

Esta clase permite separar la Capa de Datos y de Programación (API) de un reproductor de MP3, con respecto a la Interfaz Grafica (GUI).

Lo bueno de esto es que permite una versatilidad en el diseño de la GUI, sin tener que preocuparse por la API.

La clase es muy sencilla, pero como siempre dejo algunos detalles que se pueden mejorar y así hacer un poco más entretenida la tarea de implementar o mejorar la clase.

De apoco iré armando un miniFrameWork (mFW), para que aquellas ávidas mentes que quieran incursionar en la programación de flash, no tengan que romperse la cabeza con mounstrosos FrameWork que jamás se llegan a comprender o a utilizar del todo.

Sigo sosteniendo que este mFW esta orientado a personas que no poseen grandes capacidades de programación o bien están inicializando sus pasos en ella, dentro de lo que es ActionScript 2. Una vez finalizado en AS2 migraremos a AS3, reescribiendo el mFW en dicha versión del lenguaje.

Por ultimo, el lema que pretendo implementar en la elaboración de mFW es: A grandes problemas, soluciones simples.

NOTA: Aquellos que este usando la Clase FileLoad, les recomiendo bajar las fuentes de este tutorial y actualizar la clase ya que la modifiqué para adaptarla al mFW, jejeje!

Otra cosa, por el momento seguiré armando los ejemplos (example) de las clases en AS1, pero tengo la intención de que el armado de las estructuras lógicas de las GUI, sean también hecho en clases.

Estructura de la clase:

AsLib
SoundPlayer
SoundDataLayer

Detalles de las clases:

SoundDataLayer: Administra las funcionalidades en la reproducción de archivos de audio, en este caso MP3.

Propiedades:
coefficientVolume, initialVolume, repeat, streaming

Métodos:
new SoundDataLayer(), GetDataTrack(), GetStatus(), load(), MaxVolume(), MinVolume(), MuteVolume(), NextTrack(), PauseTrack(), PlayTrack(), PrevTrack(), StopTrack(), Volume()

Eventos:
OnChanged(), OnLoad(), OnProgress()
Uso de la clase:

La forma de utilizar la clase es muy sencilla:

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Definimos que hacer con el cambio de track
player.OnChanged = function():Void {
	var _data:Object = this.GetDataTrack();
for( var a:String in _data ){
	trace( a + ": " + _data[a] );
}
}

// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );

Utilizando algunos métodos y propiedades:

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Definimos que hacer con el cambio de track
player.OnChanged = function():Void {
	var _data:Object = this.GetDataTrack();
for( var a:String in _data ){
	trace( a + ": " + _data[a] );
}
}

// coeficiente de volumen
player.coefficientVolume = 2;

// inicio del volumen
player.initialVolume = 70;

// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );

///////////////////////////////////////////////////////////////

// Siguiente Track
player.NextTrack();

// Track Anterior
player.NextTrack();

// Play Track
player.PLayTrack();

// Stop Track
player.StopTrack();

// más volument
player.maxVolume();

// menos volument
player.minVolume();

// etc...

La clase posee dos modos de reproducción por:

STREAMING (default):

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );

NO STREAMING:

// Creamos una instancia a la clase
// una de las opciones es setearlo en el constructor
// new SoundDataLayer( false );
var player:SoundDataLayer = new SoundDataLayer();

// o bien como propiedad 
player.streming = false;

// medimos el progreso de la carga
player.OnProgress = function( _value:Number ):Void {
trace( "CARGA: " + _value + " %..." )
}

// Cargamos nuestra lista
player.load( "playList.xml", "_music/playList/" );

La clase posee tres eventos:

OnLoad: este se ejecuta una vez finalizada la carga total del archivo.

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Definimos el evento
player.OnLoad = function():Void {}

OnChanged: este se ejecuta una vez finalizada la reproducción y cambio del track, o bien cuando el cambio es manual.

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Definimos el evento
player.OnChanged = function():Void {}

OnProgress: este se ejecuta mientras se efectúa la carga, y retorna el progreso de la misma. El valor devuelto es el porcentaje de carga que posee en ese momento el archivo.>

// Creamos una instancia a la clase
var player:SoundDataLayer = new SoundDataLayer();

// Definimos el evento
player.OnProgress = function( _value:Number ):Void {
	trace( "CARGA: " + _value + " %..." )
}

NOTA: Si el constructor es creado e inicializado dentro del ámbito de una función, lo que deben utilizar es el método delegate de la clase Utils. Ya que la clase no maneja el dentro de ella el ámbito donde se ejecuta la dicha instancia.

EJ1:

import AsLib.Utils;

var PLAYER:SoundDataLayer;

var ViewTitle:Function = function ():Void {
	trace("ON_CHANGED!!!");
}

var init:Function = function ( _playlist:String, _folder:String ):Void {
	PLAYER = new SoundDataLayer();
	PLAYER.load( _playlist, _folder );
	PLAYER.OnChanged = Utils.delegate( this, ViewTitle );
}

EJ2:

var PLAYER:SoundDataLayer = new SoundDataLayer();

PLAYER.load( _playlist, _folder );

PLAYER.OnChanged = function():Void {
	trace("ON_CHANGED!!!");
}

SIN MAS?

Espero que les sea de utilidad, y que puedan experimentar en su estructura para modificarla a sus necesidades.

Criticas/mejoras/dudas/problemas, escribir a: pollyjex@emc2zen.com.ar.

Aquellos que quiera colaborar, aportando ideas o bien estructuras de código, escribir a: mfw@emc2zen.com.ar

Saludos.

PollyJex ^_^!