Reto de programación. Lógica para generar urls y filtros.

Ayer me he tenido que pelear con una tarea bastante interesante pero al mismo tiempo lo más complicado que he hecho en los últimos 2 meses.
Después de todo el día no he conseguido sacar ninguna lógica óptima. Hice una cuantas funciones pero al final las tuve que descartar porque el código no era escalable.

Hoy seguiré con ello pero antes de nada lo voy a postear porque me ha resultado muy muy interesante y quiero compartirlo, y al mismo tiempo que lo voy escribiendo se me van ocurriendo cosas.

Espero explicarlo lo mejor posible.

Lo que tenemos

Poniendo en situación. Que datos conocemos.

  • Conocemos los tipos de filtro que se obtienen de base de datos.
  • Los filtros seleccionados que se obtienen de la url

Una página con un listado de artículos (de lo que sea, posts de un blog, listado de coches, etc.. lo que sea) , pero este contenido puede ser filtrado por 1 hasta 4 diferentes filtros, lo mejor es pensar en n filtros.

Desde base de datos se obtienen todos los filtros y almacenamos en sendos arrays.

Imaginemos que por ejemplo un listado de nombres de niños, se puede ir filtrando por 4 tipos.

Por género del nombre

  Array
(
    [1] => Masculino
    [2] => Femenino
)

Por origen del nombre

  Array
(
    [1] => Árabe
    [2] => Hebreo
    [3] => Latín
    [4] => Japones
)

Por letra que empieza

  Array
(
    [1] => empieza con a
    [2] => empieza con b
    [3] => empieza con c
    [4] => empieza con d
)

Por número de letras que contiene

  Array
(
    [1] => con 3 letras
    [2] => con 4 letras
    [3] => con 5 letras
    [4] => con 6 letras
)

O bien otro listado puede tener 3 filtros disponibles. Imaginemos un filtrado para un listado de coches.

Por tipo combustible

  Array
(
    [1] => gasolina
    [2] => diesel
)

Por Marca de coche

  Array
(
    [1] => Audi
    [2] => Mercedes
    [3] => Ford
    [4] => Seat
)

Por color del coche.

  Array
(
    [1] => Rojo
    [2] => Negro
    [3] => Gris metalizado
    [4] => Blanco
)

Bueno, esto es lo primero que conocemos. Los arrays con los tipos de filtrado que se pueden generar.
A partir de estos arrays con filtros, se generan las urls a las diferentes paginas que muestran el contenido.

De manera que podemos ir a mi_web.com/coches/audi/rojo y toma como filtros audi y rojo mostrando el contenido respectivo a esos filtros.

Que mas conocemos?

Como en la url anterior conocemos los filtros que me pueden llegar por url, audi y/o rojo. Que mostrarán unos resultados u otros. Esto es lo mismo que acabo de decir.

La clave. Orden de los filtros en la url

Los filtros de las urls tienen que ir en un orden establecido. Es decir los filtros tienen que ser a/b/c.
No pueden ser b/c/a o a/c/b/. o c/b
Pero sí pueden ser a/b o a/c o b/c.

Los filtros en la url tienen que ir en un orden establecido siempre y cuando estén todos juntos, pero si el filtro a no se ha introducido (el tipo de combustible) el filtro c (el color del coche) puede ocupar la primera posición, siempre y cuando el filtro b (la marca) tampoco haya sido seleccionado. En este caso la url sería mi_web.com/coches/rojo

Siguiendo este ejemplo. Si se selecciona la marca del coche el filtro tiene que ir automáticamente detrás del filtro que ya hay seleccionado (el color rojo) ya que cada tipo de filtro ocupa un lugar determinado en la composición de la url. Entonces la url quedaría: mi_web.com/coches/seat/rojo

Porque? por SEO. No puede ser que haya una página con el mismo contenido pero diferentes urls. Contenido duplicado penalizado por Google.

Lo que se necesita

Lo que realmente se necesita es encontrar una lógica con su correspondiente programación que genere al vuelo los filtros de una página, teniendo en cuenta los filtros seleccionados y en que orden van el resto de filtros.

Vale parece fácil, pero a me han salido tantos casos que todavía no he conseguido sacar una buena función.

Explico mejor lo que se necesita con un ejemplo sobre el array de filtros de nombres que he comentado antes.

Imaginemos que hemos llegado a la página: mi_web.com/nombres/latin/con-5-letras.

Conocemos los filtros que nos vienen por url: Nombres de origen latín con 5 letras.

Género del nombre:filtro a
Origen: filtro b
Letra que empieza: filtro c
Numero de letras: filtro d

Ahora bien en esta página con el listado de nombres habrá que mostrar todos los filtros disponibles (en este caso son 4) pero a la hora de generar las url de los filtros habrá que tener en cuenta en que orden va cada filtro teniendo en cuenta los filtros actuales.

Por ejemplo, en la pagina mostrará los filtros por género del nombre y sus urls tendrían que quedar de la siguiente manera:

/nombre/masculino/latin/con-5-letras
/nombre/femenino/latin/con-5-letras

La lógica ha determinado que el género del nombre tienen que estar en la primera posición de la url y genera las urls con el filtro adicional de género del nombre en la primera posición moviendo todos los filtros actualmente seleccionados hacia delante.

