Câmpuri personalizate¶
MRBS 1.12.2 poate detecta coloane suplimentare în baza de date și le poate folosi drept câmpuri pentru rezervări, săli și utilizatori. Prin urmare, câmpurile personalizate sunt extensii ale schemei, nu setări care creează automat coloane.
Creați mai întâi o copie de rezervă
Faceți o copie de rezervă a bazei de date și testați modificarea pe o instanță care nu este de producție. Upgrade-urile MRBS nu creează, migrează sau elimină coloane specifice site-ului.
Unde sunt acceptate câmpurile personalizate¶
| Tabelul bazei de date | Scop | Regulă importantă |
|---|---|---|
entry |
Date suplimentare pentru o rezervare individuală | Adăugați coloana identică la repeat |
repeat |
Date șablon pentru o rezervare recurentă | Păstrați numele, tipul, lungimea, anulabilitatea și implicit identice cu entry |
room |
Proprietăți suplimentare de sală sau resurse | Afișat și editat cu datele sălii |
users |
Date suplimentare despre profilul utilizatorului | Folosit numai cu autentificarea bazei de date |
O coloană entry fără o coloană identică repeat duce la eșecul operațiunilor de rezervare recurente. Tratați perechea ca pe o singură schimbare de schemă.
Utilizați numai litere, cifre și litere de subliniere într-un nume de coloană. Pentru compatibilitate cu PostgreSQL, începeți-l cu o literă sau liniuță de subliniere. Preferați nume stabile, minuscule, cum ar fi participant_count sau catering.
Tipuri de baze de date acceptate¶
| tip SQL | MRBS control |
|---|---|
TEXT |
Text cu mai multe rânduri |
VARCHAR |
Introducere text sau text pe mai multe rânduri, în funcție de lungimea maximă |
DATE |
Introducerea datei |
DECIMAL / NUMERIC |
Introducerea numărului |
INT |
Intrare întreg |
SMALLINT / TINYINT |
Casetă de selectare, interpretată ca valoare booleană |
Utilizați SMALLINT pentru câmpurile personalizate booleene pe PostgreSQL și TINYINT pe MySQL. Alte tipuri de coloane nu sunt acceptate de gestionarea automată a câmpurilor personalizate.
Adăugați un câmp la schemă¶
Exemplele presupun prefixul implicit de tabel mrbs_. Înlocuiți-l dacă $db_tbl_prefix are altă valoare.
Câmp de rezervare¶
Acest exemplu adaugă o opțiune opțională de catering:
ALTER TABLE mrbs_entry
ADD COLUMN catering VARCHAR(32) DEFAULT NULL;
ALTER TABLE mrbs_repeat
ADD COLUMN catering VARCHAR(32) DEFAULT NULL;
Ambele declarații funcționează cu MySQL și PostgreSQL. Verificați definițiile rezultate din ambele tabele înainte de a deschide formularul de rezervare.
Caseta de selectare a sălii¶
În MRBS 1.12.2, baza de date implicită este utilizată atunci când este creat un nou rând. Alegeți în mod deliberat valorile implicite, în special pentru câmpurile și casetele obligatorii.
Dați câmpului o etichetă tradusă¶
Fără o modificare, MRBS derivă eticheta din numele coloanei. Definiți o etichetă pentru fiecare limbă activă în 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';
Pentru o pereche entry/repeat, definiți numai entry.catering; nu este necesar un jeton repeat.catering. Câmpurile pentru sală și utilizator folosesc jetoane precum room.coffee_machine și users.phone.
Consultați Text și traduceri pentru înlocuiri de vocabular, fișiere de limbă și pagini de ajutor traduse.
Alegeți comportamentul de intrare¶
Alegeri fixe¶
$select_options înlocuiește intrarea liberă cu o listă de selectare:
$select_options['entry.catering'] = array(
'' => 'Please select',
'c' => 'Coffee',
's' => 'Sandwiches',
'h' => 'Hot lunch',
);
Pentru o matrice asociativă, MRBS stochează cheia (c) și afișează, caută și raportează valoarea (Coffee). Aceasta permite modificarea textului fără a rescrie datele stocate.
Evitați cheile care constau numai din cifre: PHP convertește cheile șir de tip întreg în numere întregi, astfel încât MRBS poate interpreta matricea ca fiind indexată. Includeți o alegere goală atunci când o selecție obligatorie trebuie să înceapă neselectată.
$select_options este acceptat pentru câmpurile entry.name, entry.description, personalizate entry și personalizate users. Legendele opțiunilor configurate sunt șiruri la nivelul întregului site; eticheta câmpului în sine poate fi tradusă cu $vocab_override.
Sugestii cu intrare liberă¶
Folosiți $datalist_options pentru sugestii, acceptând încă o altă valoare:
Acceptă aceleași câmpuri ca $select_options. Cu listele de date asociative, cheia stocată poate fi surprinzătoare pentru utilizatori, așa că testați comportamentul înainte de utilizare.
Câmpuri obligatorii, private și validate¶
Faceți un câmp obligatoriu peste tot:
Sau numai în zonele cu ID-urile bazei de date 1 și 3:
Regulile obligatorii specifice zonei se aplică numai câmpurilor entry. O casetă de selectare obligatorie trebuie bifată înainte de trimitere.
Câmpurile personalizate private sunt acceptate pentru entry și users:
Acest lucru protejează valoarea numai atunci când rezervările private sunt activate și configurate. Testează fiecare rol relevant; nu utilizați confidențialitatea UI ca înlocuitor pentru minimizarea datelor sensibile.
Validarea modelului este în prezent limitată la câmpurile de text personalizate 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';
Câmpurile de text de intrare pot avea substituenți traduși:
Tiparele la nivelul clientului îmbunătățesc feedback-ul, dar nu transformă un câmp într-un loc sigur pentru secrete sau markup neîncrezător.
Ordinea câmpului de control¶
Plasați câmpurile de rezervare în mod explicit în paginile de creare și vizualizare:
Câmpurile care nu sunt listate sunt atașate în ordinea lor normală. Câmpurile personalizate pot fi plasate și în formularul de căutare a rapoartelor:
Exemplu complet¶
După adăugarea catering la ambele tabele de rezervare:
$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',
);
Legendele opțiunilor din acest exemplu rămân aceleași în fiecare limbă a UI. Dacă subtitrările opțiunilor traduse sunt o cerință, proiectați și testați o extensie specifică site-ului, în loc să presupuneți că $select_options le traduce automat.
Schimbați, eliminați și actualizați¶
Înainte de a scurta o coloană sau de a-i schimba tipul, inspectați valorile existente și testați conversia. Înainte de a elimina un câmp, eliminați referințele de configurare ale acestuia, implementați acea modificare, confirmați că aplicația funcționează și abia apoi aruncați coloana prin procesul normal de modificare a bazei de date. Pentru câmpurile de rezervare, modificați atât entry, cât și repeat.
Înregistrați fiecare coloană personalizată din documentația operațională a site-ului și verificați-o din nou după fiecare actualizare MRBS. Scripturile de schemă standard MRBS nu dețin aceste coloane.
Lista de verificare pentru verificare¶
- Definițiile
entryșirepeatsunt identice pentru fiecare câmp de rezervare. - Crearea, editarea, vizualizarea, copierea și ștergerea unei rezervări funcționează.
- O serie recurentă și o apariție pot fi editate corect.
- Valorile implicite ale bazei de date sunt aplicate înregistrărilor noi.
- Comportamentul obligatoriu, privat, selectat, lista de date și validare funcționează în funcție de rol și zonă.
- Etichetele apar în fiecare limbă configurată.
- Căutarea, rapoartele, e-mailul, exportul calendarului și importul/exportul arată valori sigure.
- Administrarea sălii și a utilizatorilor afișează numai câmpurile dorite.
- Procedurile de backup și restaurare includ schema extinsă.