Physical Fields
複数の単位、自動変換、高精度演算をサポートする物理的な測定値を保存・操作するためのフィールドタイプを提供します。
physical
インストール
composer require 'drupal/physical:8.x-1.5'
composer require 'drupal/physical:8.x-1.1'
概要
Physical Fieldsは、物理的な測定値とその単位を保存するための堅牢なフィールドタイプを提供する包括的なDrupalモジュールです。面積、長さ、温度、体積、重量、圧力の6種類の測定タイプをサポートし、それぞれ複数の単位と自動変換機能を備えています。
このモジュールは2つの主要なフィールドタイプを提供します:Measurement(重量や温度などの単一値用)とDimensions(製品パッケージなどの3次元測定用)。すべての数値演算はbcmathベースの算術を使用して浮動小数点の精度損失を防ぎ、ECサイトや科学的アプリケーションに適しています。
主要な機能として、言語固有の数値入力と表示があり、ユーザーはロケールの小数点記号(例:フランス語ではカンマ)を使用して数値を入力でき、データは標準化された形式で保存されます。このモジュールは、算術演算、比較、単位変換をプログラム的にサポートする値オブジェクトを備えた完全なAPIを提供します。
Features
- 6種類の測定タイプ:面積、長さ、温度、体積、重量、圧力と包括的な単位サポート
- 2つのフィールドタイプ:Measurement(単一値+単位)とDimensions(長さ×幅×高さ+単位)
- 浮動小数点エラーを防ぐbcmathベースの高精度演算による自動単位変換
- PHP intl拡張を使用した言語固有の数値入力とフォーマット
- 算術演算(加算、減算、乗算、除算)をサポートする不変値オブジェクト
- 測定値の比較メソッド(equals、greaterThan、lessThan、compareTo)
- デフォルト単位、単位変更許可、利用可能な単位のウィジェット設定
- 測定値を希望の単位で表示するための出力単位変換付きフォーマッター
- 測定値と寸法入力用のカスタムフォーム要素
- Drupal 7の重量フィールドからのマイグレーションサポート
- 各測定タイプの事前設定オプション付きField UI統合
Use Cases
ECサイトの商品重量と寸法
コマースアプリケーション用に商品重量と配送寸法を保存します。このモジュールはDrupal Commerceとうまく統合され、配送料金計算のための正確な重量計算を提供します。商品用の重量フィールドとパッケージサイズ用の寸法フィールドを設定します。フォーマッターのoutput_unit設定を使用して、顧客が好む単位で重量を表示できます。
科学データ収集
科学アプリケーション向けに高精度で測定値を記録します。bcmathベースの算術により、計算中に浮動小数点エラーが蓄積されることがありません。温度フィールドは正確な変換式でケルビン、摂氏、華氏をサポートします。
不動産物件の測定
物件の寸法、部屋のサイズ、土地面積を保存します。敷地面積(ヘクタール、平方メートル、平方フィートをサポート)に面積フィールドを使用し、部屋の測定に寸法フィールドを使用します。フォーマッターは国際的なリスティング向けにメートル法とヤードポンド法の間で変換できます。
製造業と在庫管理
製造品や在庫品目の物理仕様を追跡します。倉庫管理用の製品寸法、配送物流用の重量、コンテナ積載最適化用の体積を保存します。
レシピと栄養アプリケーション
体積(ml、l、カップ)または重量(g、kg、oz)の測定値で材料の分量を保存します。変換機能により、ユーザーの好みに基づいてレシピをメートル法またはヤードポンド法のいずれかで表示できます。
圧力監視システム
センサーや機器からの圧力測定値を様々な単位(psi、bar、Pa、atm)で記録します。異なる地域標準や機器仕様に合わせて単位間で変換します。
Tips
- プログラムで測定タイプを扱う際はMeasurementType定数(MeasurementType::WEIGHTなど)を使用してください
- 精度を維持するため、Calculatorクラスと値オブジェクトには常に数値を文字列として渡してください
- Temperatureクラスは温度スケールの非線形性のため、単純な乗算係数ではなくカスタム変換式を使用します
- 適切なロケール固有の数値フォーマットのためにPHP intl拡張をインストールしてください。インストールしない場合、ユーザーはピリオドを小数点記号として使用する必要があります
- 値オブジェクトは不変です - 算術演算は元のオブジェクトを変更せず、新しいインスタンスを返します
- MeasurementItemフィールドアイテムのtoMeasurement()メソッドを使用して、プログラム的な操作用の値オブジェクトを取得できます
- physical_numberフォーム要素は現在のロケールで期待される小数形式を示すプレースホルダーを自動的に表示します
- Drupal 7からマイグレーションする場合、physical_weightマイグレーションプロセスプラグインを使用してフィールド値を変換してください
Technical Details
Troubleshooting 4
PHP intl拡張をインストールしてください。インストールしない場合、NumberFormatterはロケール固有の小数点記号なしの基本機能にフォールバックします。
算術にはCalculatorクラスまたは値オブジェクトのメソッドを使用していることを確認してください。測定値でPHPのネイティブfloat算術を使用しないでください。
温度変換は特殊な式を使用します(単純な乗算ではありません)。Temperatureクラスはconvert()メソッドをオーバーライドして、ケルビン/摂氏/華氏の変換を正しく処理します。
physical_number要素はロケール解析を自動的に処理します。プレーンなテキストフィールドではなく、physical_measurementまたはphysical_dimensionsフォーム要素を使用していることを確認してください。