コンテンツにスキップ

カスタムフィールド

MRBS 1.12.2 では、追加のデータベース列を検出し、予約、部屋、ユーザーのフィールドとして使用できます。したがって、カスタム フィールドはスキーマ拡張であり、列を自動的に作成する設定ではありません。

!!! warning 「まずはバックアップしてください」

データベースをバックアップし、非実稼働インスタンスで変更をテストします。 MRBS アップグレードでは、サイト固有の列は作成、移行、または削除されません。

カスタムフィールドがサポートされている場所

データベーステーブル 目的 重要なルール
entry 個人予約の追加データ 同じ列を repeat に追加します
repeat 定期予約のテンプレート データ 名前、タイプ、長さ、NULL 値の許容性、およびデフォルトを entry と同一に保ちます。
room 追加の部屋またはリソースのプロパティ 部屋データと合わせて表示・編集
users 追加のユーザー プロファイル データ データベース認証でのみ使用されます

entry 列に同一の repeat 列がない場合、定期的な予約操作は失敗します。ペアを 1 つのスキーマ変更として扱います。

列名には文字、数字、アンダースコアのみを使用してください。 PostgreSQL との互換性を確保するには、文字またはアンダースコアで始めてください。 participant_count や catering など、安定した小文字の名前を使用してください。

サポートされているデータベースの種類

SQLの種類 MRBS コントロール
TEXT 複数行のテキスト
VARCHAR テキスト入力または複数行テキスト(最大長に応じて)
DATE 日付入力
DECIMAL / NUMERIC 数値入力
INT 整数入力
SMALLINT / TINYINT チェックボックス。ブール値として解釈されます。

PostgreSQL のブール型カスタム フィールドには SMALLINT を、MySQL では TINYINT を使用します。他の列タイプは自動カスタムフィールド処理ではサポートされていません。

スキーマにフィールドを追加する

この例では、デフォルトの mrbs_ テーブル接頭辞を想定しています。 $db_tbl_prefix が別の値の場合は置き換えます。

予約フィールド

この例では、オプションのケータリングの選択肢を追加します。

ALTER TABLE mrbs_entry
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

ALTER TABLE mrbs_repeat
  ADD COLUMN catering VARCHAR(32) DEFAULT NULL;

どちらのステートメントも MySQL と PostgreSQL で機能します。予約フォームを開く前に、両方のテーブルで結果の定義を確認してください。

部屋チェックボックス

ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine TINYINT NOT NULL DEFAULT 0;
ALTER TABLE mrbs_room
  ADD COLUMN coffee_machine SMALLINT NOT NULL DEFAULT 0;

MRBS 1.12.2 では、新しい行が作成されるときにデータベースのデフォルトが使用されます。特に必須フィールドとチェックボックスについては、意図的にデフォルトを選択してください。

フィールドに翻訳されたラベルを付ける

オーバーライドを行わない場合、MRBS は列名からラベルを派生します。 config.inc.php でアクティブな言語ごとに 1 つのラベルを定義します。

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

entry/repeat ペアの場合は、entry.catering のみを定義します。 repeat.catering トークンは必要ありません。部屋およびユーザーフィールドでは、room.coffee_machine や users.phone などのトークンが使用されます。

語彙の上書き、言語ファイル、および翻訳されたヘルプ ページについては、テキストと翻訳 を参照してください。

入力動作を選択する

固定された選択肢

$select_options は、自由入力を選択リストに置き換えます。

