Rent A Coder

Algunas funciones en PHP

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Revisando unos archivos que tenía por ahi, encontré algo que había hecho hace un tiempo cuando llegué a necesitarlo. Se trata de las funciones str_split() y array_combine() para una versión de PHP menor a la 5. Aún cuando apoyo la migración hacia PHP5, puede que a alguien le puedan ser de utilidad estas funciones (y me sirve tenerlas como apunte.. nunca se sabe xD).

Es muy posible que haya formas mas simples y rápidas, pero en fin.. aqui están:

if (!function_exists('array_combine')) {
	function array_combine($a, $b) {
		$c = array();
		foreach ($a as $k)	$c[$k] = array_shift($b);
		return $c;
	}
}

if (!function_exists('str_split')) {
	function str_split($s, $c = 1) {
		return preg_split('/(.{'.$c.'})/i', $s, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY);
	}
}

De paso dejo una función que dado un color en forma ff0000, devuelve un arreglo con los valores de RGB.. bueno, es mas fácil entenderlo al ver la función xD

function html2rgb($color = null) {
	return ($color == null) ? false : array_map('hexdec', function_exists('str_split') ? str_split($color, 2) : preg_split('/([0-9a-f]{2})/i', $color, -1, PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)) ;
}

$color = "CC00FF";
list($rojo, $verde, $azul) = html2rgb($color);

Esta función la usé en una clase que hice hace tiempo para crear una imagen con texto. Para mas info, nada mejor que ver la clase en PHP-Hispano.

Internet Explorer y max-height

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Bueno, 6:30 de la mañana y aún ando aqui, todo culpa de IE y [sarcasmo]su grandioso soporte de los estándares[/sarcasmo]. Al poner el plugin para resaltar la sintaxis del código escrito, quize hacer que si el código era muy grande lo mostrara con un scroll y asi no alargar tanto la página. En firefox esto es demasiado fácil usando la propiedad max-height, pero cuando se trata de IE llegan los problemas.

Primero encontré un hack de como emular la propiedad min-height, pero no me servía para lo que quería. Encontré una librería que según decía resolvería mi problema, pero por alguna razón no funcionó.

Por fin, despúes de un rato más de estar buscando, di con la solución. Consiste en usar el siguiente código:


selector {
  height: expression( this.scrollHeight > 200 ? "200px" : "auto" );
}

Lo que equivale a un max-height: 200px; que interpretan correctamente los buenos navegadores. Ahora por fin me gusta como se ve el bloque de código tanto en Firefox como en Internet Explorer (no he probado en otros navegadores) y puedo ir a dormir en paz :)

PD. También he instalado otro plugin para poner formularios, en este caso he puesto el formulario de Contacto.

Función Thumb

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Bueno, ando probando cosas en el blog, y ahora será el coloreado de sintaxis de código. Esta es una funcion que hice hace tiempo y que sirve para redimensionar una imagen proporcionalmente. Su modo de uso es bastante sencillo, consta de 5 parametros, dos de ellos opcionales:

$img - La imagen a redimensionar (string)
$w - El ancho máximo (int)
$h - La altura máxima (int)
$fill - Si la imagen es mas chica, ¿se agranda al tamaño máximo (true, por defecto)? (boolean/opcional)
$save - ¿Guarda la imagen (true) o la muestra en el navegador (false, por defecto)? (boolean/opcional)

Ademas, cuando el 5º parámetro se pone en true (es decir, que la imagen se guarde en lugar de mostrarse), devuelve un arreglo que consiste en el nombre del thumbnail y sus medidas (ancho y alto).

