Physical Fields

Proporciona tipos de campo para almacenar y manipular medidas físicas con soporte para múltiples unidades, conversiones automáticas y aritmética de precisión.

physical
13,180 sites
38
drupal.org

Install

Drupal 11, 10, 9 v8.x-1.5
composer require 'drupal/physical:8.x-1.5'
Drupal 8 v8.x-1.1
composer require 'drupal/physical:8.x-1.1'

Overview

Physical Fields es un módulo completo de Drupal que proporciona tipos de campo robustos para almacenar medidas físicas y sus unidades de medida asociadas. Soporta seis tipos distintos de medición: Área, Longitud, Temperatura, Volumen, Peso y Presión, cada uno con múltiples unidades y capacidades de conversión automática.

El módulo ofrece dos tipos principales de campo: Measurement (para valores únicos como peso o temperatura) y Dimensions (para mediciones tridimensionales como embalaje de productos). Todas las operaciones numéricas utilizan aritmética basada en bcmath para prevenir la pérdida de precisión de punto flotante, haciéndolo adecuado para aplicaciones de comercio electrónico y científicas.

Una característica clave es la entrada y visualización de números específica por idioma, permitiendo a los usuarios ingresar números usando el separador decimal de su configuración regional (por ejemplo, coma en español) mientras almacena los datos en un formato estandarizado. El módulo proporciona una API completa con objetos de valor que soportan operaciones aritméticas, comparaciones y conversiones de unidades programáticamente.

Features

  • Seis tipos de medición: Área, Longitud, Temperatura, Volumen, Peso y Presión con soporte completo de unidades
  • Dos tipos de campo: Measurement (valor único + unidad) y Dimensions (largo × ancho × alto + unidad)
  • Conversión automática de unidades con aritmética precisa basada en bcmath para prevenir errores de punto flotante
  • Entrada y formato de números específicos por idioma usando la extensión PHP intl
  • Objetos de valor inmutables con operaciones aritméticas (sumar, restar, multiplicar, dividir)
  • Métodos de comparación para medidas (equals, greaterThan, lessThan, compareTo)
  • Configuración de widget ajustable para unidad predeterminada, permiso de cambio de unidad y unidades disponibles
  • Formateador con conversión de unidad de salida para mostrar medidas en unidades preferidas
  • Elementos de formulario personalizados para entrada de medidas y dimensiones
  • Soporte de migración para campos de peso de Drupal 7
  • Integración con Field UI con opciones preconfiguradas para cada tipo de medición

Use Cases

Peso y dimensiones de productos de comercio electrónico

Almacenar peso de productos y dimensiones de envío para aplicaciones de comercio. El módulo se integra bien con Drupal Commerce, proporcionando cálculos de peso precisos para la determinación de tarifas de envío. Configurar campos de peso para productos y campos de dimensiones para tamaños de paquetes. Usar la configuración output_unit del formateador para mostrar pesos en las unidades preferidas del cliente.

Recolección de datos científicos

Registrar mediciones con alta precisión para aplicaciones científicas. La aritmética basada en bcmath asegura que no se acumulen errores de punto flotante durante los cálculos. Los campos de temperatura soportan Kelvin, Celsius y Fahrenheit con fórmulas de conversión precisas.

Mediciones de propiedades inmobiliarias

Almacenar dimensiones de propiedades, tamaños de habitaciones y áreas de terreno. Usar campos de Area para tamaños de lotes (soportando hectáreas, metros cuadrados, pies cuadrados) y campos de Dimensions para mediciones de habitaciones. Los formateadores pueden convertir entre unidades métricas e imperiales para listados internacionales.

Manufactura e inventario

Rastrear especificaciones físicas de productos manufacturados o artículos de inventario. Almacenar dimensiones de productos para gestión de almacén, peso para logística de envío y volumen para optimización de empaque en contenedores.

Aplicaciones de recetas y nutrición

Almacenar cantidades de ingredientes con mediciones de volumen (ml, l, tazas) o peso (g, kg, oz). Las capacidades de conversión permiten que las recetas se muestren en unidades métricas o imperiales según la preferencia del usuario.

Sistemas de monitoreo de presión

Registrar mediciones de presión de sensores o equipos en varias unidades (psi, bar, Pa, atm). Convertir entre unidades para diferentes estándares regionales o especificaciones de equipos.

Tips

  • Usar las constantes de MeasurementType (MeasurementType::WEIGHT, etc.) cuando se trabaje con tipos de medición programáticamente
  • Siempre pasar números como strings a la clase Calculator y objetos de valor para mantener la precisión
  • La clase Temperature usa fórmulas de conversión personalizadas en lugar de simples factores de multiplicación debido a la naturaleza no lineal de las escalas de temperatura
  • Instalar la extensión PHP intl para formato de números apropiado según la configuración regional; sin ella, los usuarios deben usar punto como separador decimal
  • Los objetos de valor son inmutables - las operaciones aritméticas retornan nuevas instancias en lugar de modificar la original
  • Usar el método toMeasurement() en los items de campo MeasurementItem para obtener un objeto de valor para manipulación programática
  • El elemento de formulario physical_number muestra automáticamente un placeholder indicando el formato decimal esperado para la configuración regional actual
  • Al migrar desde Drupal 7, usar el plugin de proceso de migración physical_weight para transformar los valores del campo

Technical Details

Troubleshooting 4
Los números se muestran sin formato de configuración regional apropiado

Instalar la extensión PHP intl. Sin ella, el NumberFormatter recurre a funcionalidad básica sin separadores decimales específicos por configuración regional.

Errores de precisión de punto flotante en cálculos

Asegurarse de usar la clase Calculator o los métodos de objeto de valor para aritmética. Nunca usar la aritmética de punto flotante nativa de PHP con valores de medición.

La conversión de unidades produce resultados inesperados para temperatura

La conversión de temperatura usa fórmulas especiales (no multiplicación simple). La clase Temperature sobrescribe el método convert() para manejar las conversiones Kelvin/Celsius/Fahrenheit correctamente.

La validación del campo falla con entrada específica de configuración regional

El elemento physical_number maneja el análisis de configuración regional automáticamente. Asegurarse de usar los elementos de formulario physical_measurement o physical_dimensions en lugar de campos de texto simples.