La próxima mayor funcionalidad para Toolset es «relaciones de muchos a muchos». En este artículo, me gustaria presentar cuál es el plan y demostrar qué podrás conseguir usando esa nueva funcionalidad.

Qué son las relaciones de uno-a-muchos y muchos-a-muchos

Uno-a-muchos significa que un objeto «tiene» muchos objetos más, o que muchos objetos «pertenecen» a sólo un objeto. Por ejemplo, un «proyecto» puede tener muchas «revisiones». Todas esas «revisiones» pertenecen a un «proyecto». Una revisión no puede «pertenecer» a dos (o más) proyectos.

Muchos-a-muchos significa que objetos de «un lado» pueden estar vinculados a muchos objetos del «otro lado». Por ejemplo, vamos a hablar de «eventos» y «ponentes». Un evento puede tener muchos ponentes, y cada ponente puede hablar en muchos eventos. En relaciones de muchos-a-muchos, la «pertenencia» no tiene importancia, dado que cada objeto puede estar vinculado a otros muchos objetos.

Cómo entradas relacionadas reemplaza «referencia de entrada» y «campos repetetivos»

La funcionalidad más popular para Types ha sido siempre «campos de referencia de entradas» y «grupos repetitivos de campos». Hemos estado un poquito vacilantes a la hora de añadir estos campos porque iba a ser muy complicado implementarlos en Views de esa forma. El «grupo repetetivo de campos» de ACF, por ejemplo, usa datos serializados, lo que es muy problemático a la hora de filtrarlos. Para poder crear una bosqueda de valores de campos, tendras primero que decodificar los campos y sólo luego buscar en PHP. Por motivos muy obvios, para una web con más de unos cientos de entradas, esto va a ser practicamente imposible. 

Hemos estudiado un poquito (la verdad que mucho) qué podemos hacer, y hemos llegado a la conclusión de que casi siempre, cuando usas campos de referencia de entradas y grupos repetitivos de campos, estás creando algún tipo de relaciones. Por ejemplo, si tienes una Entrada Personalizada (Custom Post Type) llamada «vuelos» y creas un campo de «referencia de entrada» para guardar «ID del aeropuerto de aterrizaje», en realidad lo que creas es una relación implícita.

Cuando creas un CPT «casa» y usas un grupo repetetivo de campos «fotos», estás creando directamente un nuevo tipo – «fotos», creando sus campos y vinculándolo con «casa».

En el momento que declaras que «una casa tiene fotos» y que «fotos tiene campos de XYZ», estás habilitando las opciones de:

  • añadir fotos a casas
  • mostrar las fotos de una casa cuando muestras una casa
  • mostrar la casa cuando muestras una foto

Esto es posible una vez declaras las relaciones. Por eso es tan problemático crear webs sin PHP usando «campo de referencia» sin declarar a qué se refieren, para qué van a servir.

Toolset 2.3 va hacer que las «tablas de campos» sean exactamente como «grupos repetitivos»

Así que ahora entendemos que las relaciones de entradas te deja conseguir lo mismo que «referencia de entradas» y «grupos repetitivos de campos». Pero sabéis muy bien que las relaciones de entradas en Toolset, hasta ahora, son bastante menos cómodas de usar que «grupos repetetivos» de ACF. Esto es verdad y estamos por fin arreglándolo para siempre.

En Toolset 2.3, vas a disfrutar de un flujo de trabajo que te permita:

  • añadir «grupos de campos repetetivos»
  • añadir campo de «referencia de entrada» directamente

En el nuevo interfaz (GUI), no vas a tener que establecer la relación de la entrada. Types va a «entender» que cuando añades un campo de «referencia de entrada» estas «diciendo» a Types que esta entrada tiene un «padre». Y cuando creas «grupos de campos repetetivos», estás realmente estableciendo una entrada «hija» con sus campos.

Todo esto ocurrirá en segundo plano, sin ningún retraso que pueda afectar a tu trabajo ni carga en la base de datos de tu web. Cierto, crearemos un registro en la tabla de ‘posts’ de la base de datos, para cada fila que añades en un grupo de campos repetetivos. El «peso» de esa entrada es insignificante comparado con el ahorro masivo a la hora de crear las consultas relacionadas.

Cómo guardaremos las relaciones de entradas en la base de datos

Toolset creará una nueva tabla para las relaciones de entradas. Esta tabla va a contener ambos tipos de relaciones: ‘uno-a-muchos’ y ‘muchos-a-muchos’.

La ventaja del uso de una tabla personalizada es en el tiempo de la ejecución. Antes de la version 2.3, obtener la lista entera de los objetos en una relación de tipo muchos-a-muchos requeriría N-consultas a la base de datos (una consulta por objeto). En Toolset 2.3, lo hemos cambiado y resultaria en solamente una consulta.

No se trata sólamente de consultas a la base de datos. Teneiendo las relaciones de entradas almacenadas en su propia tabla hará que el código PHP relacionado sea muchísimo más sencillo, y el diseño de tus entradas también. Vas a poder simplemente decir «tráeme todas las canciones por cantante» (entradas vinculadas con relacion de muchos-a-muchos) y vas a poder crear un sencillo View para mostrarlas.

Diseño detallado, Intefaz y Calendario

Tenemos ya un equipo de 5 desarrolladores trabajando a jornada completa en la tarea de añadir la funcionalidad de muchos-a-muchos a Toolset. Nuestro objetivo es terminar el diseño detallado y las maquetas del interfaz durante Septiembre. Por lo tanto, alrededor de noviembre deberíamos tener la primera versión funcional. Se trata de un proyecto muy grande y siempre pueden surgir imprevistos, pero en cualquier caso esa es la gran tarea que tenemos ahora en desarrollo en Toolset y esperamos que os guste.

Consultas?

¿Qué pensais? ¿Como vais a usar relaciones de entradas? ¿Cuál es la funcionalidad más importante para ti? Deja tu comentario y te vamos a responder.