Los filtros por el número de letras quedaría de la siguiente manera

/nombres/latin/empieza-con-a/con-5-letras
/nombres/latin/empieza-con-b/con-5-letras
/nombres/latin/empieza-con-c/con-5-letras
/nombres/latin/empieza-con-d/con-5-letras

La programación tiene que determinar que el filtro letra que comienza el filtro c o tercera posición en la url. En este caso la programación genera las urls introduciendo este filtro entre medias de los dos filtros actualmente seleccionados, generando las nuevas urls que vemos.

Seguimos.
El usuario pincha sobre /nombres/latin/empieza-con-c/con-5-letras. Ya por url nos vienen 3 filtros.

Tan solo nos queda un conjunto o array que mostrar en esta página. El último filtro que se puede activar todavía es el del género del nombre.

Las urls que tendría que aparecer en esta página para filtrar serían:

/nombres/masculino/latin/empieza-con-c/con-5-letras
/nombres/femenino/latin/empieza-con-c/con-5-letras

El ultimo filtro que queda se posiciona en la primera parte de la url desplazando todos los demás filtros actuales.

Resumen

Determinar una lógica que sea lo mas global posible pudiendo contemplar n filtros. Y que genere para cada página en función de los filtros que hay seleccionadas las urls con el resto de filtros disponibles teniendo en cuenta el orden en que ocupa cada filtro en la url!

Toma ya!!! Parece fácil eh?!

A ver si lo termino hoy.

Caso práctico

Y alguien puede decir y esto donde se ve o a que se puede aplicar? pues en cientos de webs

Por ejemplo en el filtrado que usa ebay

O en el filtrado que usa mercado libre, que por cierto es fantástico! Un ejemplo de usabilidad increíble.

Tags de búsquedas:

programar filtros en c,crear una url con los datos de un filtro,filtrar urls,Filtro contraste programación,html5 canvas como saco un array de letras dentro del canvas,logica 21 letras con nombre femenino,nombre masculino de 5 letras comienza con eñ

Noticias relacionadas »

2 comentarios en Reto de programación. Lógica para generar urls y filtros.

  1. Diego Torres
    / Responder

    Hola pasaba por aqui y bueno quede atrapado xD excelente web, quizas ya solucionaste el dilema, y no estoy aqui para dar una solucion aunque estoy ya pensando un arreglito a medio camino. quisiera hacerte una pregunta acerca de realizar la pagina a un link como del problema web.com/p1/p2/p3/ siendo en php… como recuperas los datos (p1,p2,p3) y en que pagina.php los recuperas … hasta el momento Post y Get son mis compañeros, ( mas el primero que el ultimo ) , pero pasar datos asi realmente me da curiosidad. a lo menos dime como se llama la tecnica y en que lenguaje funciona (y)

    Atte
    Diego Torres

    PD: Excelente web y el cuadrito de la esquina inferior derecha es demasiado vicioso (y)

    • Pedro Ventura
      / Responder

      Hola Diego, me alegro que te haya gustado mi web, puede que encuentres artículos interesantes que te puedan servir.

      Al final este reto de programación lo solucioné, pero la verdad que es que me quedó más complejo de lo que pensaba y por eso no he podido poner la solución, a parte de que tampoco tenía mucho tiempo en su momento.

      Esta manera de pasar parámetros es la utilizada en cakephp, que es el framework de php con el que llevo trabajando los últimos años. En este proceso intervienen redirecciones de apache en el .htaccess y diferentes enrutadores del framework, pero básicamente son GET y POST. http://book.cakephp.org/es/view/963/El-Atributo-de-Par%C3%A1metros-params

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Invertir en criptomonedas: »

 

Cómo comprar bitcoin

Invertir y comprar Bitcoin y otras altcoins es más fácil de lo que crees.

1) Si sólo quieres comprar Bitcoin, Ethereum o Litecoin como inversión, tu opción es Coinbase

2) Si quieres probar con otras criptomonedas tu opción es Binance

3) Cualquier duda escríbeme con total libertad al formulario de contacto para resolver dudas: https://www.pedroventura.com/contacto/

¡Comparte este artículo! »

  • A.BTC (4 semanas)
    Canal Serio de Señales para Trading con Criptomonedas Enlace: https://t.me/tradingcriptomonedas
  • Margart (1 mes)
    La verdad que me ha gustado mucho el post, de…
  • ¡Hablan de nosotros! (2 meses)
    […] 04/02/2018          => Lee el artículo aquí…
  • Emiluz (2 meses)
    Camaradas... tengo documento de word con formulas nativas de word...…
  • Francisco (2 meses)
    Buen dia, agradeceria el envio del archivo. Saludos.
  • yaplog.jp (2 meses)
    I am genuinely glad to glance at this webpage posts…

Suscríbete al newsletter »

Proporciona tu correo electrónico a continuación y recibe las últimas noticias! Funciona con Feedburner de Google

Archivo »

Leer entrada anterior
HTML5 Geolocalizacion de un usuario

Una de las nuevas mejoras de HTML5 a parte del vídeo, canvas, animaciones, y otras, está la geolocalizacion de un...

Cerrar