Cómo añadir filtrado y ordenación dinámicos a tus sitios web en Webflow

Aprende a dar a tus usuarios la capacidad de filtrar y ordenar el contenido de tu sitio web.

Cómo añadir filtrado y ordenación dinámicos a tus sitios web en Webflow

Anna Sabatini
Analista de QA
View author profile
Anna Sabatini
Analista de QA
View author profile
Table of contents

Webflow es una herramienta increíblemente flexible. Aunque no ofrece una solución nativa para cada problema, el código personalizado permite implementar casi cualquier cosa que tu audiencia pueda necesitar, incluida la capacidad de encontrar lo que busca. Ya sea un blog, un portafolio o un proyecto de comercio electrónico, la gente quiere encontrar lo que necesita de forma rápida y sencilla. Con esto en mente, te voy a mostrar cómo integrar la biblioteca de JavaScript MixitUp para que tu audiencia pueda filtrar y ordenar el contenido.

¿Por qué MixItUp3?

MixItUp3 es una biblioteca de JavaScript del lado del cliente, sin dependencias, para el filtrado y la ordenación animados. Es ideal para gestionar contenido que necesita ser categorizado u ordenado, como portafolios, galerías, tiendas y blogs. Se puede utilizar tanto con contenido estático como dinámico.

Todo lo que puedas mostrar en la página se puede categorizar, filtrar y ordenar por:

  • Fecha
  • Precio
  • Categoría
  • Etiqueta
  • Una combinación de lo anterior

Cuando un visitante selecciona un filtro, MixitUp muestra los elementos con el nombre de clase especificado en la configuración del filtro y oculta el resto.

La biblioteca es potente e incluye una gran variedad de funciones. La funcionalidad básica de MixitUp es de código abierto y gratuita para proyectos personales. Si la utilizas para proyectos comerciales, deberás adquirir una licencia con un pago único a un precio razonable.

En este tutorial veremos los usos más comunes de MixItUp3:

  1. Filtrar contenido en una página sencilla y estática
  2. Filtrar y ordenar publicaciones dinámicas en un blog basado en CMS

1. Filtrar contenido en una página sencilla y estática

La plantilla gratuita de Webflow Incredible es perfecta para nuestro primer ejemplo. Vamos a filtrar la galería de fotos de la plantilla.

Paso 1: Crear un diseño

Por defecto, MixItUp comprobará la estructura HTML de la página, buscará un div con el nombre de clase que especificaremos en el Diseñador y en el código, y filtrará todos los elementos que coincidan con la clase mix dentro de ese div.

Por lo tanto, nuestro diseño debe contener un div con elementos que tengan la clase mix. Llamemos a ese div mix-container

Nota: La plantilla que estamos usando para este tutorial ya tiene algunos nombres de clase existentes; a veces usaremos clases combinadas o cambiaremos el nombre de las clases existentes, lo cual funcionará perfectamente para fines de filtrado. En tu proyecto original, puedes crear todos los nombres de clase y estilos que necesites.



Paso 2: Aplicar categorías de filtrado

Para que MixItUp pueda filtrar elementos, cada uno debe tener un nombre de clase que especifique la categoría a la que pertenece. Aplicaremos esos selectores como clases combinadas a cada elemento mix.

Para nuestra galería de fotos, estas clases combinadas serán los tipos de fotos:

  • blanco-y-negro
  • macro
  • naturaleza
  • personas
  • viajes



Paso 3: Creación de los controles de filtro

Puedes crear controles de filtro a partir de diferentes tipos de elementos HTML, como botones, enlaces o elementos de entrada (casillas de verificación, menús desplegables, etc.). En este caso, los botones funcionan de maravilla.

Vamos a crear un div filter-controls y a colocar todos nuestros elementos filter-button dentro. Necesitamos un botón para cada categoría, además de uno para que el usuario pueda borrar todos los filtros.

Ahora, para cada botón de filtro, debemos añadir un atributo personalizado data-filter. El valor del data-filter de cada botón corresponderá a los nombres de clase que aplicamos a nuestras imágenes en el paso 2. Por ejemplo, el botón de personas tendrá un valor de .people.


El botón "all" (todos) debe tener un valor de all (sin punto).

Paso 3: Adición de código personalizado

Ya hemos creado todos los elementos necesarios para que nuestra audiencia pueda filtrar, así que ahora solo falta añadir la funcionalidad real mediante el fragmento de código JavaScript.

Todo nuestro código personalizado irá en el pie de página para asegurar que el código de MixItUp se ejecute después de las bibliotecas predeterminadas de Webflow; de lo contrario, nuestra configuración no funcionará.


