Przejdź do treści

Pola niestandardowe

MRBS 1.12.2 wykrywa dodatkowe kolumny bazy danych i może używać ich jako pól rezerwacji, pokoi oraz użytkowników. Pola niestandardowe są więc rozszerzeniem schematu; sama konfiguracja nie tworzy kolumn automatycznie.

!!! warning „Najpierw wykonaj kopię zapasową”

Utwórz kopię zapasową bazy danych i przetestuj zmianę w instancji nieprodukcyjnej. Uaktualnienia MRBS nie tworzą, nie migrują ani nie usuwają kolumn specyficznych dla witryny.

Gdzie obsługiwane są pola niestandardowe

Tabela bazy danych Cel Ważna zasada
entry Dodatkowe dane do rezerwacji indywidualnej Dodaj identyczną kolumnę do repeat
repeat Dane szablonu dla rezerwacji cyklicznej Zachowaj nazwę, typ, długość, dopuszczalność wartości null i wartość domyślną identyczną z entry
room Dodatkowe właściwości pokoju lub zasobów Wyświetlane i edytowane z danymi pomieszczeń
users Dodatkowe dane profilu użytkownika Używane tylko z uwierzytelnianiem bazy danych

Kolumna entry bez identycznej kolumny repeat powoduje niepowodzenie operacji rezerwacji cyklicznych. Traktuj tę parę jako jedną zmianę schematu.

W nazwie kolumny używaj wyłącznie liter, cyfr i podkreśleń. Aby zachować zgodność z numerem PostgreSQL, rozpocznij go literą lub podkreśleniem. Preferuj stabilne nazwy pisane małymi literami, takie jak participant_count lub catering.

Obsługiwane typy baz danych

Typ SQL Kontrola MRBS
TEXT Tekst wielowierszowy
VARCHAR Wprowadzanie tekstu lub tekst wielowierszowy, w zależności od jego maksymalnej długości
DATE Wprowadzanie daty
DECIMAL / NUMERIC Wprowadzanie numeru
INT Wejście całkowite
SMALLINT / TINYINT Pole wyboru interpretowane jako wartość logiczna

Użyj SMALLINT dla niestandardowych pól logicznych na PostgreSQL i TINYINT na MySQL. Inne typy kolumn nie są obsługiwane przez automatyczną obsługę pól niestandardowych.

Dodaj pole do schematu

W przykładach założono domyślny przedrostek tabeli mrbs_. Wymień go, jeśli $db_tbl_prefix ma inną wartość.

Pole rezerwacji

W tym przykładzie dodano opcjonalny wybór cateringu:

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

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

Obie instrukcje działają z MySQL i PostgreSQL. Przed otwarciem formularza rezerwacji sprawdź powstałe definicje w obu tabelach.

Pole wyboru pokoju

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;

W wersji MRBS 1.12.2 podczas tworzenia nowego wiersza używana jest domyślna baza danych. Wybieraj wartości domyślne celowo, zwłaszcza w przypadku obowiązkowych pól i pól wyboru.

Nadaj polu przetłumaczoną etykietę

Bez zastąpienia MRBS wyprowadza etykietę z nazwy kolumny. Zdefiniuj jedną etykietę na aktywny język w 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';

Dla pary entry/repeat zdefiniuj tylko entry.catering; nie jest potrzebny token repeat.catering. Pola pokoju i użytkownika korzystają z tokenów, takich jak room.coffee_machine i users.phone.

Zobacz Tekst i tłumaczenia, aby zapoznać się z zastąpieniami słownictwa, plikami językowymi i przetłumaczonymi stronami pomocy.

Wybierz zachowanie wejściowe

Stałe wybory

$select_options zastępuje wolne wejście listą wyboru:

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

W przypadku tablicy asocjacyjnej MRBS przechowuje klucz (c) oraz wyświetla, wyszukuje i raportuje wartość (Coffee). Umożliwia to zmianę brzmienia bez przepisywania przechowywanych danych.

Unikaj kluczy składających się wyłącznie z cyfr: PHP konwertuje klucze łańcuchowe typu całkowitego na liczby całkowite, więc MRBS może zinterpretować tablicę jako indeksowaną. Uwzględnij pusty wybór, jeśli obowiązkowy wybór musi rozpocząć się niezaznaczony.

