jueves, 15 de diciembre de 2011

16.- Gestores de enlazamiento y redirección para la navegación

Un gestor de enlazamiento es un programa especializado en generar o reconstruir direcciones URL válidas a partir de variables, pistas, nombres, cadenas de texto, identificadores o enlaces orientados al SEO. De hecho no siempre el enlace visible, amigable y fácilmente comprensible para la lectura del usuario puede ser interpretado, por el sistema de información. Esto implica no sólo la capacidad de construir la URL sino de establecer una estructura de decisiones condicionada por el origen desde la página en la que se efectúa el enlace (citante) y efectuar la redirección a la página de destino especificada (citada). Todos estos aspectos deben ser resueltos para crear una experiencia de navegación adecuada en sitios web dinámicos. Un ejemplo básico de gestor de enlazamiento y redirección es el que se muestra en la tabla1, utilizado para los modelos de enlace C/D, que contienen variables GET con los valores del documento enlazado. En tal caso el programa es capaz de determinar con cada variable y valor la página o documento que debe cargar o a la que debe redireccionar.

<!-- Tipo de enlace: ejemplos -->
http://wapache/index.php?page=document001
http://wapache/
index.php?page=titulo-del-documento
http://wapache/index.php?page=titulo-del-documento&date=2011-12-15
<?php
// Se establece como primera condición que la variable "page"
// con la que se conforma la URL original, sea distinta a un
// contenido vacío ó se encuentre en blanco. En tal caso, no
// se enlaza ni redirecciona ningún contenido

if($_GET[page] != ""){

   
// CASO 1 ============================================
    // Si el origen de la página citante es "index" o lo que
    // es lo mismo, la página de portada del sitio web, se
    // genera una URL ( documents/[nombre-pagina].php )

    if($origin == "index"){ 


        // Obsérvese que la función de impresión en pantalla
        // contiene un código Javascript que permite
        // redireccionar a una página web predeterminada

        echo "
        <script language='javascript'>
        window.location.href='documents/$_GET[page].php'
        </script> 

        ";

    } // Fin de caso 1


    // CASO 2 ============================================  
    // Si el origen de la página citante es otro documento que
    // se encuentra en la misma carpeta "documents", la URL
    // relativa a generar sólo requerirá el nombre del archivo
    // almacenado en la variable "page"

    if($origin == "doc"){ 

        // Se repite el código javascript con distinta URL
        // a la que debe ser redireccionado

        echo "
        <script language='javascript'>
        window.location.href='$_GET[page].php'
        </script>
        "; 

 
    }
// Fin de caso 2

} else {}
?>
 Tabla1. Gestor de enlazamiento y redirección basado en variables GET

Aunque en el ejemplo de la tabla1, se da por sentado que los contenidos se encuentran en forma de documento ó página web generada en archivo con extensión .php ó .html, también cabe la posibilidad (muy frecuente) de que la página dinámica se reedita mediante un visor de contenidos en PHP. Esto implica el uso de bases de datos MySQL en las que se almacena la información que se muestra al usuario. Por ejemplo una variable GET denominada "id" puede hacer referencia a un registro de una tabla donde se guarda la información del documento que demanda el usuario. Otras posibilidades consisten en combinar el identificador, con otros datos, como el título, autor o fecha de publicación de cada documento. Estos datos y valores combinados, ayudan a generar una URI (Uniform Resource Identifier), o lo que es lo mismo, direcciones URL unívocas que identifican cada recurso documental del sitio web o del sistema de información.

Por otro lado, el ejemplo de la tabla2, muestra un gestor de enlazamiento y redireccionamiento especializado en enlaces de tipo F, caracterizados por no disponer de extensión alguna del tipo de archivo, así como por constar de un nombre completo optimizado para su lectura y recuperación por buscadores y usuarios (friendly links). La forma de operar es distinta en cuanto a la forma de interpretar la información del enlace. En este caso no se recibe el nombre del archivo citado por método GET, de hecho no hay variables que se envíen a través de la URL. Por ese motivo es necesario captar esa información a través de la función y variable de servidor  pathinfo("$_SERVER[REQUEST_URI]"); que extrae el enlace entrante en el que hizo click el usuario. Permite obtener toda la información de directorios, subdirectorios y nombre de archivo base que corresponde al documento citado en el enlace. A este recurso "citado", se le denomina también "basename" argumento por el que se extrae su nombre. Una vez que es conocido, se pueden construir los distintos casos y condicionantes, por ejemplo; en el caso de que "basename" no sea la propia página de portada "index.php" se estará refiriendo a un objeto o elemento distinto, es decir, un documento y en tal caso el usuario pretende acceder a él. Esto implica a su vez tener en cuenta el origen del enlace, para lo que se comprueba el origen de la página citante y se redirecciona en función del caso a la página citada referida en la variable $path_parts[basename] añadiendo la extensión de tipo de archivo que corresponda.

<!-- Tipo de enlace: ejemplos -->
http://wapache/document001
http://wapache/titulo-del-documento-propiamente-dicho

http://wapache/2011-12-15/titulo-del-documento
<?php
// La variable "$path_parts" almacena la URL completa del
// enlace original. Al emplear la función "pathinfo" 
// se pueden distinguir todos los directorios, subdirectorios
// y nombre del archivo de base ó "basename" de la URL

$path_parts = pathinfo("$_SERVER[REQUEST_URI]");

// CASO 1 ============================================
// Dado que toda la información de la URL original está 
// almacenada, se consulta el nombre del archivo de base.
// Si coincide con la página index, de entrada del
// sitio web, significará que la solicitud del usuario es una
// redirección ó actualización de la página de portada.

// Debido a que el enlace a la portada es único se opta por
// dejar vacía la acción de ejecución del caso, pero podrían
// añadirse procesos de redireccionamiento exprofeso

if($path_parts[basename] == "index.php") {

// CASO 2 ============================================
// Si el nombre del archivo de base es distinto a "index.php"
// se ejecuta el caso2, comprobándose que el origen de la
// página citante es la portada del sitio. De esta forma se
// compone la URL a medida con la ruta de directorios
// correspondiente hasta el archivo demandado

elseif($origin == "index") {
  echo "
  <script language='javascript'>
  window.location.href='../documents/$path_parts[basename].php'
  </script>

  ";
}


// CASO 3 ============================================
// Si las condiciones del caso1 y 2 no se cumplen, se comprueba
// que el origen de la página citante es otro documento, al
// que se aplica una composición URL distinta

elseif($origin == "doc") {
  echo "
  <script language='javascript'>
  window.location.href='../$path_parts[basename].php'
  </script>
  ";



// CASO 4 ============================================
// Si ninguno de los casos anteriores coincide con la demanda
// se determina que no se efectue redirección alguna

else {}
 
?>
 Tabla2. Gestor de enlazamiento y redirección para modelo F de enlaces

Véanse también las siguientes referencias:

No hay comentarios:

Publicar un comentario