Tutorial de TinyMCE. Parte III.

Hoy vamos a ver dos propiedades muy interesantes para extender los diálogos de enlaces y de imágenes. Estas propiedades son external_link_list_url y external_image_list_url. Estas propiedades nos permiten añadir a los diálogos una lista de enlaces y de imágenes en un archivo externo. Este archivo contendrá código en JavaScript donde se define un array con los enlaces y las imágenes. Veamos como quedaría el código de nuestro quinto ejemplo:

ejemploTinyMCE_5.html:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Quinto ejemplo con TinyMCE</title>
<script type="text/javascript" src="tiny_mce/tiny_mce.js"></script>
<script type="text/javascript" src="ejemploTinyMCE_5.js"></script>
<style>
#editor { width: 700px; height: 550px;}
</style>
</head>
<body onload="cargarTinyMCE();">
<h1>Quinto ejemplo con TinyMCE</h1>
<textarea id="editor"></textarea><br/>
</body>
</html>

ejemploTinyMCE_5.js:

function cargarTinyMCE()
{
	tinyMCE.init({
		mode : "exact",
		elements: "editor",
		theme : "advanced",
		plugins: "fullscreen, advlink",
		theme_advanced_buttons1 : "bold, italic, underline, separator, justifyleft, justifycenter, justifyright, justifyfull ",
		theme_advanced_buttons2 : "bullist,numlist,separator,outdent,indent,separator,undo,redo",
		theme_advanced_buttons3 : "image, link, fullscreen",
		theme_advanced_toolbar_location: "top",
		theme_advanced_toolbar_align: "left",
		external_link_list_url: "ejemploTinyMCE_5_links.js",
		external_image_list_url: "ejemploTinyMCE_5_images.php"
	});

  }

Se puede observar que se han añadido las dos opciones mencionadas. También vemos que en el caso de external_image_list_url se ha puesto como valor un archivo PHP. Esto es así porque se puede generar esta lista a partir de un script PHP, dando de este modo un número infinito de posibilidades. Esto también se puede hacer con la opción external_link_list_url. Veamos el código de los archivos:

ejemploTinyMCE_5_links.js:

var tinyMCELinkList = new Array(
	// Nombre, URL
	["Moxiecode", "http://www.moxiecode.com"],
	["mjcarrascosa.com", "http://mjcarrascosa.com"],
	["Google", "http://www.google.com"]
);

En el archivo se define un array llamado tinyMCELinkList. Cada elemento es a su vez un array con dos elementos, el primero el nombre de la URL (el que aparecerá en la lista) y el segundo la URL en si.

ejemploTinyMCE_5_images.php:

<?php

$dir = opendir(dirname(__FILE__).'/images');

$salida = "var tinyMCEImageList = new Array(\n";
$salida.= "//Nombre, URL\n";

$imagenes = array();
while(($imagen = readdir($dir)) != false)
{
	if($imagen != '.' && $imagen != '..')
	{
		$imagenes[] = '["'.$imagen.'", "images/'.$imagen.'"]';
	}
}

$salida .= join(",\n", $imagenes);
$salida .= ');';
header('Content-type: text/javascript');
echo $salida;
?>

Este archivo nos genera un array llamado tinyMCEImageList. En este array cada elemento es también un array con dos elementos, el primero el nombre de la imagen y el segundo la URL de esta. El script lo que hace es buscar todos los archivos de la carpeta images y meterlos en el array. También enviamos la cabecera Content-Type con el valor text/javascript, para que el navegador sepa que lo que recibe es código con JavaScript. El resultado de ejecutar este script es:

var tinyMCEImageList = new Array(
//Nombre, URL
["imagen1.jpg", "images/imagen1.jpg"],
["imagen2.jpg", "images/imagen2.jpg"],
["imagen3.jpg", "images/imagen3.jpg"]);

Con esto termina la tercera parte de este tutorial. Para finalizar el código de los ejemplos:

Ejemplos del tutorial de TinyMCE Parte III

No que decir tiene que cualquier duda se puede preguntar en los comentarios.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Gráficos en PHP con JpGraph. Parte I

JpGraph es una librería que nos permite generar gráficos mediante PHP, de una forma realmente sencilla y bajo nuestro total control. Sus principales características son:

  • Detecta automáticamente que versión del GD.
  • Permite insertar texto a los gráficos y soporte para tipos de letra.
  • Niveles de transparencia.
  • Posibilidad de generar complejos gráficos de Gantt.
  • Manejo de las escalas para los ejes del gráfico.
  • Soporta varios formatos de imágenes: PNG, GIF y JPG.
  • Permite generar gráficas de barras horizontales.
  • Soporte para gráficas de tipo científico.
  • Soporte para generación de escala automática, dependiendo de los datos.
  • Soporta para distintos tipos de relleno para las gráficas.
  • Una excelente documentación.

