Creative Commons License
Construir un directorio de Webs con PHP y MySQL. por redribera.es is licensed under a Creative Commons Reconocimiento-No comercial-Sin obras derivadas 2.5 España License.

Construir un directorio de Webs con PHP y MySQL.
por redribera - redribera

2 Construyendo nuestro directorio web.

2.2 Construyendo la estructura de secciones.

Una vez tenemos claro que nuestro directorio de enlaces debe estar categorizado y que vamos a guardar la información relativa a las categorías (o jerarquía de los enlaces), debemos de ser muy cuidadosos a la hora de elegir como implementar estas categorías.
Lo cierto es que existen muchas formas de implementar la jerarquía de los enlaces del directorio en función del modo que deseemos almacenar la información, la interacción del usuario con nuestro directorio,etc...
Para este tutorial nosotros nos hemos planteado lo siguiente:
Queremos categorizar los enlaces por la actividad a la que se dedique el sitio web (o la que defina el usuario dentro de una lista de posibles categorías). Inicialmente generaremos una lista de categorías finita, como la que vimos en la figura 2.1. Pero pensamos que conforme crezca el número de enlaces en nuestro directorio, el número de categorías también puede crecer. Además en un momento dado una subcategoría como por ejemplo Informática->Directorios, podriamos querer ubicarla en otra categoría distinta, como Internet->Directorios o Informática->Internet->Directorios. Al fin y al cabo las categorías de enlaces van a ser el sistema de organización de nuestro directorio, que estará compuesto por una tabla plana con todos los enlaces del mismo.
Por este y otros motivos que veremos necesitamos una estructura de datos que sea lo suficientemente flexible para permitirnos realizar reorganizaciones de los enlaces fácilmente.
En nuestro caso y tras pensar en el tipo de operaciones que realizaremos y la interactividad que pretendemos ofrecer al navegante, así como la importancia de poder realizar un mantenimiento sencillo y fléxible de nuestro directorio, nos hemos decidido por una estructura en árbol para las categorías de los enlaces.
Existe una multitud de estructuras en árbol, que no son objeto de este tutorial, árboles b,arboles Rojo-Negro,etc... Podeís consultar mas sobre árboles en la wikipedia.

En concreto nosotros hemos decidido usar para este tutorial una estructura de árbol como la siguiente.

Figura 2.2 - Arbol de categorías.
Figura 2.2 - Arbol de categorías.

Mi conocimiento en las estructuras de árbol, no es excesivamente grande, y de hecho los conozco de una forma muy básica, pero este tipo de árbol en concreto nos va a venir muy bien para nuestras aspiraciones, ya que además de poder organizar jerarquicamente nuestros datos en una tabla de base de datos con este tipo de estructura, al árbol en cuestión dispone de una serie de propiedades ideales para aplicar una serie de funciones que nos vendrán muy bien para nuestros propositos, ya lo veremos.
Todos los conceptos de ste árbol y el almacenamiento de una estructura jerarquica, no es de nuestra cosecha. Lo debemos agradecer al señor Gijs Van Tulder que escribió un magnifico tutorial en el que se explica maravillosamente como almacenar datos jerarquicos en una base de datos.
En este mágnifico tutorial se puede ver todos los detalles técnicos de este tipo de estructura, así como las operaciones básicas para su manipulación.
No estaría de mas leer este tutorial ,que es bastante breve, para comprender mejor porque lo vamos a utilizar. No queremos por nuestra parte incluir en este manual de redribera, contenido plagiado de otro sitio. De todos modos comentar que la característica mas importante que nos va a servir de este tipo de árbol, es la númeracion que tiene cada nodo a izquierda y derecha, en este caso, los nodos hijos de un nodo padre, tienen una numeración contenida en el rango que define el nodo padre, y ademas el número izquierdo es simpre el mas bajo y el derecho el mas alto, lo que también como podeís ver implicitamente en el recorrido del árbol en la figura 2.2 (con trazo en rojo), lo cual nos será muy útil para mostrar nuestras categorías del modo deseado.Todo ello está perfectamente explicado en el tutorial que os propusimos.
Nosotros por nuestra parte no ahondaremos mas en ese tema mas que en lo necesario que vayamos a utilizar de este tipo de estructura para nuestros propositos, que no son otros que el construir un directorio de webs.

2.3 Estructura de los datos con MySQL.

Con los requisitos que hemos obtenido, ya podemos plantearnos un estructura de datos inicial. Comenzaremos con una estructura básica, que posteriormente conforme evolucione nuestro directorio (esto ya queda como ejercicio del lector), puede irse ampliando y mejorando, de acuerdo a nuestras necesidades.
Utilizaremos la Base de Datos MySQL para construir nuestra estructura de datos, ya que esta es una base de datos muy común en muchos proveedores de Hosting, y además está muy depurada para su uso junto con php.
Asi pues la estructura de las tablas que vamos a crear quedaría de la siguiente forma:

Para la tabla de secciones intentaremos seguir la estructura de árbol que vimos anteriormente, esto es un identificador único id,el nombre de la sección nombre, el padre de la subsección padre (para el nodo raiz, este sera NULL), y los indicadores de la numeración izquierda y derecha lft y rgt.

CREATE TABLE `secciones` (
   `id` int(11) NOT NULL auto_increment,
   `nombre` varchar(30) NOT NULL default '',
   `padre` int(11) default NULL,
   `lft` int(11) NOT NULL default '0',
   `rgt` int(11) NOT NULL default '0',
   PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;

Esta es pués la estructura final para crear la tabla en MySQL. El tipo de los campos puede variar según nuestro criterio.

Las otras dos tablas que nos quedan no merecen tanta explicación, ya que la forma de almacenar los enlaces que mostraremos será en una tabla plana con mayor o menor número de campos en función de los datos que queramos captar o mostrar en nuestro directorio; por tanto estos serán muy pocos o muchos en función de nuestros criterios.
La tabla que utilizaremos nosotros para almacenar los enlaces, tendrá este aspecto:

CREATE TABLE `enlaces` (
   `id` int(11) NOT NULL auto_increment,
   `idsolicitud` int(11) default NULL,
   `fecha` date NOT NULL default '0000-00-00',
   `titulo` varchar(255) NOT NULL default '',
   `link` varchar(255) NOT NULL default '',
   `comment` text,
   `seccionid` int(11) NOT NULL default '0',
   `clave1` varchar(128) default NULL,
   PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=154 ;

Aquí podemos ver la estructura de la tabla que usaremos para almacenar nuestros enlaces a otros websites. El id,la idsolicitud la explicaremos mas adelante, el restos son campos bastante explicativos por si mismos. fecha utilizaremos para almacenar la fecha de alta del enlace,titulo nos servirá para mostrar el título o nombre del website en palabras mas coloquiales o como link a la URL definitiva. comment contendrá una breve descripción del sitio que queremos anunciar, link contendrá la URL del sitio al que apuntamos, URL de la forma http://www.nombredominio.sufijo, seccionid será la clave ajena a la tabla de secciones que vimos anteriormente y que categorizará el enlace (No hemos incluido la clave ajena en la definición de la tabla ya que todo lo controlaremos mediante scripts. Finalmente un campo clave1 que contendrá las palabras claves de busqueda dentro de nuestro propio directorio.

Por último la tabla para almacenar las solicitudes de inclusión de sitios, para los usuarios de nuestro web site.
Antes de poner la estructura que utilizaremos repasemos algunos conceptos. Suele ser habitual en la mayoría de directorios solicitar a un usuario que desee incluir un sitio en un directorio, tanto los datos de información del sitio (que vimos en la definición anterior de la tabla), y además algún dato de contacto como el nombre de una persona de contacto y una dirección de correo electrónico para comunicarse con el solicitante.
Habitualmente un usuario solicita que su sitio sea incluido en nuestro directorio, a partir de ahí el enlace todavía no es visible y los datos se almacenan en una tabla, hasta que un editor (normalmente nosotros) revisa la solicitud del usuario, tras analizar la URL que nos envían decidimos si la aceptamos o no en nuestro directorio en función del contenido o la estética de la misma. Tras este proceso de validación, si decidimos incluir en nuestro directorio el enlace, traspasamos los datos correspondientes a nuestra tabla de enlaces y comunicamos al usuario la aceptación de su enlace en nuestro directorio (usualmente por email).
Es por eso que esta última tabla contendrá información similar a la tabla anterior, y además datos de contacto con el solicitante. Posteriormente decidiremos si variar alguno de los datos definitivos.
Así pues la tabla de solicitudes quedrá de la siguiente forma:

CREATE TABLE `solicitudes` (
   `id` int(11) NOT NULL auto_increment,
   `fecha` date NOT NULL default '0000-00-00',
   `titulo` varchar(255) NOT NULL default '',
   `link` varchar(255) NOT NULL default '',
   `comment` text,
   `seccionid` int(11) NOT NULL default '0',
   `clave1` varchar(128) default NULL,
   `nombrecontacto` varchar(128) default NULL,
   `emailcontacto` varchar(255) default NULL,
   PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=154 ;

Con esto ya tenemos definida la estructura de datos de nuestro directorio, en el siguiente capítulo vamos a ver como manipular esta información y a generar las páginas basicas para su funcionamiento.

« Anterior
Indice
Siguiente »