$select_options jest obsługiwane dla pól entry.name, entry.description, niestandardowych pól entry i niestandardowych pól users. Skonfigurowane podpisy opcji to ciągi znaków obejmujące całą witrynę; samą etykietę pola można przetłumaczyć za pomocą $vocab_override.

Sugestie z bezpłatnym wejściem

Użyj $datalist_options, aby uzyskać sugestie, jednocześnie akceptując inną wartość:

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

Obsługuje te same pola co $select_options. W przypadku asocjacyjnych list danych przechowywany klucz może zaskoczyć użytkowników, dlatego przed użyciem przetestuj zachowanie.

Pola obowiązkowe, prywatne i zatwierdzone

Ustaw pole obowiązkowe wszędzie:

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

Lub tylko w obszarach o identyfikatorach baz danych 1 i 3:

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

Obowiązkowe zasady specyficzne dla obszaru mają zastosowanie tylko do pól entry. Przed przesłaniem należy zaznaczyć obowiązkowe pole wyboru.

Prywatne pola niestandardowe są obsługiwane dla entry i users:

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

Chroni to wartość tylko wtedy, gdy rezerwacje prywatne są włączone i skonfigurowane. Przetestuj każdą odpowiednią rolę; nie używaj prywatności interfejsu użytkownika jako substytutu minimalizacji wrażliwych danych.

Sprawdzanie poprawności wzorca jest obecnie ograniczone do niestandardowych pól tekstowych 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';

Pola tekstowe wpisów mogą mieć przetłumaczone symbole zastępcze:

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

Wzorce po stronie klienta poprawiają opinie, ale nie zmieniają pola w bezpieczne miejsce na sekrety lub niezaufane znaczniki.

Kolejność pól kontrolnych

Umieść pola rezerwacji jawnie na stronach tworzenia i przeglądania:

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

Pola niewymienione na liście są dołączane w normalnej kolejności. W formularzu wyszukiwania raportów można także umieścić niestandardowe pola:

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

Kompletny przykład

Po dodaniu catering do obu tabel rezerwacji:

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

Podpisy opcji w tym przykładzie pozostają takie same w każdym języku interfejsu użytkownika. Jeśli wymagane są przetłumaczone podpisy opcji, zaprojektuj i przetestuj rozszerzenie specyficzne dla witryny, zamiast zakładać, że $select_options przetłumaczy je automatycznie.

Zmień, usuń i uaktualnij

Przed skróceniem kolumny lub zmianą jej typu sprawdź istniejące wartości i przetestuj konwersję. Przed usunięciem pola usuń jego odniesienia do konfiguracji, wprowadź tę zmianę, potwierdź, że aplikacja działa, a dopiero potem upuść kolumnę w normalnym procesie zmiany bazy danych. W przypadku pól rezerwacji zmień zarówno entry, jak i repeat.

Zapisz każdą niestandardową kolumnę w dokumentacji operacyjnej witryny i sprawdź ją ponownie po każdej aktualizacji MRBS. Standardowe skrypty schematu MRBS nie są właścicielami tych kolumn.

Lista kontrolna weryfikacji

  • Definicje entry i repeat są identyczne dla każdego pola rezerwacji.
  • Tworzenie, edytowanie, przeglądanie, kopiowanie i usuwanie rezerwacji działa.
  • Seria cykliczna i jedno wystąpienie mogą być poprawnie edytowane.
  • Do nowych rekordów stosowane są ustawienia domyślne bazy danych.
  • Zachowanie wymagane, prywatne, wybieranie, lista danych i sprawdzanie poprawności działa według roli i obszaru.
  • Etykiety pojawiają się w każdym skonfigurowanym języku.
  • Wyszukiwanie, raporty, e-maile, eksport kalendarza i import/eksport pokazują bezpieczne wartości.
  • Administracja pokojami i użytkownikami wyświetla tylko zamierzone pola.
  • Procedury tworzenia kopii zapasowych i przywracania obejmują schemat rozszerzony.