Vamos a ver un par de ejemplos.

Generación de un gráfico de lineas

Lo primero que vamos a ver es como generar un gráfico de lineas:

<?php
include("include/jpgraph.php");
include("include/jpgraph_line.php");
//Array con los datos del gráfico
$datos = array(9, 5, 12, 11, 6, 10, 9, 11, 10, 4, 7, 3);
// Clase que genera el gráfico de tamaño 400x300
$grafico = new Graph(400, 300, "auto");
$grafico->SetScale("textlin");
// Creamos un juego de datos, del tipo linea
$lineplot = new LinePlot($datos);
$lineplot->SetColor("red");
// Añadimos el juego de datos
$grafico->Add($lineplot);
// Generamos el gráfico
$grafico->Stroke();
?>

Este gráfico quedaría de la siguiente forma:

Primer ejemplo con JpGraph

Podemos tener también varios juegos de datos:

<?php
include("include/jpgraph.php");
include("include/jpgraph_line.php");
$datos1 = array(9, 5, 12, 11, 6, 10, 9, 11, 10, 4, 7, 3);
$datos2 = array(5, 7, 1, 11, 13, 4, 9, 6, 12, 7, 1, 4);
$grafico = new Graph(400, 300, "auto");
$grafico->SetScale("textlin");
$lineplot1 = new LinePlot($datos1);
$lineplot1->SetColor("red");
$lineplot2 = new LinePlot($datos2);
$lineplot2->SetColor("green");
$grafico->Add($lineplot1);
$grafico->Add($lineplot2);
$grafico->Stroke();
?>
<

Este gráfico quedaría de la siguiente manera:

Segundo ejemplo con JpGraph

Podemos además añadir texto al gráfico:

<?php
include("include/jpgraph.php");
include("include/jpgraph_line.php");
$datos1 = array(9, 5, 12, 11, 6, 10, 9, 11, 10, 4, 7, 3);
$datos2 = array(5, 7, 1, 11, 13, 4, 9, 6, 12, 7, 1, 4);
$grafico = new Graph(400, 300, "auto");
$grafico->SetScale("textlin");
// Titulo del gráfico
$grafico->title->Set("Ejemplo JpGraph");
// Etiqueta para el eje X
$grafico->xaxis->title->Set("Eje X");
// Etiqueta para el eje Y
$grafico->yaxis->title->Set("Eje Y");
$lineplot1 = new LinePlot($datos1);
$lineplot1->SetColor("red");
$lineplot2 = new LinePlot($datos2);
$lineplot2->SetColor("green");
$grafico->Add($lineplot1);
$grafico->Add($lineplot2);
$grafico->Stroke();
?>

Esta vez el gráfico nos quedaría de la siguiente forma:

Tercer ejemplo con JpGraph

Como se puede ver es bastante sencillo e intuitivo. Pero con esto basta por hoy, en próximos días veremos otros tipos de gráficos y como personalizar estos mucho más.

Y para finalizar los archivos con los ejemplos (no incluye JpGraph, que hay que meterlo en una carpeta llamada include):

Ejemplos con JpGraph. Parte I.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Mostrar imagenes desde un script en PHP

En ocasiones nos puede interesar generar una imagen desde un script en PHP (por ejemplo un gráfico o aplicarle el efecto polaroid que expliqué aquí hace poco). Para enviarla al navegador existen varias funciones de la librería GD dependiendo del formato que queramos, que son:

Función Formato
image2wbmp WBMP
imagegd2 GD2
imagegd GD
imagegif GIF
imagejpeg JPEG
imagepng PNG
imagexmb XBM

Estas funciones nos pueden servir también para guardar la imagen en un archivo, pasándole el nombre de este, y nos permiten algunos parámetros adicionales como puede ser la calidad de la imagen, aunque esto último varía dependiendo del formato.

Lo que tenemos que hacer es enviarle al navegador la cabecera ‘Content-Type’ con el MIME Type del formato que queramos y después llamar a alguna de estas funciones indicándole un recurso de imagen. Aquí un pequeño ejemplo que carga una imagen llamada ‘imagenx.jpg’, donde x es un valor que se pasa como parámetro al script:

