
Diario de Honduras - fotos de mi última gran aventura
Algunas fotos (ejemplo del tutorial Fotolog en PHP)
publicado el 25 de Mayo 2005
Enlace permanente: http://www.marciobarrios.com/programacion-fotolog
Hoy voy a mostrar la manera más fácil que he encontrado de programar un fotolog, seguro que en la red habéis visto muchos y muy variados, yo simplemente os propongo una opción más, eso sí, mucho más sencilla de generar que la mayoría. Como bien indica el nombre propongo una manera más de crear una galería de fotos, una especie de album digital para que puedas colgar tus fotos de manera fácil y rápida.
Antes de ver el código voy a explicar la metodología; es muy simple, solo se trata de dos funciones, una para generar un menú y otra para generar las fotos del fotolog. Esta es la base, evidentemente yo sólo os aporto el código en php, pero luego cada uno podeis maquetar la web con css de la manera que queráis, tenéis un ejemplo en el fotolog de mi web, hay mil posibilidades. Para esto lo único que necesitáis es un servidor que soporte php y lo demás es coser y cantar. Evidentemente las fotos las teneis que subir al servidor, o bien con un cliente FTP (recomiendo el freeware FileZilla) o mediante un script php que os hagais para subir una foto a un directorio en concreto, creando el directorio incluso o redimensionando la foto, pero esto no lo voy a hacer porque la red está plagada de códigos así, si no encontrais buscad este tipo de códigos en foros del web, que además de estar ya los códigos os ayudaran si tenéis algun problema.
Bien, el siguiente paso es distribuir las fotos en carpetas, nuestro php tanto para generar el menu como las fotos leerá estas carpetas, así que cada nombre de carpeta será un enlace del menú de nuestro fotolog, así de sencillo, la primera función se encargará de leer el nombre de todas las carpetas y generar las lista de enlaces para poder ver las fotos de cada galería, es decir, de cada carpeta:
<?
function generar_menu(){
echo '<ul><li><a href=\'/fotolog\'>Principal</a></li>';
$dir = '../fotolog';
$directorio=opendir($dir);
while ($archivo = readdir($directorio)) {
if ($archivo=='.' || $archivo=='..') continue;
elseif(is_dir("$dir/$archivo"))
echo "<li><a href='?dir=".$dir."/".$archivo."/'>
$archivo</a></li>";
}
closedir($directorio);
echo '</ul>';
}
?>
Ya véis la funcion es muy corta, lo primero que hago es una lista con un enlace de la página principal (en mi caso todo lo tengo metido en una carpeta que se llama 'fotolog'), después abro el directorio con la funcion opendir y empiezo a leer sólo las carpetas, para generar un enlace con cada nombre de carpeta, de manera que le paso por url la ruta.
Bueno ahora sólo nos queda ver la manera de mostrar las fotos, hay que tener en cuenta que uso una nomenclatura concreta para los nombres de las fotos, cada nombre de foto tiene la siguiente estructura: lugar-componente1,componente2-00.00.0000.jpg, de esta manera luego parseo el nombre y puedo mostrar estos datos en los pies de las fotos sin guardar esta información en ningún sitio. Otra cosa a tener en cuenta ya que luego habrá que pasearlo correctamente es la posibilidad de que haya dos fotos del mismo dia, en el mismo lugar y con los mismos componentes, en este caso simplemente añadiriamos al lugar un punto seguido del numero correspondiente ( lugar.2-componente1,componente2-00.00.0000.jpg ). Sabiendo esto vamos a ver el código:
<?
function mostrar_fotos(){
//miro el directorio que me pasan por la url
$dir = (isset($_GET['dir']))?$_GET['dir']:'../fotolog';
$directorio=opendir($dir);
//si lo que me pasan por la url es la principal, en vez de mostrar fotos muestro un texto de bienvenida
if ($dir=='../fotolog') echo 'texto de bienvenida';
//sino empiezo a desglosar el nombre de la imagen y a mostrarla
while ($archivo = readdir($directorio)) {
if ($archivo=='.' || $archivo=='..') continue;
else {
//desgloso nombre de foto y lo muestro
$partes=explode('-',$archivo);
$extension=explode('.',$archivo);
$extension=end($extension);
$lugar=$partes[0];
$lugar2=explode('.',$lugar);
if ($lugar2!=$lugar) $lugar=$lugar2[0];
$componentes=$partes[1];
$fecha=explode('.',$partes[2]);
if ($fecha[0]=='nofecha') $fecha='No disponible';
//mes y año, pero no dia
else if(count($fecha)==3) $fecha=$fecha[0].'-'.$fecha[1];
//solo año
else if(count($fecha)==2) $fecha= $fecha[0];
else $fecha=$fecha[0].'-'.$fecha[1].'-'.$fecha[2];
$fecha_upload=date("Y-m-d H:i:s");
$ruta=$dir.$archivo;
if ($extension=='jpg'){
echo
"<a href='$ruta' title='lugar:$lugar
componentes: $componentes fecha:$fecha'>
<img src='$ruta' alt='lugar:$lugar
componentes: $componentes
fecha:$fecha' /></a>
<p>lugar: $lugar<br />
componentes: $componentes<br />
fecha: $fecha</p>";
}
}
}
closedir($directorio);
}
?>
En principio creo que queda todo claro, con estas dos funciones ejecutadas en vuestro html donde os parezca conveniente lograréis una sencilla galería de fotos, experimentad, cambiad el código a vuestro gusto, se pueden añadir muchas cosas y mejorar el código que he puesto de base, solo es un punto de partida. Un ejemplo del resultado final hecho por mi lo podeis observar en mi fotolog.
Hasta pronto!