Okay, mungkin sebagian besar dari kita sudah tahu apa itu Drupal. Drupal adalah Content Management Framework yang memungkinkan kita membangun website atau aplikasi web dinamis. Lah kalau begitu kenapa engga disebut Content Management System alias CMS aja macem Joomla dsb.? Drupal menggunakan kata "Framework" disitu karena Drupal menyediakan sebuah platform yang sangat memungkinkan kita membangun aplikasi web lain dengan memanfaatkan API-nya yang sangat komprehensif. Saya bilang komprehensif karena API yang disediakan Drupal sangat lengkap kap kap.


Di artikel blog kali ini saya mau berbagi kepada rekan-rekan pembaca blog (kalau ada yang baca hehehee) bagaimana cara kita membuat module Drupal kita sendiri. Dengan module kita bisa meng-extend/memperluas fungsi Drupal sesuai dengan kebutuhan kita sendiri. Sebenarnya ada beberapa module "sakti" yang bisa kita gunakan untuk membangun aplikasi web dengan Drupal, contohnya Views, CCK (Drupal 6) dan Token, tetapi bagi beberapa orang, utamanya developer aplikasi web yang lebih suka coding (dan yang lebih kepingin dibilang geek kaya saya hahahahaa), membuat module lebih disukai.


Untuk tutorial ini saya menggunakan Drupal 6. Loh kenapa bukan Drupal 7 yang lebih baru, jawaban jujur dari lubuk hati yang paling dalam adalah, saya belum sempat mempelajari API Drupal 7, dan saya sudah terbiasa dengan Drupal 6 hehehee.


Ok sebelum tutorial ini saya lanjutkan ada beberapa hal yang perlu saya sampaikan, terutama terkait dengan pengetahuan dan skill yang wajib dan perlu kita kuasai apabila ingin membuat module Drupal. Apa saja?




  1. Pemrograman dengan PHP

  2. Pemrograman SQL dengan database server MySQL atau PostgreSQL

  3. Pemrograman dengan HTML, Javascript dan CSS



Nah sebelum kita mulai coding module Drupal kita, maka beberapa hal harus kita persiapkan terlebih dahulu:



  1. Drupal 6 yang sudah terinstall (maaf untuk instalasi Drupal saya tidak cover di tutorial ini, cara sendiri aja yak, banyak kok tersedia di web)

  2. Editor teks favorit anda, untuk Windows saya selalu pakai Notepad++, kalau lagi pake GNU/Linux saya pakai Geany, dan kalau lagi pakai Mac OSX saya pakai Komodo Edit

  3. Cemilan sama Teh :D



