Por algún motivo, clear: both no acaba de funcionar cuando hay diferentes combinaciones de floats dentro del contenedor. Para solucionarlo, se puede probar a utilizar los siguientes estilos de CSS para el contenedor que contiene los floats:
overflow: auto;
height: auto;
miércoles, 4 de marzo de 2009
viernes, 27 de febrero de 2009
Trabajo con ficheros en PHP
Para leer el contenido de un directorio, pero sólo los ficheros o directorios (sin "." ni ".."):
$directorio=dir(RUTA);
while ($fichero=$directorio->read()){
//Mientras siga pudiendo leer.
//Siempre que el fichero no sea ni "." ni ".."
if ($fichero!='.' && $fichero!='..'){
//trabajo con el fichero
}
}
Para leer el fichero en bloques de 8kb (más seguro que leerlo de una vez):
$file=fopen(RUTA_FICHERO);
if ($file!=0){
//No ha dado error.
//Escribo el contenido.
$contenido = '';
while (!feof($file)) {
$contenido .= fread($file, 8192);
}
//Hago lo que tenga que hacer con el contenido del fichero.
fclose($file);
$directorio=dir(RUTA);
while ($fichero=$directorio->read()){
//Mientras siga pudiendo leer.
//Siempre que el fichero no sea ni "." ni ".."
if ($fichero!='.' && $fichero!='..'){
//trabajo con el fichero
}
}
Para leer el fichero en bloques de 8kb (más seguro que leerlo de una vez):
$file=fopen(RUTA_FICHERO);
if ($file!=0){
//No ha dado error.
//Escribo el contenido.
$contenido = '';
while (!feof($file)) {
$contenido .= fread($file, 8192);
}
//Hago lo que tenga que hacer con el contenido del fichero.
fclose($file);
Etiquetas:
ficheros,
php,
programación web
martes, 24 de febrero de 2009
Interfaces en PHP 5
La siguiente es la estructura de un interface común:
interface BeingDamage{
public function processDamage($weapon);
public function damageHealth($damage);
}
El interfaz se implementaría de la siguiente manera:
class character implements BeingDamage{
function processDamage($weapon){
//implementación
}
function damageHealth($damage){
//implementación
}
}
Es importante recordar que la reutilización de clases y métodos sugiere que conviene programar a interfaces, no a implementaciones.
interface BeingDamage{
public function processDamage($weapon);
public function damageHealth($damage);
}
El interfaz se implementaría de la siguiente manera:
class character implements BeingDamage{
function processDamage($weapon){
//implementación
}
function damageHealth($damage){
//implementación
}
}
Es importante recordar que la reutilización de clases y métodos sugiere que conviene programar a interfaces, no a implementaciones.
miércoles, 18 de febrero de 2009
Solucionar compatibilidades entre navegadores en CSS
Para evitar problemas de compatibilidades entre diferentes navegadores, sobre todo en cuanto se usen listas, conviene añadir lo siguiente a la hoja de estilos CSS:
* { margin:0; padding:0; border: 0; }
* { margin:0; padding:0; border: 0; }
Etiquetas:
compatibilidad,
css,
programación web
martes, 17 de febrero de 2009
Extraer información de un archivo de texto formateado de cierta manera
Organizo valores constantes mediante archivos ini para poder modificarlos rápidamente y que afecten diferentes sitios. Uso la siguiente función:
function devuelveValorIni($claveIni,$archivoIni){
$datos=archivoTextoAString("/ini/" . $archivoIni);
//Queda separarlo en función de los delimitadores y del texto.
$textoConvertido="[" . $claveIni;
$valorIni=extraeUnidad($datos,$textoConvertido,"]");
return $valorIni;
}
function archivoTextoAString($archivo){
//Se busca en el archivo ini los hit die para esa clase especificada.
$directorioBase=parent_directory();
// read file into string
$data = file_get_contents($directorioBase . $archivo) or die("Could not read file!");
//Teniendo ya el archivo en un string, hago la búsqueda y separación.
return $data;
}
function parent_directory(){
return dirname(dirname(__FILE__));
}
Asumo la siguiente estructura:
[LIMITEMAPA:150]
Se establece que el primer límite donde empezar a buscar es '[LIMITEMAPA:' y el último es el cierre, ']'.
function devuelveValorIni($claveIni,$archivoIni){
$datos=archivoTextoAString("/ini/" . $archivoIni);
//Queda separarlo en función de los delimitadores y del texto.
$textoConvertido="[" . $claveIni;
$valorIni=extraeUnidad($datos,$textoConvertido,"]");
return $valorIni;
}
function archivoTextoAString($archivo){
//Se busca en el archivo ini los hit die para esa clase especificada.
$directorioBase=parent_directory();
// read file into string
$data = file_get_contents($directorioBase . $archivo) or die("Could not read file!");
//Teniendo ya el archivo en un string, hago la búsqueda y separación.
return $data;
}
function parent_directory(){
return dirname(dirname(__FILE__));
}
Asumo la siguiente estructura:
[LIMITEMAPA:150]
Se establece que el primer límite donde empezar a buscar es '[LIMITEMAPA:' y el último es el cierre, ']'.
Funciones JavaScript no definidas y Firebug
A menudo una página no funciona como debería y Firebug nos devuelve que una función de JavaScript está "not defined" o "undefined". Uno tiende a pensar que se debería a que no tiene acceso a la función y el tag script no ha funcionado bien por algún motivo, pero en realidad se suele deber a un error de sintaxis. Asegúrate de que el código javascript sea correcto. También suele pasar cuando desde un archivo .js llamas a funciones de otro (como librerías Prototype).
Etiquetas:
javascript,
programación web
Pasar un array de PHP a JavaScript mediante JSON
Por algún motivo, pasar arrays de PHP a JavaScript es más complicado de lo que debería ser. Por fortuna, para arreglar el asunto podemos traducir el array de PHP a JSON.
Cualquier servidor de PHP mayor que el 5 tiene la siguiente función:
$arrayAJS=json_encode($arrayEnPHP);
Nota muy importante: nada más pasar el array PHP a JSON y enviarlo como parámetro, la función javascript lo considera un array normal y corriente. No hace falta deserializarlo.
Cualquier servidor de PHP mayor que el 5 tiene la siguiente función:
$arrayAJS=json_encode($arrayEnPHP);
Nota muy importante: nada más pasar el array PHP a JSON y enviarlo como parámetro, la función javascript lo considera un array normal y corriente. No hace falta deserializarlo.
Etiquetas:
ajax,
javascript,
json,
php,
programación web
Estilo de menús horizontales en CSS usando ambos navegadores
Uno de los elementos específicos que siempre crea problemas de compatibilidad entre los dos navegadores principales, Firefox y IE, son los menús horizontales. Hay que jugar con la propiedad margin tanto de esa capa como la que le precede, intentando combinaciones de números positivos y negativos en ambos para acabar ajustando ambos. Por ejemplo:
#PaisesContenedorLogo{
width: 700px;
height: 132px;
background-color: #888888;
background: url("../img/logo.jpg");
background-repeat: no-repeat;
margin-bottom: 16px;
}
#PaisesContenedorMenu{
background-color: #95b48b;
color: #000000;
height: 30px;
margin-top: -16px;
}
En el caso expuesto, 'PaisesContenedorLogo' está situada por encima de 'PaisesContenedorMenu' y en la misma capa, pero, como se ve, los margin no parecen muy racionales.
#PaisesContenedorLogo{
width: 700px;
height: 132px;
background-color: #888888;
background: url("../img/logo.jpg");
background-repeat: no-repeat;
margin-bottom: 16px;
}
#PaisesContenedorMenu{
background-color: #95b48b;
color: #000000;
height: 30px;
margin-top: -16px;
}
En el caso expuesto, 'PaisesContenedorLogo' está situada por encima de 'PaisesContenedorMenu' y en la misma capa, pero, como se ve, los margin no parecen muy racionales.
Etiquetas:
compatibilidad,
css,
programación web
lunes, 16 de febrero de 2009
Crear un array unidimensional en JSON
No confundir con los arrays asociativos.
{
"arrayUnidimensional" : [0,0,2,3,0,1,0,5]
}
{
"arrayUnidimensional" : [0,0,2,3,0,1,0,5]
}
Crear Request Object para recibir JSON usando AJAX
Omito el lado del servidor, pero el archivo php debe generar un texto que respete la sintaxis.
var the_object;Es conveniente limpiar la cadena enviada por el servidor para evitar posibles inyecciones de código.
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.send(null);
http_request.onreadystatechange = function () {
if ( http_request.readyState == 4 ) {
if ( http_request.status == 200 ) {
var inputJSON=http_request.responseText;
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + inputJSON + ')');
} else {
alert( "There was a problem with the URL." );
}
http_request = null;
}
};
Suscribirse a:
Entradas (Atom)