Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/03/2014, 03:20
Avatar de marlanga
marlanga
 
Fecha de Ingreso: enero-2011
Ubicación: Murcia
Mensajes: 1.024
Antigüedad: 13 años, 3 meses
Puntos: 206
Respuesta: [Tutorial] URLs Amigables

Las urls amigables y las bases de datos van totalmente unidas, y a veces es un dolor saber cómo crear urls amigables cuyo contenido depende de una fila de base de datos. Por ejemplo, tenemos una tienda de productos, y queremos crear una url que lleve a la página de detalle de un producto concreto.
Antes se hacía mandando el ID por GET o POST, así:

www.mipagina.com/detalle.php?id=4317

Para hacerla un poco mas amigable, se usó:
www.mipagina.com/detalle/4317-tele-sony.html

Como se puede ver, el HTACESS partía la url para coger el ID, y en realidad se llamaba a la url detalle.php con el id puesto.

Actualmente , la técnica mas novedosa es crear el la tabla "productos" un campo nuevo, en el que meter en una cadena identificadora que sea amigable y única para identificar ese producto. Este campo típicamente se llama "slug", y se crea a partir de otro campo de esa misma fila. Por ejmplo, para la tabla productos, quizás valdría su nombre. Y si su nombre no es único, se le añade su marca, su color, etc, hasta asegurarnos que la cadena amigable resultante sirve apra identificar a ese producto específico.

Para convertir una cadena en un slug (cadena amigable para la url) se usan funciones que cambien tildes y símbolos raros por vocales y símbolos válidos como "-". Por ejemplo, en mi MVC de cosecha personal uso esta función:

Código PHP:
Ver original
  1. class Util {
  2. public static function slugify($cadena, $separador="-"){
  3.         $slug = iconv('UTF-8', 'ASCII//TRANSLIT', $cadena);
  4.         $slug = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $slug);
  5.         $slug = strtolower(trim($slug, $separador));
  6.         $slug = preg_replace("/[\/_|+ -]+/", $separador, $slug);
  7.         return $slug;
  8.     }
  9. }

Sacada de http://cubiq.org/the-perfect-php-clean-url-generator

Y la llamo:

Código PHP:
Ver original
  1. Util::slugify("Ésto es una CADENA @  de ejemplo CON tildes raras ÁËÍÔÜ, eñes y # símbolos");
y la salida es: "esto-es-una-cadena-de-ejemplo-con-tildes-raras-a-e-i-o-u-enes-y-simbolos", que es perfectamente válida para enviar como URL.

Luego el archivo que procesa todas las peticiones, en el ejemplo de arriba, request.php, busca ese ese slug en el campo "slug" de la tabla que deba, y hace las operaciones que deba hacer.