<?php
//El nombre de la imagen
$nombreImagen = 'imagen'.$_GET['id'].'.jpg';
//Cargamos la imagen en formato JPEG
$imagen = imagecreatefromjpeg($nombreImagen);
//Enviamos la cabecera Content-Type
header('Content-Type: image/jpeg');
//Enviamos la imagen al navegador
imagejpeg($imagen);
//Destruimos la imagen
imagedestroy($imagen);
?>

Además de usar la función imagejpeg hemos usado la función imagecreatefromjpeg, que carga la imagen a partir de un fichero JPEG. Lo mejor, como siempre recomiendo, es mirar la documentación de GD, donde vienen explicadas todas las funciones de esta librería.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Efecto polaroid con PHP y GD

Hoy vamos a ver una función que nos permite aplicarle un efecto polariod a una imagen.

La función es:

<?php
/**
 * Función para aplicar el efecto polaroid a una imagen.
 *
 * @param string $path Ruta de la imagen
 * @param float $giro Angulo de giro de la imagen
 * @param int $rfondo componente rojo del color de fondo
 * @param int $gfondo componente verde del color de fondo
 * @param int $bfondo componente azul del color de fondo
 * @return resource imagen con el efecto polaroid aplicada
 */
function efectoPolaroid($path, $giro, $rfondo, $gfondo, $bfondo)
{
	// Cargamos la imagen a la que queremos aplicar el efecto polaroid
	$imgBase = imagecreatefromjpeg($path);
	//Creamos una nueva imagen.
	$img = imagecreatetruecolor(imagesx($imgBase) + 25, imagesy($imgBase) + 65);
	$blanco = imagecolorallocate($img, 255,255,255);

	//Rellenamos la nueva imagen de blanco
	imagefill($img,0,0, $blanco);

	//Copiamos la imagen a la que queremos aplicar el efecto polariod en nuestra nueva imagen.
	imagecopy($img, $imgBase, 11, 11, 0, 0, imagesx($imgBase), imagesy($imgBase));

	//Eliminamos nuestra imagen de memoria, ya que ya no hace falya
	imagedestroy($imgBase);

	//Color del borde
	$color = imagecolorallocate($img, 192,192,192);
	//Le ponemos un borde gris a nuestra imagen.
	imagerectangle($img, 0,0, imagesx($img)-4, imagesy($img)-4, $color);

	//Colores para la sombra
	$gris1 = imagecolorallocate($img, 208,208,208);
	$gris2 = imagecolorallocate($img, 224,224,224);
	$gris3 = imagecolorallocate($img, 240,240,240);

	//Le añadimos una pequeña sombra
	imageline($img, 2, imagesy($img)-3, imagesx($img)-1,imagesy($img)-3,$gris1);
	imageline($img, 4, imagesy($img)-2, imagesx($img)-1,imagesy($img)-2,$gris2);
	imageline($img, 6, imagesy($img)-1, imagesx($img)-1,imagesy($img)-1,$gris3);
	imageline($img, imagesx($img)-3, 2, imagesx($img)-3,imagesy($img)-4,$gris1);
	imageline($img, imagesx($img)-2, 4, imagesx($img)-2,imagesy($img)-4,$gris2);
	imageline($img, imagesx($img)-1, 6, imagesx($img)-1,imagesy($img)-4,$gris3);

	//Rotamos la imagen
	$fondo = imagecolorallocate($img, $rfondo, $gfondo, $bfondo);
	$rotatedImg = imagerotate($img, $giro, $fondo);

	//Destruimos la imagen con la que hemos estado trabajando
	imagedestroy($img);

	//Devolvemos la imagen rotada
	return $rotatedImg;
}
?>

Aplicando la función a la siguiente imagen, con angulo de rotación -25º y color de fondo blanco:

imagen para aplicarle el efecto polaroid

imagen para aplicarle el efecto polaroid

Nos queda esta otra:

Imagen con efecto polariod

Imagen con efecto polariod

Ahora la descarga del archivo con la función con el efecto polaroid:

Código con la función del efecto polaroid

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Envio de correo usando PHPMailer

Es relativamente fácil enviar correo con PHP usando la función mail(). Pero en algunas ocasiones querremos hacer algo más complejo pero de forma que nos cueste menos trabajo, y de paso que nuestro código quede más legible.

Para ello podemos hacer uso de la clase PHPMailer. Lo primero que tenemos que hacer es incluir la clase PHPMailer. Acto seguido creamos una instancia de la clase. A continuación vamos a ver cuales son:

