Sabtu, Oktober 27, 2012

Genius's Guides to: membuat module Drupal 6 bagian 2

Nah setelah pada posting sebelumnya kita mengenal dasar-dasar coding pada file .module-nya Drupal, kali ini kita akan membahas mengenai file bernama .install yang berisikan definisi dari struktur tabel database untuk kita gunakan pada module. Drupal memungkinkan kita menambahkan atau menghapus tabel-tabel module kita pada struktur database Drupal melalui hook_schema, hook_install dan hook_uninstall.

Pada contoh ini misalnya kita akan membuat sebuah tabel yang nantinya akan kita gunakan sebagai tempat untuk menampung record atau data dari module kita. Jumlah tabel yang kita bisa tambahkan bisa lebih dari satu. Berikut isi dari file .install untuk module Latihan kita:

/**
 * Module Latihan
 * Copyright Arie Nugraha (dicarve@gmail.com) 2012
 * Licensed under GPL v3
 *
 */

/**
 * Fungsi ini dijalankan oleh Drupal ketika kita pertama menginstall module Latihan
 */
function latihan_install() {
  // Create tables.
  drupal_install_schema('latihan');
}

/**
 * Fungsi ini dijalankan oleh Drupal melakukan un-install pada Latihan
 */
function latihan_uninstall() {
  // Remove tables.
  drupal_uninstall_schema('latihan');
}

/**
 * Pada fungsi ini kita mendefinisikan struktur tabel2 database yang akan
 * kita gunakan untuk menyimpan data2 module Latihan
 */
function latihan_schema() {
  $schema['latihan'] = array(
    'description' => 'Tabel untuk menyimpan data module Latihan.',
    'fields' => array(
      'lat_id'     => array(
        'type' => 'serial',
        'unsigned' => TRUE,
        'not null' => TRUE,
        'description' => "ID/Key utama tabel latihan"
        ),
      'lat_judul'     => array(
        'type' => 'varchar',
        'length' => '250',
        'not null' => TRUE,
        'default' => '',
        'description' => "Judul konten latihan"
        ),
      'lat_content' => array(
        'type' => 'text',
        'not null' => TRUE,
        'default' => '',
        'description' => 'Konten dari tabel latihan.'
        )
      ),
    'primary key' => array('lat_id'),
    'indexes' => array(
      'judul' => array('lat_judul')
      )
    );

  return $schema;
}

Kita bisa lihat pada implementasi hook_schema yaitu pada fungsi latihan_schema, kita mendefinisikan tabel dengan nama "latihan" dengan dua tiga field yaitu "lat_id", "lat_judul" dan "lat_content", dengan primary key-nya adalah "lat_id" dan juga sebuah indeks dengan nama "judul" pada field "lat_judul". Drupal akan menerjamahkan definisi ini menjadi syntax SQL yang akan di-eksekusi pada saat module "Latihan" pertama kali di-aktifkan.

Pertanyaan berikutnya adalah bagaimana kita memasukkan data ke dalam tabel module "Latihan"? Jawaban sederhananya adalah kita harus membuat form untuk memasukkan data tersebut. Terus bagaimana kita buat form di Drupal? Seperti saya pernah sebutkan sebelumnya Drupal sudah menyediakan API yang sangat lengkap, termasuk di dalamnya adalah Form API yang memudahkan kita dalam membuat form serta memproses form, termasuk dalam hal validasi.

Tanpa banyak basa-basi, mari kita tambahkan kode berikut ini pada file latihan.module kita:

/**
 * Fungsi ini mendefinisikan struktur form yang akan kita gunakan untuk
 * input data
 * @return Array array struktur form
 */
function latihan_inputdata_formdata() {
  // definisikan elemen form
  $form['judul'] = array(
    '#type' => 'textfield',
    '#title' => t('Judul konten Latihan'),
    '#default_value' => '',
    '#size' => 60,
    '#maxlength' => 250,
    '#description' => t('Judul konten latihan yang akan kita masukkan ke dalam database')
  );

  $form['konten'] = array(
    '#type' => 'textarea',
    '#title' => t('Isi konten Latihan'),
    '#default_value' => '',
    '#cols' => 60,
    '#rows' => 5,
    '#disabled' => false,
    '#description' => t('Data konten latihan yang akan kita masukkan ke dalam database')
  );

  $form['data_tersembunyi'] = array('#type' => 'hidden', '#value' => 'Contoh data form tersembunyi');
  $form['submit'] = array('#type' => 'submit', '#value' => t('Save'), '#submit' => array('latihan_inputdata_formdata_submit'));
  return $form;
}


/**
 * Fungsi ini dipanggil ketika form input data latihan di-submit
 * Pada fungsi ini kita memanfaatkan Database API Drupal, yaitu fungsi
 * db_query() untuk melakukan query SQL ke database
 * Data form yang dikirimkan browser bisa kita akses lewat variabel $form_state['values'],
 * misalnya untuk mengakses data form "judul" kita mengaksesnya lewat
 * $form_state['values']['judul']
 */
function latihan_inputdata_formdata_submit($form, &$form_state) {
  db_query("INSERT INTO {latihan} (lat_judul, lat_content) VALUES ('%s', '%s')",
    $form_state['values']['judul'],
    $form_state['values']['konten']);
  // redirect ke web ke halaman/path "latihan"
  $form_state['redirect'] = 'latihan';
  drupal_set_message(t('"Latihan" form data has been saved'));
}


/**
 * Fungsi dibawah ini berfungsi me-render/menampilkan form yang sudah kita definisikan
 * pada fungsi latihan_inputdata_form
 */
function latihan_inputdata() {
  return drupal_get_form('latihan_inputdata_formdata');
}

Agar form input data-nya gampang diakses tentunya kita harus menempatkan link yang bisa diklik oler user, maka dari itu jangan lupa tambahkan kode berikut pada fungsi latihan_menu:

$items['latihan/inputdata'] = array(
  'title' => 'Input data module Latihan',
  'page callback' => 'latihan_inputdata',
  'access arguments' => array('membuat konten latihan'),
  'type' => MENU_NORMAL_ITEM
);

Apabila semua berjalan lancar, maka kita akan bisa melihat tampilan sebagai berikut pada Drupal kita:

Begitulah kira-kira cara dasar pemrosesan form pada Drupal. Pertanyaan berikutnya adalah bagaimana kemudian kita menampilkan data yang sudah kita masukkan ke database? Bagaiman cara kita membuat data yang sudah kita entry bisa di-edit/diubah? Entar dulu yak ane istirahat dulu, nanti ane tulis di bagian 3 :). Semoga bermanfaat

4 komentar:

subbu raj mengatakan...

Great guidelines for drupal module part 2.

Drupal Development Company

Topeng kegelapan mengatakan...

bang request module yang joomla
=))

nurjalih mengatakan...

tutorial yang sangat bermanfaat mas

nurjalih mengatakan...

tutorial yang sangat bermanfaat mas