Ini adalah tulisan lanjutan dari tutorial sebelumnya, Custom Database, Part 1: Data, Schema, Snippet, dan Chunk.
Form Dasar
Penggunaan form dasar dalam html adalah sebagai berikut:
<form action="" method="post">
Nama: <input type="text" name="nama" /><br />
Jenis kelamin: <input type="radio" name="jenkel" value="p" /> Pria
<input type="radio" name="jenkel" value="w" /> Wanita<br />
Alamat: <input type="text" name="alamat" /><br />
No. Telepon: <input type="text" name="no_telp" /><br />
No. Induk: <input type="text" name="no_induk" /><br />
<input type="submit" name="submit" value="Masukkan data" />
</form>
Hasilnya kurang lebih adalah seperti ini:

Biasanya, nilai dalam parameter action="" pada form di atas dimasukan file *.php (atau bahasa server-side lainnya) untuk diproses lebih lanjut.
Jika action="" dibiarkan kosong, artinya file pemrosesnya berada di halaman yang sama, yaitu halaman form ini.
Lalu, disinilah kita memanfaatkan snippet FormIt sebagai validator isian ketika ada variabel $_POST (setelah tombol submit / Masukkan data ditekan).
File pemrosesnya tidak lain adalah parameter &hooks pada FormIt yang dapat berupa:
- nama snippet
- path ke file *.php (FormIt 2.0.0+)
Dalam tutorial ini, saya memilih yang kedua.
Mari kita tambahkan kode form di atas menjadi seperti ini:
[[!FormIt? &hooks=`[[++core_path]]components/karyawan/elements/snippets/karyawan.tambah.hook.php`]]
<form action="" method="post">
Nama: <input type="text" name="nama" /><br />
Jenis kelamin: <input type="radio" name="jenkel" value="p" /> Pria
<input type="radio" name="jenkel" value="w" /> Wanita<br />
Alamat: <input type="text" name="alamat" /><br />
No. Telepon: <input type="text" name="no_telp" /><br />
No. Induk: <input type="text" name="no_induk" /><br />
<input type="submit" name="submit" value="Masukkan data" />
</form>
Setelah itu, buatlah file yang sesuai dengan path diatas.
Hook karyawan.tambah.hook.php
Satu hal penting yang perlu diingat, snippet ini harus kembali sebagai return TRUE atau return FALSE agar FormIt bisa tau bahwa hook ini telah diproses. Jika tidak ada return boolean ini, maka FormIt akan menganggapnya sebagai FALSE.
Mulailah kita mengisi file ini dengan kode dibawah ini:
/**
* Tutorial menambah daftar karyawan
* @package karyawan
* @subpackage tambah
*/
$allFormFields = $hook->getValues();
$output = '<pre>' . print_r($allFormFields, true) . '</pre>';
die($output); // jajal isian
Coba jalankan halaman form Anda, isilah inputnya, kemudian tekan submit button-nya.
Kurang lebih, Anda akan mendapatkan hasil yang sama seperti ini:

Bagus! Ini artinya hook kita sudah jalan.
Sekarang kita ubah isinya agar segera diproses untuk masuk ke dalam database.
<?php
/**
* Tutorial menambah daftar karyawan
* @package karyawan
* @subpackage tambah
*/
//$allFormFields = $hook->getValues();
//$output = '<pre>' . print_r($allFormFields, true) . '</pre>';
//die($output);
$nama = $hook->getValue('nama');
if (empty($nama)) {
$errorMsg = 'Harap masukkan nama.';
$hook->addError('nama',$errorMsg);
return FALSE;
}
$jenkel = $hook->getValue('jenkel');
$alamat = $hook->getValue('alamat');
$no_telp = $hook->getValue('no_telp');
$no_induk = $hook->getValue('no_induk');
$basePath = !empty($basePath) ? $basePath : $modx->getOption('core_path') . 'components/karyawan/';
$modx->addPackage('karyawan', $basePath . 'model/', 'modx_belajar_');
$karyawanBaru = $modx->newObject('MasterKaryawan');
$karyawanBaru->set('nama', $nama);
$karyawanBaru->set('jenkel', $jenkel);
$karyawanBaru->set('alamat', $alamat);
$karyawanBaru->set('no_telp', $no_telp);
$karyawanBaru->set('no_induk', $no_induk);
if ($karyawanBaru->save() == false) {
$errorMsg = 'Daftar baru karyawan gagal dimasukkan!';
$hook->addError('db', $errorMsg);
return FALSE;
}
return TRUE;
Tanpa query untuk meng-insert data, Anda baru saja memasukkan data baru ke dalam custom database Anda.

xPDO akan mengatur dengan sendirinya insert data ini, ke dalam MySQL atau msSQL tergantung konfigurasi database Anda diawal instalasi.
Lalu, apakah fungsi dari $hook->addError() ?
Kita edit kembali halaman yang terdapat form ini:
[[!FormIt? &hooks=`[[++core_path]]components/karyawan/elements/snippets/karyawan.tambah.hook.php`]]
[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form action="" method="post">
Nama: <input type="text" name="nama" /> [[!+fi.error.nama]]<br />
Jenis kelamin: <input type="radio" name="jenkel" value="p" /> Pria
<input type="radio" name="jenkel" value="w" /> Wanita<br />
Alamat: <input type="text" name="alamat" /><br />
No. Telepon: <input type="text" name="no_telp" /><br />
No. Induk: <input type="text" name="no_induk" /><br />
<input type="submit" name="submit" value="Masukkan data" />
</form>
Sekarang coba Anda submit tanpa isian nama.
Bersambung
Saya akan menyambung tulisan ini untuk mengedit dan menghapus data, karena berhubungan dengan statement condition dari parameter $_GET.
Semoga bermanfaat.
Referensi
