跳轉至

自訂欄位

MRBS 1.12.2 可以辨識額外的資料庫欄位,並將其用於預訂、會議室/設備和使用者資料。因此,自訂欄位屬於資料庫綱要擴充,並不是會自動建立欄位的設定項目。

!!! warning “先備份”

備份資料庫並在非生產實例上測試變更。 MRBS 升級不會建立、遷移或刪除特定於網站的欄位。

支援自訂欄位的地方

資料庫表 目的 重要規則
entry 個人預訂的額外資料 將相同的欄位加入到 repeat
repeat 定期預訂的模板資料 保持名稱、類型、長度、可為空性和預設值與 entry 相同
room 額外的會議室/設備或資源屬性 顯示和編輯會議室/設備資料
users 額外的使用者個人資料資料 僅與資料庫身分驗證一起使用

沒有相同的 repeat 列的 entry 列會導致重複預訂操作失敗。將這一對視為一個架構更改。

列名中只能使用字母、數字和底線。為了與 PostgreSQL 相容,請以字母或下劃線開頭。喜歡穩定的小寫名稱,例如 participant_count 或 catering。

支援的資料庫類型

SQL類型 MRBS控制
TEXT 多行文字
VARCHAR 文字輸入或多行文本,取決於其最大長度
DATE 日期輸入
DECIMAL / NUMERIC 數位輸入
INT 整數輸入
SMALLINT / TINYINT 複選框,解釋為布林值

將 SMALLINT 用於PostgreSQL 上的布林自訂欄位和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 中為每種活動語言定義一個標籤:

$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可能會將陣列解釋為索引陣列。當必須開始取消選擇強制選擇時,請包含一個空選擇。

entry.name、entry.description、自訂 entry 欄位和自訂 users 欄位支援$select_options。設定的選項標題是網站範圍的字串;欄位標籤本身可以使用$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 定義均相同。
  • 建立、編輯、檢視、複製和刪除預訂作品。
  • 可以正確編輯重複出現的系列和一次出現的情況。
  • 資料庫預設值套用於新記錄。
  • 必需、私有、選擇、資料清單和驗證行為按角色和區域工作。
  • 標籤以每種設定的語言顯示。
  • 搜尋、報告、電子郵件、行事曆匯出和匯入/匯出顯示安全值。
  • 會議室/設備和使用者管理僅顯示預期欄位。
  • 備份和復原過程包括擴充模式。