Primero, nos conectaremos a la biblioteca JavaScript de MixItUp mediante un enlace CDN público.


<script src="https://cdnjs.cloudflare.com/ajax/libs/mixitup/3.3.0/mixitup.min.js"></script>


Ahora indicaremos al código de MixItUp cuál es el contenedor correcto:


<script>
// Establecer la referencia al contenedor
const containerEl = document.querySelector (".mix-container")
// Llamar a MixitUp para ese contenedor
var mixer = mixitup(containerEl)
</script>



¡Eso es todo! Ahora publica tu sitio web y disfruta de los resultados.

Mi versión de la plantilla Incredible en la que utilicé MixItUp para filtrar contenido en una página estática sencilla está disponible para clonar y usar en Webflow Showcase.

2. Filtrado y ordenación de publicaciones dinámicas en un blog con CMS

Para el segundo ejemplo, usaremos otra plantilla de blog gratuita de Webflow llamada Notable.

El blog de esta plantilla tiene bastantes publicaciones con diferentes categorías y autores. Para que la experiencia de ordenación sea mejor y más intuitiva, añadí un campo adicional al que llamé Fecha de publicación.

Nota: La plantilla incluye un campo de fecha, pero como todas las fechas son iguales por defecto, MixItUp no tiene nada que ordenar. Para solucionar esto, añadí un segundo campo de fecha y cambié manualmente cada uno. Dado que las publicaciones de un blog no suelen publicarse todas a la vez, este cambio no será necesario en la mayoría de los casos.

Ahora crearemos filtros para nuestras publicaciones del blog, de modo que el lector pueda filtrar el contenido por categoría y ordenarlo por fecha.

Paso 1: Crear un diseño

Gracias a nuestro primer ejemplo, ya sabemos que MixItUp buscará un div con el nombre de clase especificado y filtrará los elementos que coincidan con la clase .mix

Con el contenido dinámico, indicaremos a MixItUp una lista de colección específica, que es un div que contiene todos los elementos que necesitamos filtrar. Esto significa que todos nuestros elementos de colección deben tener el nombre de clase mix (ya sea como clase principal o combinada).


Empieza gratis

Crea sitios web personalizados y escalables, sin escribir código. Empieza a construir en Webflow.

→
↗
►
↓
←
↑
Read now

Paso 2: Creación de atributos de filtrado y ordenación

El CMS de Webflow nos permite mostrar contenido y categorías de forma dinámica según el contenido de una base de datos. Sin embargo, en Webflow no podemos crear clases diferentes de forma nativa para cada elemento de la colección (que es lo que hicimos con el contenido estático).

Aquí es donde entra en juego JavaScript. En este paso, prepararemos la estructura correcta para asegurarnos de que el código personalizado funcione correctamente más adelante.

Todas las categorías que utilicemos para filtrar y ordenar deben presentarse dentro del elemento mix. Preferiblemente, mantendremos el mismo nivel de anidamiento para que el código personalizado sea más limpio.

Estas categorías no tienen por qué ser visibles. Si necesitas ocultarlas, puedes usar la opción de visualización none, solo asegúrate de que existan en la estructura HTML.

Filtraremos nuestras publicaciones por categoría y las ordenaremos por fecha, así que debemos asegurarnos de que ambos campos estén completos. Para que la ordenación por fecha funcione correctamente, la fecha de publicación debe estar en formato año-mes-día. Esto es importante porque el código analiza la fecha en ese orden.

 



Lo último que haremos en este paso es especificar los nombres de clase para los elementos que tienen categorías de filtrado y ordenación. En nuestra plantilla, algunos elementos ya tenían clases, así que añadimos las clases combinadas filter-category y sort-category.

Paso 3: Creación de controles de filtro y ordenación

En cualquier parte de la página donde quieras añadir controles de filtrado y ordenación, añadiremos un div de Controles de contenido que contenga dos divs secundarios: Bloque de filtro y Bloque de ordenación. Separar estos controles facilita mucho el diseño posterior.


Ahora aprovecharemos al máximo el CMS de Webflow y crearemos nuestros botones de filtro a partir de la colección de categorías.

Para ello, añadiremos una lista de colección dentro del bloque de filtros y la conectaremos a la colección de categorías.

Una vez conectada, añade un elemento de código incrustado dentro de cualquier elemento de la colección en la lista.


Dentro del elemento embed, añade el código HTML para el botón de filtro:


<a class="filter-button w-button" data-filter=".category-class" href="#">Nombre de la categoría</a>


