自訂欄位¶
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。在開啟預訂表格之前驗證兩個表中的結果定義。
會議室/設備複選框¶
在 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 取得建議,同時仍接受另一個值:
它支援與$select_options相同的欄位。對於關聯資料列表,儲存的金鑰可能會讓使用者感到驚訝,因此在使用之前測試其行為。
必填欄位、私有欄位和驗證欄位¶
使欄位在任何地方都是必填的:
或僅在資料庫 ID 為 1 和 3 的區域:
特定區域的強制規則僅適用於entry欄位。提交前必須選取必填複選框。
entry 和 users 支援私有自訂欄位:
僅當啟用並設定私人預訂時,這才能保護該值。測試每個相關角色;不要使用 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';
輸入文字欄位可以有翻譯的佔位符:
客戶端模式可以改善回饋,但不會將欄位變成秘密或不受信任標記的安全場所。
控製欄位順序¶
將預訂欄位明確放置在建立和檢視頁面中:
未列出的欄位按正常順序附加。自訂欄位也可以放置在報表搜尋表單中:
完整範例¶
將 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定義均相同。 - 建立、編輯、檢視、複製和刪除預訂作品。
- 可以正確編輯重複出現的系列和一次出現的情況。
- 資料庫預設值套用於新記錄。
- 必需、私有、選擇、資料清單和驗證行為按角色和區域工作。
- 標籤以每種設定的語言顯示。
- 搜尋、報告、電子郵件、行事曆匯出和匯入/匯出顯示安全值。
- 會議室/設備和使用者管理僅顯示預期欄位。
- 備份和復原過程包括擴充模式。