Gå till innehållet

Anpassade fält

MRBS 1.12.2 kan identifiera extra databaskolumner och använda dem som fält för bokningar, rum och användare. Anpassade fält är därför utökningar av databasschemat, inte inställningar som automatiskt skapar kolumner.

Säkerhetskopiera först

Säkerhetskopiera databasen och testa ändringen på en icke-produktionsinstans. MRBS uppgraderingar skapar, migrerar eller tar inte bort platsspecifika kolumner.

Där anpassade fält stöds

Databastabell Ändamål Viktig regel
entry Extra data för en individuell bokning Lägg till samma kolumn i repeat
repeat Malldata för en återkommande bokning Behåll namn, typ, längd, nullbarhet och standard identiska med entry
room Extra rum eller resursegenskaper Visas och redigeras med rumsdata
users Extra användarprofildata Används endast med databasautentisering

En entry kolumn utan en identisk repeat kolumn gör att återkommande bokningsoperationer misslyckas. Behandla paret som en schemaändring.

Använd endast bokstäver, siffror och understreck i ett kolumnnamn. För kompatibilitet med PostgreSQL, börja den med en bokstav eller understreck. Föredrar stabila, gemener namn som participant_count eller catering.

Databastyper som stöds

SQL-typ MRBS kontroll
TEXT Flerradig text
VARCHAR Textinmatning eller flerradstext, beroende på dess maximala längd
DATE Datuminmatning
DECIMAL / NUMERIC Nummerinmatning
INT Heltalsinmatning
SMALLINT / TINYINT Kryssruta, tolkad som ett booleskt värde

Använd SMALLINT för booleska anpassade fält på PostgreSQL och TINYINT på MySQL. Andra kolumntyper stöds inte av den automatiska anpassade fälthanteringen.

Lägg till ett fält i schemat

Exemplen antar standardtabellprefixet mrbs_. Byt ut det om $db_tbl_prefix har ett annat värde.

Bokningsfält

Det här exemplet lägger till ett valfritt cateringalternativ:

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

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

Båda påståendena fungerar med MySQL och PostgreSQL. Verifiera de resulterande definitionerna i båda tabellerna innan du öppnar bokningsformuläret.

Kryssrutan Rum

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;

I MRBS 1.12.2 används databasens standard när en ny rad skapas. Välj standardinställningar medvetet, särskilt för obligatoriska fält och kryssrutor.

Ge fältet en översatt etikett

Utan en åsidosättning härleder MRBS etiketten från kolumnnamnet. Definiera en etikett per aktivt språk i 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';

För ett entry/repeat-par, definiera endast entry.catering; ingen repeat.catering-token behövs. Rum och användarfält använder tokens som room.coffee_machine och users.phone.

Se Text och översättningar för åsidosättande av ordförråd, språkfiler och översatta hjälpsidor.

Välj inmatningsbeteende

Fasta val

$select_options ersätter gratis inmatning med en vallista:

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

För en associativ array lagrar MRBS nyckeln (c) och visar, söker och rapporterar värdet (Coffee). Detta gör att ordalydelsen kan ändras utan att omskriva lagrad data.

Undvik nycklar som bara består av siffror: PHP konverterar heltalsliknande strängnycklar till heltal, så MRBS kan tolka arrayen som indexerad. Inkludera ett tomt val när ett obligatoriskt urval måste börja avmarkeras.

$select_options stöds för entry.name, entry.description, anpassade entry-fält och anpassade users-fält. De konfigurerade alternativtexterna är strängar för hela webbplatsen; själva fältetiketten kan översättas med $vocab_override.

Förslag med gratis input

Använd $datalist_options för förslag medan du fortfarande accepterar ett annat värde:

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

Den stöder samma fält som $select_options. Med associativa datalistor kan den lagrade nyckeln vara överraskande för användare, så testa beteendet före användning.

Obligatoriska, privata och validerade fält

Gör ett fält obligatoriskt överallt:

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

Eller bara i områden med databas-ID 1 och 3:

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

Områdesspecifika obligatoriska regler gäller endast för entry-fält. En obligatorisk kryssruta måste vara markerad innan inlämning.

Privata anpassade fält stöds för entry och users:

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

Detta skyddar endast värdet när privata bokningar är aktiverade och konfigurerade. Testa alla relevanta roller; använd inte användargränssnittets sekretess som ett substitut för att minimera känslig data.

Mönstervalidering är för närvarande begränsad till anpassade users textfält:

$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';

Inmatningstextfält kan ha översatta platshållare:

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

Mönster på klientsidan förbättrar feedback men gör inte ett fält till en säker plats för hemligheter eller opålitlig markering.

Kontrollfältsordning

Placera bokningsfält uttryckligen i skapa och visa sidor:

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

Fält som inte är listade läggs till i normal ordning. Anpassade fält kan också placeras i rapportsökningsformuläret:

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

Komplett exempel

Efter att ha lagt till catering till båda bokningsborden:

$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',
);

Alternativtexterna i det här exemplet förblir desamma i alla UI-språk. Om översatta alternativtexter är ett krav, designa och testa ett platsspecifikt tillägg istället för att anta att $select_options översätter dem automatiskt.

Ändra, ta bort och uppgradera

Innan du förkortar en kolumn eller ändrar dess typ, inspektera befintliga värden och testa konverteringen. Innan du tar bort ett fält, ta bort dess konfigurationsreferenser, distribuera den ändringen, bekräfta att applikationen fungerar och först därefter släpper du kolumnen genom den normala databasändringsprocessen. För bokningsfält, ändra både entry och repeat.

Anteckna varje anpassad kolumn i webbplatsens driftdokumentation och kontrollera den igen efter varje MRBS uppgradering. Standard MRBS schemaskript äger inte dessa kolumner.

Verifieringschecklista

  • Definitionerna entry och repeat är identiska för varje bokningsfält.
  • Att skapa, redigera, visa, kopiera och ta bort en bokning fungerar.
  • En återkommande serie och en förekomst kan redigeras korrekt.
  • Databasstandarder tillämpas på nya poster.
  • Obligatoriskt, privat, välj, datalist och valideringsbeteende fungerar efter roll och område.
  • Etiketter visas på alla konfigurerade språk.
  • Sökning, rapporter, e-post, kalenderexport och import/export visar säkra värden.
  • Rums- och användaradministration visar endast de avsedda fälten.
  • Rutiner för säkerhetskopiering och återställning inkluderar det utökade schemat.