term
term
term
term

Pengenalan tentang penggunaan form dan snippet FormIt untuk Custom Database.

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:

form dasar

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:

  1. nama snippet
  2. 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:

input tambahan

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.

hasil tambahan

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.

Semoga bermanfaat.

Referensi

  1. FormIt
  2. xPDO save

 


Comments

blog comments powered by Disqus