Langkau tajuk talian

Medan tersuai

MRBS 1.12.2 boleh menemui lajur pangkalan data tambahan dan menggunakannya sebagai medan untuk tempahan, bilik dan pengguna. Oleh itu, medan tersuai ialah sambungan skema, bukan tetapan yang membuat lajur secara automatik.

Sandarkan diri dahulu

Sandarkan pangkalan data dan uji perubahan pada contoh bukan pengeluaran. MRBS peningkatan tidak membuat, memindahkan atau mengalih keluar lajur khusus tapak.

Di mana medan tersuai disokong

Jadual pangkalan data Tujuan Peraturan penting
entry Data tambahan untuk tempahan individu Tambahkan lajur yang sama pada repeat
repeat Data templat untuk tempahan berulang Kekalkan nama, jenis, panjang, kebolehbatalan dan lalai sama dengan entry
room Bilik tambahan atau sifat sumber Dipaparkan dan diedit dengan data bilik
users Data profil pengguna tambahan Digunakan hanya dengan pengesahan pangkalan data

Lajur entry tanpa lajur repeat yang sama menyebabkan operasi tempahan berulang gagal. Anggap pasangan itu sebagai satu perubahan skema.

Gunakan hanya huruf, nombor dan garis bawah dalam nama lajur. Untuk keserasian dengan PostgreSQL, mulakan dengan huruf atau garis bawah. Lebih suka nama huruf kecil yang stabil seperti participant_count atau catering.

Jenis pangkalan data yang disokong

jenis SQL MRBS kawalan
TEXT Teks berbilang baris
VARCHAR Input teks atau teks berbilang baris, bergantung pada panjang maksimumnya
DATE Input tarikh
DECIMAL / NUMERIC Input nombor
INT Input integer
SMALLINT / TINYINT Kotak semak, ditafsirkan sebagai nilai Boolean

Gunakan SMALLINT untuk medan tersuai Boolean pada PostgreSQL dan TINYINT pada MySQL. Jenis lajur lain tidak disokong oleh pengendalian medan tersuai automatik.

Tambahkan medan pada skema

Contoh menganggap awalan jadual mrbs_ lalai. Gantikannya jika $db_tbl_prefix mempunyai nilai lain.

Medan tempahan

Contoh ini menambah pilihan katering pilihan:

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

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

Kedua-dua pernyataan berfungsi dengan MySQL dan PostgreSQL. Sahkan definisi yang terhasil dalam kedua-dua jadual sebelum membuka borang tempahan.

Kotak semak bilik

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;

Dalam MRBS 1.12.2, lalai pangkalan data digunakan apabila baris baharu dicipta. Pilih lalai dengan sengaja, terutamanya untuk medan wajib dan kotak pilihan.

Berikan medan itu label yang diterjemahkan

Tanpa penggantian, MRBS memperoleh label daripada nama lajur. Tentukan satu label bagi setiap bahasa aktif dalam 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';

Untuk pasangan entry/repeat, tentukan hanya entry.catering; tiada token repeat.catering diperlukan. Ruangan dan medan pengguna menggunakan token seperti room.coffee_machine dan users.phone.

Lihat Teks dan terjemahan untuk menimpa perbendaharaan kata, fail bahasa dan halaman Bantuan yang diterjemahkan.

Pilih tingkah laku input

Pilihan tetap

$select_options menggantikan input percuma dengan senarai pilih:

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

Untuk tatasusunan bersekutu, MRBS menyimpan kunci (c) dan memaparkan, mencari dan melaporkan nilai (Coffee). Ini membolehkan perkataan berubah tanpa menulis semula data yang disimpan.

Elakkan kekunci yang hanya terdiri daripada digit: PHP menukar kunci rentetan seperti integer kepada integer, jadi MRBS boleh mentafsir tatasusunan sebagai diindeks. Sertakan pilihan kosong apabila pilihan wajib mesti dimulakan tanpa dipilih.

$select_options disokong untuk medan entry.name, entry.description, medan entry tersuai dan medan users tersuai. Kapsyen pilihan yang ditetapkan ialah rentetan seluruh tapak; label medan itu sendiri boleh diterjemahkan dengan $vocab_override.

Cadangan dengan input percuma

Gunakan $datalist_options untuk cadangan sementara masih menerima nilai lain:

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

Ia menyokong medan yang sama seperti $select_options. Dengan senarai data bersekutu, kunci yang disimpan boleh mengejutkan pengguna, jadi uji tingkah laku sebelum digunakan.

Medan wajib, peribadi dan disahkan

Jadikan medan wajib di mana-mana:

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

Atau hanya di lokasi dengan ID pangkalan data 1 dan 3:

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

Peraturan mandatori khusus lokasi hanya digunakan pada medan entry. Kotak semak wajib mesti ditanda sebelum penyerahan.

Medan peribadi peribadi disokong untuk entry dan users:

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

Ini melindungi nilai hanya apabila tempahan peribadi didayakan dan ditetapkan. Uji setiap peranan yang berkaitan; jangan gunakan privasi UI sebagai pengganti untuk meminimumkan data sensitif.

Pengesahan corak pada masa ini terhad kepada medan teks users tersuai:

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

Medan teks masukan boleh diterjemahkan pemegang tempat:

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

Corak sisi pelanggan menambah baik maklum balas tetapi tidak menjadikan medan sebagai tempat yang selamat untuk rahsia atau penanda yang tidak dipercayai.

Kawal susunan medan

Letakkan medan tempahan secara eksplisit dalam cipta dan lihat halaman:

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

Medan yang tidak disenaraikan dilampirkan dalam susunan biasa. Medan tersuai juga boleh diletakkan dalam borang carian laporan:

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

Contoh lengkap

Selepas menambah catering pada kedua-dua jadual tempahan:

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

Kapsyen pilihan dalam contoh ini kekal sama dalam setiap bahasa UI. Jika kapsyen pilihan yang diterjemahkan adalah keperluan, reka bentuk dan uji sambungan khusus tapak dan bukannya mengandaikan $select_options menterjemahkannya secara automatik.

Tukar, alih keluar dan tingkatkan

Sebelum memendekkan lajur atau menukar jenisnya, periksa nilai sedia ada dan uji penukaran. Sebelum mengalih keluar medan, padamkan rujukan konfigurasinya, laksanakan perubahan itu, sahkan aplikasi berfungsi, kemudian padamkan lajur melalui proses perubahan pangkalan data biasa. Untuk medan tempahan, tukar kedua-dua entry dan repeat.

Rekod setiap lajur tersuai dalam dokumentasi operasi tapak dan semak semula selepas setiap peningkatan MRBS. Skrip skema standard MRBS tidak memiliki lajur ini.

Senarai semak pengesahan

  • Takrifan entry dan repeat adalah sama untuk setiap medan tempahan.
  • Membuat, mengedit, melihat, menyalin dan memadam tempahan berfungsi.
  • Siri berulang dan satu kejadian boleh diedit dengan betul.
  • Lalai pangkalan data digunakan pada rekod baharu.
  • Tingkah laku yang diperlukan, peribadi, pilih, senarai data dan pengesahan berfungsi mengikut peranan dan lokasi.
  • Label muncul dalam setiap bahasa yang ditetapkan.
  • Carian, laporan, e-mel, eksport kalendar dan import/eksport menunjukkan nilai selamat.
  • Pentadbiran bilik dan pengguna hanya memaparkan medan yang dimaksudkan.
  • Prosedur sandaran dan pulihkan termasuk skema lanjutan.