Sari la conținut

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

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;

Î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:

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

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:

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

Sau numai în zonele cu ID-urile bazei de date 1 și 3:

$is_mandatory_field['entry.catering'] = array(1, 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:

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

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:

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

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:

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

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:

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

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 și repeat sunt 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ă.