list($thumbnail, $ancho, $alto) = thumb("imagen.jpg", 300, 300, true, true);
<?php
function thumb($img, $w, $h, $fill = true, $save = false) {
	if (!extension_loaded('gd') && !extension_loaded('gd2')) {
		trigger_error("No dispones de la libreria GD para generar la imagen.", E_USER_WARNING);
		return false;
	}

	$imgInfo = getimagesize($img);
	switch ($imgInfo[2]) {
		case 1: $im = imagecreatefromgif($img); break;
		case 2: $im = imagecreatefromjpeg($img);  break;
		case 3: $im = imagecreatefrompng($img); break;
		default:  trigger_error('Tipo de imagen no reconocido.', E_USER_WARNING);  break;
	}

	//Esta parte donde se sacan las medidas esta tomada de http://php-hispano.net/archivos/Funciones/170/1
	if ($imgInfo[0] <= $w && $imgInfo[1] <= $h && !$fill) {
		$nHeight = $imgInfo[1];
		$nWidth = $imgInfo[0];
	}else{
		if ($w/$imgInfo[0] < $h/$imgInfo[1]) {
			$nWidth = $w;
			$nHeight = $imgInfo[1]*($w/$imgInfo[0]);
		}else{
			$nWidth = $imgInfo[0]*($h/$imgInfo[1]);
			$nHeight = $h;
		}
	}

	$nWidth = round($nWidth);
	$nHeight = round($nHeight);

	$newImg = imagecreatetruecolor($nWidth, $nHeight);

	imagecopyresampled($newImg, $im, 0, 0, 0, 0, $nWidth, $nHeight, $imgInfo[0], $imgInfo[1]);

	if ($save === true) {
		$name = array_shift(explode(".", $img, 2)).".th.".strtolower(array_pop(explode(".", $img)));

		if (!file_exists($name)) {
			switch ($imgInfo[2]) {
				case 1: imagegif($newImg, $name); break;
				case 2: imagejpeg($newImg, $name);  break;
				case 3: imagepng($newImg, $name); break;
				default:  trigger_error('Imposible mostrar la imagen.', E_USER_WARNING);  break;
			}
		}
		return array($name, $nWidth, $nHeight);
	}else{
		header("Content-type: ". $imgInfo['mime']);

		switch ($imgInfo[2]) {
			case 1: imagegif($newImg); break;
			case 2: imagejpeg($newImg);  break;
			case 3: imagepng($newImg); break;
			default:  trigger_error('Imposible mostrar la imagen.', E_USER_WARNING);  break;
		}

		imagedestroy($newImg);
	}
}
?>

Antes de ponerla aqui le hice unas modificaciones, espero aun sirva xD

Google: SoC

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Argh, por fin encuentro una mala razón para no estar estudiando: no puedo participar en el Google Summer of Code. Viendo los proyectos que hay, solo podría participar en aquellos que usen php, y entre ellos estaba viendo la to-do list de Coppermine Gallery.. muchas cosas de las que hay ahí estoy seguro que podría hacerlas u_u..

  • Text on images (True Type)
  • Documentation for newly-added watermarking feature
  • i18n of installer
  • Add rel=nofollow to the links that can be created by users in bbcode
  • log in with email address instead of password
  • Delete files older than XXX days to save webspace
  • Textarea in util.php to let user enter any query (similar to phpMyAdmin)
  • Set “Visitors can upload files” to yes for all albums at once
  • option to export albums/galeries/categories to an HTML album
  • RSS feed
  • New - since last visit icon
  • etc

Ains.. se veía tan interesante T-T.. y con eso de que dan USD $5000 (4500 para el estudiante, 500 para la organización) por proyecto, pues saldría bastante bien xD.. aun si en este caso varias contaran como uno solo por su simplicidad.

Lástima, pero no importa xD.. me serviría para distraerme, pero si funciona lo que estoy planeando hacer, entonces no tendría tiempo para eso. Igual en estos días veré si puedo hacer algo para la Coppermine Gallery.. siempre he querido colaborar en algún proyecto open source, y creo que esta sería una buena oportunidad.

C’ya!

Life.class.php

Imprimir Imprimir - Enviar a un amigo Enviar a un amigo
12345 (No calificado)
Loading ... Loading ...

Estaba aburrido… Life.class.php

<?php
include("Life.class.php");
$myLife = new Life();

$myLife->assignName('Eduardo');
$myLife->assignBirth('27-08-1986');
$myLife->setStatus('Sad');
$myLife->addTalent('Make people feel bad..');
$myLife->addNeed('Someone who i can talk with..');

$myLife->getLife();
?>

Y el resultado?

Hi, my name is Eduardo, i’m 20 years old. Today i feel Sad. I’m good for:

* Make people feel bad..

And why i feel Sad today? Because i need:

* Someone who i can talk with..

Bueno, nunca había trabajado con clases en PHP.. por algo se empieza =P

Página 2 de 3«123»