$select_options['entry.catering'] = array(
    ''  => 'Please select',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

連想配列の場合、MRBS はキー (c) を保存し、値 (Coffee) を表示、検索、レポートします。これにより、保存されたデータを書き換えることなく文言を変更できます。

数字のみで設定されるキーは避けてください。 PHP は整数のような文字列キーを整数に変換するため、 MRBS は配列をインデックス付きとして解釈する可能性があります。必須の選択を選択しない状態で開始する必要がある場合は、空の選択肢を含めます。

$select_options は、entry.name、entry.description、カスタム entry フィールド、およびカスタム users フィールドでサポートされています。設定されたオプションのキャプションはサイト全体の文字列です。フィールドラベル自体は $vocab_override で翻訳できます。

自由な入力による提案

別の値を受け入れながら、提案には $datalist_options を使用します。

$datalist_options['entry.catering'] = array(
    'Coffee',
    'Sandwiches',
    'Hot lunch',
);

$select_options と同じフィールドをサポートします。連想データリストでは、保存されたキーがユーザーにとって驚くべきものになる可能性があるため、使用する前に動作をテストしてください。

必須、プライベート、および検証済みのフィールド

どこでもフィールドを必須にします。

$is_mandatory_field['entry.catering'] = true;

または、データベース ID 1 と 3 のエリアのみ:

$is_mandatory_field['entry.catering'] = array(1, 3);

エリア固有の必須ルールは、entry フィールドにのみ適用されます。送信前に必須のチェックボックスをオンにする必要があります。

プライベート カスタム フィールドは、entry および users でサポートされています。

$is_private_field['entry.internal_notes'] = true;
$is_private_field['users.phone'] = true;

これにより、プライベート予約が有効化および設定されている場合にのみ値が保護されます。関連するすべての役割をテストします。機密データを最小限に抑える代わりに UI プライバシーを使用しないでください。

現在、パターン検証はカスタム users テキスト フィールドに限定されています。

$pattern['users.zip_code'] = '^[0-9]{5}(?:-[0-9]{4})?$';
$vocab_override['en']['users.zip_code.oninvalid'] =
    'Enter a ZIP code such as 12345 or 12345-6789';

エントリ テキスト フィールドには、翻訳されたプレースホルダーを含めることができます。

$vocab_override['en']['entry.catering.placeholder'] =
    'State allergies or special requirements';

クライアント側のパターンはフィードバックを改善しますが、フィールドをシークレットや信頼できないマークアップの安全な場所に変えるわけではありません。

フィールドの順序を制御する

作成ページと表示ページに予約フィールドを明示的に配置します。

$edit_entry_field_order = array(
    'name',
    'catering',
    'description',
);

リストされていないフィールドは通常の順序で追加されます。カスタム フィールドはレポート検索フォームに配置することもできます。

$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
    'roommatch',
);

完全な例

catering を両方の予約テーブルに追加した後:

$vocab_override['en']['entry.catering'] = 'Catering';
$vocab_override['de']['entry.catering'] = 'Verpflegung';
$vocab_override['fr']['entry.catering'] = 'Restauration';
$vocab_override['es']['entry.catering'] = 'Catering';

$select_options['entry.catering'] = array(
    ''  => '—',
    'c' => 'Coffee',
    's' => 'Sandwiches',
    'h' => 'Hot lunch',
);

$is_mandatory_field['entry.catering'] = array(1, 3);
$edit_entry_field_order = array('name', 'catering', 'description');
$report_search_field_order = array(
    'report_start',
    'report_end',
    'catering',
);

この例のオプションのキャプションは、どの UI 言語でも同じです。オプションのキャプションの翻訳が必須の場合は、$select_options が自動的に翻訳すると仮定するのではなく、サイト固有の拡張機能を設計してテストしてください。

変更、削除、アップグレード

列を短縮したり、その型を変更したりする前に、既存の値を検査し、変換をテストしてください。フィールドを削除する前に、その設定参照を削除し、その変更をデプロイし、アプリケーションが動作することを確認してから、通常のデータベース変更プロセスを通じて列を削除します。予約フィールドについては、entry と repeat の両方を変更します。

サイトの運用ドキュメント内のすべてのカスタム列を記録し、MRBS アップグレードのたびに再確認します。標準の MRBS スキーマ スクリプトはこれらの列を所有しません。

検証チェックリスト

  • entry と repeat の定義は、すべての予約フィールドで同一です。
  • 予約の作成、編集、表示、コピー、削除は機能します。
  • 定期的なシリーズと 1 回の出現は正しく編集できます。
  • データベースのデフォルトが新しいレコードに適用されます。
  • 必須、プライベート、選択、データリスト、および検証の動作は、役割とエリアごとに機能します。
  • ラベルは、設定されているすべての言語で表示されます。
  • 検索、レポート、電子メール、カレンダーのエクスポート、インポート/エクスポートでは安全な値が表示されます。
  • 部屋およびユーザー管理には、目的のフィールドのみが表示されます。
  • バックアップおよび復元の手順には、拡張スキーマが含まれます。