Como habrás notado, usaremos el nombre de clase filter-button para darle estilo. También usaremos la clase w-button, que es el estilo predeterminado de Webflow y nos permite ver nuestros elementos de inmediato en el Diseñador.

Ahora, aprovechando el gran poder del CMS de Webflow, podemos aplicar dinámicamente los nombres de categoría y los atributos de filtro de datos:


Ahora necesitamos añadir un botón que permita a los visitantes del sitio restablecer sus filtros para mostrar todo el contenido. Vamos a añadir este botón dentro del bloque Content controls y le asignaremos el nombre de clase filter-button.

Establece el valor de este atributo data-filter en “all”.


Ahora, como usamos el mismo nombre de clase, al dar estilo a nuestros botones de filtro, esto afectará a todos los elementos incrustados.

También añadí otra clase combinada llamada reset al botón de restablecer y le di un estilo un poco diferente.



Lo último que queremos hacer en este paso es añadir nuestros botones de ordenación dentro del Sort block.

Necesitamos dos botones:

  1. Uno que ordene las entradas del blog de la más antigua a la más reciente (ascendente)
  2. Uno que ordene las entradas del blog de la más reciente a la más antigua (descendente)


Ambos botones necesitan atributos data-sort. Yo usé date:asc y date:desc.


Consejo profesional: MixitUp añade un nombre de clase adicional llamado mixitup-control-active a cualquier botón de control que haya sido clicado. Podemos usarlo para diseñar un estado activo para nuestros controles añadiendo esta clase combinada a nuestros botones existentes, dándole el estilo que queramos y luego simplemente eliminando la clase combinada.


Paso 4: Añadir el código JavaScript personalizado

De nuevo, al igual que en nuestro ejemplo anterior con el contenido estático, añadiremos el código al área de código personalizado a nivel de página, antes de la etiqueta de cierre del cuerpo ( </body>).


Para el filtrado de contenido dinámico, el código es un poco más complicado y requiere 6 pasos:

  1. Conectar la biblioteca MixitUp a través del enlace CDN
  2. Convertir cualquier texto a un formato compatible con CSS (elimina todos los caracteres especiales o espacios)
  3. Crear atributos de filtrado dinámicos a partir de las clases filtering-categories
  4. Crea atributos de ordenación a partir de las sorting-categories
  5. Define el contenedor con el contenido filtrado
  6. Crea la llamada para la función mixer

¡Manos a la obra! Vamos a añadir nuestro código personalizado paso a paso.

1. Conecta la biblioteca JavaScript MixItUp mediante el enlace CDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/mixitup/3.3.0/mixitup.min.js"></script>


La siguiente parte del código contendrá varios bloques (2-6), pero todos ellos irán dentro de una misma <script> etiqueta

2. Convierte cualquier texto a un formato compatible con CSS

var conv = function (str) {
    if (!str) {
        str = 'empty';
    }  return str.replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\\]\^`\{\|\}~]/g, '')
              .replace(/ /g, "-")
              .toLowerCase()
              .trim();
  };


3. Crea atributos de filtrado dinámicos a partir de las clases “filtering-categories”

Como nuestro elemento filter-category se encuentra a dos niveles de profundidad dentro del elemento mix, utilizaremos dos parámetros parentElement. Si tu diseño es diferente, ajusta este parámetro según corresponda.



var catArray = document.querySelectorAll('.w-dyn-item .filter-category');
  catArray.forEach( function(elem) {
    var text = elem.innerText || elem.innerContent;
    var className = conv(text);
    elem.parentElement.parentElement.classList.add(className);
  });


4. Crea atributos data-date personalizados a partir de las fechas de las publicaciones

Al igual que con las filter-categories, debemos tener en cuenta la profundidad de la información de ordenación dentro del elemento mix. En nuestro caso, son los mismos dos niveles, así que usaremos dos parámetros parentElement.


  var sortArray = document.querySelectorAll('.w-dyn-item .sort-category');
  sortArray.forEach( function(sortElem) {
    var sortText = sortElem.innerText || sortElem.innerContent;
    sortElem.parentElement.parentElement.setAttribute('data-date', sortText);
  });


5. Define el contenedor con el contenido filtrado

Usa el nombre de clase o el ID de tu lista de colección.

var containerEl = document.querySelector('.posts-collection-list');

6. Crea la llamada para la función mixer

mixitup(containerEl);

Ya tenemos todas las piezas, ¡qué bien! Ahora vamos a colocarlas dentro del área de código personalizado en la configuración de la página:


<!--- // 1) Conexión de la librería MixItUp JS mediante enlace CDN público --->

<script src="https://cdnjs.cloudflare.com/ajax/libs/mixitup/3.3.0/mixitup.min.js">
</script>

<script>

// 2) Función reutilizable para convertir cualquier cadena/texto a un formato compatible con CSS
  var conv = function (str) {
    if (!str) {
        str = 'empty';
    }  return str.replace(/[!\"#$%&'\(\)\*\+,\.\/:;<=>\?\@\[\\\]\^`\{\|\}~]/g, '')
              .replace(/ /g, "-")
              .toLowerCase()
              .trim();
  };

// 3) Creación de clases de elementos dinámicos a partir de sus categorías para el filtrado:
  var catArray = document.querySelectorAll('.w-dyn-item .filter-category');
  catArray.forEach( function(elem) {
    var text = elem.innerText || elem.innerContent;
    var className = conv(text);
    elem.parentElement.parentElement.classList.add(className);
  });

// 4) Creación de atributos data-date personalizados a partir de las fechas del blog:
  var sortArray = document.querySelectorAll('.w-dyn-item .sort-category');
  sortArray.forEach( function(sortElem) {
    var sortText = sortElem.innerText || sortElem.innerContent;
    sortElem.parentElement.parentElement.setAttribute('data-date', sortText);
  });

// 5) Establecer la referencia al contenedor. Usa el nombre de clase de tu lista de colección o el ID de la misma
  var containerEl = document.querySelector('.posts-collection-list');

// 6) Llamar al plugin MixitUp
  mixitup(containerEl);

</script>


¡Y listo! Ya tenemos configurados nuestros filtros dinámicos para el blog. Lo último que queda es publicar el sitio web y probar el resultado.

La plantilla Notable que adapté para filtrar y ordenar publicaciones dinámicas en un blog con CMS es gratuita para clonar y usar en Webflow Showcase.


Last Updated
September 27, 2019
Category

Related articles

Personaliza tus botones de redes sociales con el CMS de Webflow
Personaliza tus botones de redes sociales con el CMS de Webflow

Personaliza tus botones de redes sociales con el CMS de Webflow

Personaliza tus botones de redes sociales con el CMS de Webflow

Diseño
By
Alex Nichol
,
,
Read article
Cómo estructurar tus colecciones del CMS de Webflow
Cómo estructurar tus colecciones del CMS de Webflow

Cómo estructurar tus colecciones del CMS de Webflow

Cómo estructurar tus colecciones del CMS de Webflow

Desarrollo
By
John Moore Williams
,
,
Read article
6 fragmentos de código útiles para tus proyectos de Webflow
6 fragmentos de código útiles para tus proyectos de Webflow

6 fragmentos de código útiles para tus proyectos de Webflow

6 fragmentos de código útiles para tus proyectos de Webflow

Desarrollo
By
Aaron Grieve
,
,
Read article
Diseñar con fuentes multicapa en Webflow
Diseñar con fuentes multicapa en Webflow

Diseñar con fuentes multicapa en Webflow

Diseñar con fuentes multicapa en Webflow

Diseño
By
Vincent Bidaux
,
,
Read article
11 consejos profesionales para ahorrar tiempo a los diseñadores web que trabajan en Webflow
11 consejos profesionales para ahorrar tiempo a los diseñadores web que trabajan en Webflow

11 consejos profesionales para ahorrar tiempo a los diseñadores web que trabajan en Webflow

11 consejos profesionales para ahorrar tiempo a los diseñadores web que trabajan en Webflow

Diseño
By
Vincent Bidaux
,
,
Read article
Guía para el scroll infinito en Webflow
Guía para el scroll infinito en Webflow

Guía para el scroll infinito en Webflow

Guía para el scroll infinito en Webflow

Diseño
By
Jack y Wiggy
,
,
Read article

verifone logomonday.com logospotify logoted logogreenhouse logoclear logocheckout.com logoreddit logothe new york times logoideo logoupwork logodiscord logo
verifone logomonday.com logospotify logoted logogreenhouse logoclear logocheckout.com logoreddit logothe new york times logoideo logoupwork logodiscord logo

Empieza gratis

Prueba Webflow todo el tiempo que quieras con nuestro plan Starter gratuito. Compra un plan de sitio de pago para publicar, alojar y desbloquear funciones adicionales.

Get started — it’s free
Ver demostración

Prueba Webflow todo el tiempo que quieras con nuestro plan Starter gratuito. Compra un plan de sitio de pago para publicar, alojar y desbloquear funciones adicionales.