Pada dasarnya semua 3rd party module di Drupal, termasuk yang akan kita buat, diletakan pada direktori sites/all/modules. Apabila direktori modules belum ada pada sites/all maka silahkan anda buat terlebih dahulu. Pada contoh ini kita akan membuat sebuah module Drupal dengan nama "Latihan". Langkah-langkahnya adalah sebagai berikut:


  1. Buatlah sebuah direktori bernama latihan di dalam direktori sites/all/modules

  2. Di dalam direktori latihan buatlah tiga buah file teks baru dengan nama sebagai berikut:

    • latihan.info

    • latihan.module

    • latihan.installl



  3. Buka file latihan.info dengan teks editor anda. File latihan.info adalah file metadata yang mendeskripsikan module Drupal. Di dalam file ada beberapa informasi dasar yang harus kita cantumkan. Untuk module "Latihan" kita akan isi sebagai berikut:

    name = Module Latihan
    description = Module sederhana Drupal untuk latihan
    core = 6.x
    package = "Latihan"


    Simpan file.

  4. Selanjutnya kita akan membuka file latihan.module yang merupakan file utama berisi kode PHP untuk module "Latihan". Sebelum mulai coding saya mau sedikit menjelaskan cara kerja Drupal dalam menjalankan module-modulenya. Drupal menyediakan apa yang disebut sebagai "hook" atau "kaitan". "Hook" adalah fungsi-fungsi dari dipanggil pada saat-saat tertentu oleh Drupal. Misalnya kita akan menemui hook bernama hook_block, yang dipanggil ketika Drupal akan menampilkan "Block" pada halaman web. Untuk module maka nama hook diganti dengan format namamodule_namahook, jadi untuk mengimplementasikan hook_block di module kita, maka kita harus membuat fungsi dengan nama latihan_block.

  5. Untuk snippet kode pertama adalah kita akan melakukan implementasi pada hook_perm. hook_perm adalah hook yang menentukan permission apa saja yang disediakan oleh module kita.

    /**
    * Permission apa saja yang disediakan oleh module Latihan?
    * tentukan pada fungsi ini
    * @return array Array yang mendefinisikan permission
    */
    function latihan_perm() {
    $_perms = array(
    'membuat konten latihan',
    'mengubah konten latihan',
    'melihat konten latihan',
    'menghapus konten latihan',
    'ubah konfigurasi module latihan');
    return $_perms;
    }

    Pada fungsi latihan_perm ini kita mendefinisikan ada lima permission yang disediakan oleh module "Latihan", yaitu "membuat konten latihan" sampai "ubah konfigurasi module latihan", yang didefinisikan dalam bentuk array.


  6. Setelah implementasi hook_perm, selanjutnya adalah kita melakukan implementasi hook_block. Untuk itu kita akan membuat sebuah fungsi lagi dengan nama latihan_block. Kodenya adalah sebagai berikut:

    /**
    * Block adalah konten yang posisi-nya bisa dipindah-pindahkan pada Drupal
    * fungsi ini mendefinisikan konten blok untuk module Latihan
    * @param string $op isi dari variabel argumen ini bisa "list", "view", "save" atau "configure"
    * @param integer $delta kode untuk meng-identifikasi block
    * @param array $edit hanya muncukl apabila argumen $op berisi "save"
    * @return array data semua blok yang disediakan oleh module Latihan
    */
    function latihan_block($op = 'list', $delta = 0, $edit = array()) {
    // array kosong yang akan menyimpan semua data block
    $block = array();

    switch ($op) {
    case "list":
    // operasi list adalah ketika daftar block ditampilkan pada halaman admin/block
    $block[0]["info"] = t('Block module Latihan');
    break;

    case "view":
    // operasi view adalah ketika block ditampilkan sebenarnya
    // subject/judul heading dari block
    $block["subject"] = t("Judul Block Latihan");
    // content/isi dari block
    $block["content"] = '

    Ini adalah konten/isi dari block module Latihan

    ';
    break;

    case "save":
    break;

    case "configure":
    break;
    }

    return $block;
    }



  7. Berikutnya kita akan membuat fungsi yang tugasnya menampilkan konten utama dari module Latihan. Berikut adalah snippet kode-nya:

    /**
    * Fungsi ini menampilkan konten/isi utama dari Module Latihan
    */
    function latihan_main() {
    // definisikan variabel konten kosong untuk inisialisasi
    $content = '';

    // lakukan berbagai macam manipulasi konten pada bagian ini
    // seperti melakukan query dsb.
    $content .= '

    Ini adalah konten sederhana dari module Latihan

    ';

    return $content;
    }



  8. Bagaimana kalau kita mau module kita ada beberapa parameternya yang bisa dikonfigurasikan melalui antar muka web Drupal? Tenang, kita akan membuat sebuah fungsi yang akan menampilkan halaman konfigurasi khusus module Latihan yang kita buat. Berikut kode-nya:

    /**
    * Fungsi ini memungkinkan kita membuat halaman konfigurasi dalam Drupal
    * khusus untuk module Latihan
    * Pada contoh ini kita mendefinisikan 2 item konfigurasi untuk module Latihan
    * @return array Array yang elemen form konfigurasi modul latihan
    */
    function latihan_admin() {
    $form = array();

    // setting 1
    $form['latihan_setting1'] = array(
    '#type' => 'textfield',
    '#title' => t('Setting 1 module Latihan'),
    '#default_value' => variable_get('latihan_setting1', null),
    '#size' => 60,
    '#maxlength' => 250,
    '#description' => t("Contoh setting pertama untuk module Latihan"),
    '#required' => TRUE,
    );

    // setting 2
    $form['latihan_setting2'] = array(
    '#type' => 'textfield',
    '#title' => t('Setting 2 module Latihan'),
    '#default_value' => variable_get('latihan_setting2', null),
    '#size' => 60,
    '#maxlength' => 250,
    '#description' => t("Contoh setting kedua untuk module Latihan"),
    '#required' => TRUE,
    );

    return system_settings_form($form);
    }



  9. Langkah penting berikutnya adalah meng-implementasika hook_menu. hook_menu mendefinisikan URL dan path apa saja yang ada pada module Latihan, sekaligus menetapkan callback (fungsi) apa yang dijalankan ketika URL tersebut dipanggil oleh browser. Kode-nya adalah sebagai berikut:

    /**
    * Fungsi menu mendefinisikan menu atau path page untuk module Latihan
    *
    */
    function latihan_menu() {
    $items = array();

    $items['admin/settings/latihan'] = array(
    'title' => 'Konfigurasi Latihan',
    'description' => 'Halaman untuk menampilkan konfigurasi module Latihan',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('latihan_admin'),
    'access arguments' => array('ubah konfigurasi module latihan'),
    'type' => MENU_NORMAL_ITEM
    );

    $items['latihan'] = array(
    'title' => 'Halaman utama module Latihan',
    'page callback' => 'latihan_main',
    'access arguments' => array('melihat konten latihan'),
    'type' => MENU_NORMAL_ITEM
    );

    return $items;
    }



  10. Nah sampai disitu dulu kode module Drupal kita, untuk kode lengkapnya silahkan anda lihat ke Kode Lengkap module Latihan. Selanjutnya kita akan coba mengaktifkan module Drupal yang baru kita buat dengan masuk ke halaman admin/build/modules pada website Drupal kita. Apabila berhasil maka kita akan melihat module Latihan pada daftar module yang disediakan Drupal seperti pada screenshot berikut:




    Centang pada module "Module Latihan" dan kemudian tekan tombol "Save Configuration".


  11. Apabila proses aktivasi module kita berhasil maka kita akan melihat tampilan-tampilan sebagai berikut pada website Drupal kita:



    Kita bisa melihat menu dengan nama "Halaman utama module Latihan" di bagian sebelah kiri halaman web kita, yang apabila di-klik akan ditujukan ke halaman URL latihan.



    Pada halaman manajemen Block Drupal di admin/build/block kita akan melihat Block dengan nama "Block module Latihan" sudah terdaftar, tinggal kita letakkan di posisi yang kita inginkan.



    Halaman konfigurasi khusus module Latihan juga bisa kita ke akses melalui path URL admin/settings/latihan dan akan menampilkan tampilan seperti di atas.



Sampai disini dulu untuk bagian satu, semoga bisa memberikan gambaran dasar bagaimana membuat module dengan Drupal. Seperti yang sudah saya sebutkan sebelumnya, Drupal menyediakan banyak API yang memudahkan kita dalam mengembangkan module. Untuk daftar lengkap beserta dokumentasi penggunaanya silahkan browsing ke Drupal 6 API.