Nombre Descripción Valor por defecto
AltBody Texto alternativo. Para los mensajes en solo texto. “”
Body Cuerpo del email. Puede ir en formato HTML. “”
CharSet Conjunto de caracteres del correo. iso-8859-1
ConfirmReadingTo Dirección a la que se enviará una confirmación de lectura del correo. “”
ErrorInfo Información sobre el último error producido. “”
From Dirección de origen del mensaje. root@localhost
FromName Nombre del emisor del mensaje. Root User
Host Servidor SMTP a través del cual se enviará el correo. localhost
Mailer Método mediante el cual se enviará el correo. Puede ser mail, sendmail o smtp. mail
Password Contraseña del servidor SMTP “”
PluginDir Directorio donde se encuentran los plugins. Por ejemplo el de envio por SMTP. “”
Port Puerto del servidor SMTP. 25
Priority Prioridad del email. (1 = Alta, 3 = Normal, 5 = Baja) 3
ReplyTo Direcciones a las que responder el correo. array()
SMTPAuth Establece si hay o no autenticación SMTP. false
Subject Asunto del correo. “”
Timeout Tiempo de espera antes de producirse un error den TimeOut 10
Username Usuario del servidor SMTP “”
WordWrap Ancho máximo del mensaje. 0

Ahora veamos los principales métodos:

Nombre Retorno Parámetros Descripción
AddAddress void $address: dirección de correo.
$name: nombre del destinatario. Este parámetro es opcional.
Añade una dirección de destino para el correo.
AddAttachment bool $path: Ruta del archivo.
$name: Nombre del archivo.
$encoding: Tipo de codificación. Por defecto base64.
$type: Tipo MIME del archivo. Por defecto application/octet-stream.
Añade un archivo adjunto al mensaje.
AddBCC void $address: Dirección que queremos añadir.
$name: Nombre del destinatario. Este parámetro es opcional.
Añade una dirección BCC.
AddCC void $address: Dirección que queremos añadir.
$name: Nombre del destinatario. Este parámetro es opcional.
Añade una dirección como CC.
AddReplyTo void $address: Dirección que queremos añadir.
$name: Nombre del destinatario. Este parámetro es opcional.
Añade una dirección para el Reply To.
IsHTML void $bool: indica si el mesaje es en formato HTML Establece un mensaje como HTML.
Send bool Envía el mensaje. Devuelve true si se envía correctamente. En caso de devolver false podemos consultar la propiedad ErrorInfo para saber que error ha ocurrido.

Después de esto vamos a ver un pequeño ejemplo:

<?
	include("class.phpmailer.php");

	//Creamos la instancia de la clase PHPMAiler
	$mail = new phpmailer();

	//El método que usaremos es por SMTP
	$mail->Mailer = "smtp";

	// Los datos necesarios para enviar mediante SMTP
	$mail->Host = "smtp.nuestrohost.com";
	$mail->SMTPAuth = true;
	$mail->Username = "cuenta@nuestrohost.com";
	$mail->Password = "password";

	// Asignamos el From y el FromName para que el destinatario sepa quien
	// envía el correo
	$mail->From = "cuenta@nuestrohost.com";
	$mail->FromName = "Manuel Carrascosa de la Blanca";

	//Añadimos la dirección del destinatario
	$mail->AddAddress("direccion@hostdestino.com");

	//Asignamos el subject, el cuerpo del mensaje y el correo alternativo
	$mail->Subject = "Ejemplo de PHPMailer";
	$mail->Body = "<p>Esto es un <strong>ejemplo</strong> de correo.</p>";
	$mail->AltBody = "Esto es un ejemplo de correo.";

	//Si al enviar el correo devuelve true es que todo ha ido bien.
	if($mail->Send())
	{
		//Sacamos un mensaje de que todo ha ido correctamente.
   		echo "Mensaje enviado correctamente.";
	}
	else
	{
		//Sacamos un mensaje con el error.
		echo "Ocurrió un error al enviar el correo electrónico.";
		echo "<br/><strong>Información:</strong><br/>".$mail->ErrorInfo;
	}
?>

El código es autoexplicativo, pero si tenéis alguna duda se puede preguntar en los comentarios sin problema alguno.

Normalmente suelo recomendar consultar la documentación de las librerías que comento en el blog. Esta vez no va a ser menos y la podéis consultar en la web de PHPMailer. Hay que ir al siguiente menú: Products > PHPMailer > support – x, donde la x es un tema documentado, como los métodos, las propiedades o un tutorial.

En este caso no se adjunta archivo con el código del ejemplo, ya que no funcionaría directamente al tener que configurar bien los datos del emisor y el receptor y los datos del servidor SMTP. Pero tenéis la opción de copiar y pegar y colocar los datos de acuerdo con vuestras necesidades.

Artículos relacionados:

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto