Computed Field

Permite a los usuarios administrativos agregar campos calculados dinámicamente a los tipos de entidad, donde los valores de los campos son generados por plugins creados por desarrolladores.

computed_field
17,827 sites
88
drupal.org

Install

Drupal 10, 9, 8 v3.0.0
composer require 'drupal/computed_field:^3.0'

Overview

El módulo Computed Field proporciona un framework robusto para crear campos en entidades de Drupal cuyos valores se calculan dinámicamente en lugar de almacenarse en la base de datos. Esto permite a los desarrolladores crear plugins de campos calculados que generan valores basados en los datos existentes de la entidad, entidades relacionadas o cualquier otra lógica.

Los campos calculados se integran perfectamente con el sistema de campos de Drupal, utilizando los mismos tipos de campo y formateadores que los campos almacenados. Esto significa que los constructores de sitios pueden mostrar valores calculados usando widgets familiares como formateadores de cadenas, formateadores de referencia de entidad o cualquier otro formato de visualización compatible.

El módulo soporta dos modos de adjunción: adjunción automática (donde los plugins declaran sus tipos/bundles de entidad objetivo en código) y adjunción configurada (donde los administradores del sitio crean campos a través de la interfaz de usuario). El submódulo Computed Field UI proporciona una interfaz amigable para crear y gestionar campos calculados sin código.

Una característica clave es el sistema de lazy builder, que maneja campos con requisitos de caché diferentes a los de sus entidades anfitrionas. Esto asegura que los valores calculados que dependen de datos externos o tienen dependencias de caché complejas se rendericen correctamente sin afectar el rendimiento del caché de página.

Features

  • Crear campos calculados que generan valores dinámicos a partir de lógica de plugin personalizada
  • Soporte para cualquier tipo de campo de Drupal (string, entity_reference, text, link, image, etc.) permitiendo la reutilización de formateadores existentes
  • Adjunción automática de campos a través de anotaciones de plugin - los campos declarados en código se agregan automáticamente a los tipos de entidad y bundles especificados
  • Adjunción configurable de campos a través de la interfaz de administración - los constructores de sitios pueden crear campos calculados sin programar
  • Plugin integrado Reverse Entity Reference para encontrar entidades que referencian a la entidad actual
  • Soporte de lazy builder para el almacenamiento en caché adecuado de valores calculados dinámicamente con diferentes contextos de caché
  • Integración completa con Field UI - los campos calculados aparecen junto a los campos almacenados en la interfaz de Gestionar visualización
  • Soporte para campos base (todos los bundles) y campos específicos de bundle
  • Soporte de atributos PHP 8 para definición moderna de plugins junto con anotaciones heredadas
  • Plugins configurables con formularios de configuración para una configuración de campos flexible

Use Cases

Mostrar contenido relacionado automáticamente

Usar el plugin integrado Reverse Entity Reference para mostrar automáticamente contenido que referencia a la entidad actual. Por ejemplo, mostrar todos los artículos de un autor en su perfil de usuario, o mostrar todos los productos en una categoría sin mantener la relación manualmente.

Calcular valores derivados

Crear campos calculados que calculen valores a partir de otros campos de la entidad. Los ejemplos incluyen nombre completo a partir de campos de nombre y apellido, precio total a partir de cantidad y precio unitario, o edad calculada a partir de un campo de fecha de nacimiento.

Mostrar información contextual

Mostrar información que depende del contexto de la solicitud actual, como el usuario actual, la hora o los parámetros de la solicitud. Usar lazy builders para asegurar un almacenamiento en caché adecuado mientras se muestra contenido dinámico.

Agregar datos de entidades relacionadas

Calcular estadísticas o agregaciones de entidades relacionadas, como calificación promedio de entidades de reseña, monto total de pedido de elementos de línea, o conteo de comentarios. El sistema de lazy builder maneja la invalidación del caché cuando el contenido relacionado cambia.

Formatear salida compleja

Usar el tipo de campo computed_render_array para devolver render arrays completos cuando la salida requiere markup complejo, vistas incrustadas u otros elementos que no encajan en los formateadores de campo estándar.

Adjunción automática de campos entre bundles

Los desarrolladores pueden crear plugins de campos calculados que se adjuntan automáticamente a tipos de entidad y bundles específicos a través de la configuración de anotaciones, asegurando una funcionalidad consistente en todo el sitio sin configuración manual por bundle.

Tips

  • Use SingleValueTrait para plugins que retornan un único valor - simplifica la implementación permitiéndole implementar singleComputeValue() en lugar de construir la estructura completa del array
  • Para plugins con necesidades de caché complejas, retorne TRUE desde useLazyBuilder() y proporcione metadatos de caché adecuados en getCacheability() para asegurar una invalidación correcta del caché
  • Establezca no_ui: TRUE en la anotación/atributo de su plugin para evitar que aparezca en el menú desplegable de la interfaz de administración - útil para plugins que solo deben adjuntarse automáticamente
  • Los plugins automáticos pueden usar la propiedad 'dynamic' y sobrescribir los métodos attachAsBaseField()/attachAsBundleField() para lógica de adjunción compleja basada en campos existentes
  • El tipo de campo computed_render_array le da control total sobre la salida cuando los formateadores estándar no son suficientes
  • Recuerde que los campos calculados son de solo lectura y no aparecen en los formularios de entidad - son puramente para propósitos de visualización

Technical Details

Admin Pages 4
Agregar campo calculado /admin/structure/types/manage/{bundle}/fields/add-computed-field

Formulario para crear un nuevo campo calculado en un tipo de contenido. Permite seleccionar un plugin de campo calculado, configurar sus ajustes (si están disponibles) y establecer la etiqueta y el nombre de máquina del campo.

Editar campo calculado /admin/structure/types/manage/{bundle}/fields/computed/{computed_field}

Formulario de edición para modificar la configuración de un campo calculado existente, incluyendo su etiqueta y configuración del plugin.

Eliminar campo calculado /admin/structure/types/manage/{bundle}/fields/computed/{computed_field}/delete

Formulario de confirmación para eliminar un campo calculado del bundle de entidad.

Campos calculados /admin/reports/fields/computed

Informe que lista todos los campos calculados configurados en el sitio, mostrando su tipo de entidad, bundle e información del plugin.

Permissions 1
Administrar entidades de Computed field

Permite a los usuarios crear, editar y eliminar configuraciones de campos calculados a través de la interfaz de administración. Este es un permiso restringido debido a su impacto administrativo significativo.

Hooks 1
hook_computed_field_info_alter

Permite a los módulos alterar las definiciones de plugins de campos calculados antes de que se almacenen en caché. Puede usarse para modificar propiedades de plugins, cambiar clases o eliminar plugins del descubrimiento.

Troubleshooting 5
Los campos calculados no aparecen en Views

Aplique el parche de core de https://www.drupal.org/project/drupal/issues/3349739 para la declaración automática de campos base en Views. Los campos de bundle requieren integración manual con Views ya que aún no hay soporte de core.

Los valores del campo no se actualizan cuando cambia el contenido relacionado

Asegúrese de que su plugin implemente useLazyBuilder() retornando TRUE y getCacheability() retornando las etiquetas de caché adecuadas. El sistema de lazy builder maneja la invalidación del caché basándose en los metadatos que usted proporciona.

Los campos calculados no aparecen en la lista de campos

Este es un problema conocido de Drupal core (https://www.drupal.org/project/drupal/issues/3045509). Los campos de bundle no están incluidos en el mapa de campos. Los campos aún funcionan correctamente para propósitos de visualización.

La configuración del plugin no se guarda

Asegúrese de que su clase de plugin implemente tanto ConfigurableInterface como PluginFormInterface. Verifique que buildConfigurationForm(), validateConfigurationForm() y submitConfigurationForm() estén implementados correctamente.

La operación de eliminación deja configuraciones de visualización huérfanas

Esto está registrado en https://www.drupal.org/project/drupal/issues/3016895. Elimine manualmente el campo de las visualizaciones de vista después de la eliminación si es necesario.

Security Notes 4
  • El permiso 'administer computed_field entities' está restringido y solo debe otorgarse a administradores de confianza
  • Los plugins de campos calculados tienen acceso completo a la entidad a la que están adjuntos - asegúrese de que el código del plugin sanitice correctamente la salida
  • Al implementar plugins que consultan otras entidades, use accessCheck(TRUE) en las consultas de entidad para respetar los permisos de acceso
  • Tenga cuidado con los plugins que exponen datos de entidades relacionadas - asegúrese de que se realicen las verificaciones de acceso apropiadas