# you’re reading...

Techno

Pt. 2: Membuat menu di custom module Drupal 6

Ada 5 (lima) tipe menu yang bisa dipakai ketika membuat menu pada custom module Drupal 6 dengan menggunakan hook_menu(), yaitu MENU_NORMAL_ITEM, MENU_CALLBACK, MENU_DEFAULT_LOCAL_TASK, MENU_LOCAL_TASK, dan MENU_SUGGESTED_ITEM. Masing-masing punya kegunaan sendiri-sendiri (lihat http://api.drupal.org/api/function/hook_menu/6 untuk penjelasan lebih lanjut). Kali ini saya coba membuat contoh untuk masing-masing menu tersebut.

Pertama kita buat dulu module drupalnya. Buat folder (untuk custom module kali ini saya pakai nama MyModule) mymodule di folder <drupal installation root>\Sites\drupal\sites\all\modules.

buat folder module

Lalu buat 2 (dua) buah file yaitu <nama module>.info dan <nama module>.module. Pada tulisan kali ini saya buat mymodule.info dan mymodule.module.

membuat file module

Buka mymodule.info dengan menggunakan text editor favorite anda (kebetulan saya pakai Notepad++), lalu ketik dan simpan code berikut:

name = My Module
description = This is my custom module named My Module
core = 6.x

Kemudian buka file mymodule.module untuk memulai coding custom module kali ini. Sebagai permulaan, ketikkan kode berikut pada file mymodule.module:


<?php

function mymodule_perm() {
return array('access mymodule', 'administer mymodule');
}

MENU_NORMAL_ITEM

Seperti pada tulisan sebelumnya, MENU_NORMAL_ITEM adalah menu standar yang tampil pada blok navigasi. Menu ini bisa dibuat sendiri-sendiri atau nested. Contoh kode:

...

function mymodule_menu() {
$items['normal-item'] = array(
'title' => t('Menu Normal Item'),
'page callback' => 'mymodule_function_1',
'access arguments' => array('access mymodule'),
'type' => MENU_NORMAL_ITEM
);

$items['normal-item/child-1'] = array(
'title' => t('Child 1'),
'page callback' => 'mymodule_function_child_1',
'access arguments' => array('access mymodule'),
'type' => MENU_NORMAL_ITEM
);

return $items;
}

function mymodule_function_1() {
return 'Hello from mymodule_function_1';
}

function mymodule_function_child_1() {
return 'Hello from mymodule_function_child_1';
}

...

Pada kode diatas, saya membuat 2 (dua) buah menu dengan tipe MENU_NORMAL_ITEM. Menu pertama menjadi parent dari menu kedua dan masing-masing menu memanggil function PHP yang dapat menjalankan tugas-tugas tertentu. Jika kita aktifkan mymodule, maka menu tersebut akan muncul secara otomatis di blok navigasi Drupal. Untuk user selain administrator, aktifkan permission access mymodule agar user tersebut dapat melihat menu ini.

6

7

8

MENU_CALLBACK

Hampir sama dengan MENU_NORMAL_ITEM, menu dengan tipe MENU_CALLBACK juga digunakan untuk memanggil fungsi-fungsi tertentu pada custom module. Perbedaannya adalah, MENU_CALLBACK tidak muncul secara otomatis di blok navigasi. Menu ini dapat diakses dengan menuliskan URL pada address bar browser.

Buat newbie seperti saya, biasanya MENU_CALLBACK saya pakai kalau saya ingin mengakses fungsi-fungsi pada module yang membutuhkan parameter. Kode berikut mungkin bisa menunjukkan bagaimana penggunaan MENU_CALLBACK:


...

$items['callback-item-1'] = array(
'title' => t('Menu Callback Item 1'),
'page callback' => 'mymodule_callback_function',
'access arguments' => array('access mymodule'),
'type' => MENU_CALLBACK
);

...

function mymodule_callback_function() {
return 'Hello from callback menu';
}

...

Untuk mengakses menu tersebut, ketikkan URL menu tersebut pada address bar browser. Asumsi Drupal diakses di http://localhost/drupal, maka untuk mengakses menu diatas dapat mengetikkan http://localhost/drupal/callback-item-1.

callback1

callback2

Contoh berikutnya adalah menu callback dengan parameter. Pada kode berikut ini saya akan membuat sebuah form untuk memasukkan nama yang kemudian nanti akan ditampilkan dengan menggunakan menu callback. Untuk mengakses form, saya membuat 1 (satu) menu normal dengan URL normal-item-2.

Pertama, buat menu normal untuk mengakses form dan menu callback untuk menampilkan sebuah halaman.


...

$items['normal-item-2'] = array(
'title' => t('Menu Normal Item 2'),
'page callback' => 'drupal_get_form',
'page arguments' => array('mymodule_callback_form'),
'access arguments' => array('access mymodule'),
'type' => MENU_NORMAL_ITEM
);

$items['callback-item-2/%'] = array(
'title' => t('Hello'),
'page callback' => 'mymodule_say_hi',
'access arguments' => array('access mymodule'),
'type' => MENU_CALLBACK
);

...

Lalu buat fungsi untuk menampilkan form.


...

function mymodule_callback_form() {
$form['nama'] = array(
'#type' => 'textfield',
'#title' => t('Type your name please'),
'#description' => t('E.g. Ekajati Winarmo'),
'#required' => TRUE
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Say Hi!')
);

return $form;
}

function mymodule_callback_form_submit($form, &amp;amp;amp;amp;$form_state) {
$form_state['redirect'] = 'callback-item-2/'. $form_state['values']['nama'];
}

...

Setelah itu buat fungsi untuk menampilkan parameter dari form yang telah dibuat diatas.


...

function mymodule_say_hi() {
return 'Hi, ' . arg(1). ', welcome to Drupal 6';
}

...

Simpan kode diatas, lalu akses menu-normal-item-2. Bila menu belum muncul, clear dulu cache website dengan mengakses http://<drupal root>/admin/settings/performance dan klik tombol clear cache.

Bila menu-normal-item-2 diakses, maka Drupal akan menampilkan sebuah form dengan 1 (satu) buah textfield dan 1 (satu) buah tombol. Bila tombol di-klik, maka Drupal secara akan menampilkan halaman salam. Tanda % pada menu callback digunakan untuk menampung variable dari form. Sedangkan arg(1) digunakan untuk mengakses variable pada URL.

callback

normal-item2

form-say-hi

Bila tombol Say Hi! ditekan, maka Drupal akan menampilkan halaman seperti screenshot berikut.

hello-ojat

MENU_DEFAULT_LOCAL_TASK & MENU_LOCAL_TASK

Menu tipe ini biasanya digunakan berpasangan. MENU_LOCAL_TASK digunakan untuk menampilkan menu dengan bentuk tab seperti contoh gambar berikut:

localtaskmenu

Ketika MENU_LOCAL_TASK digunakan sebagai menu, maka wajib ada satu menu default. Menu default ini menggunakan tipe MENU_DEFAULT_LOCAL_TASK dimana menu ini dengan tipe ini memiliki path yang sama dengan parent menu. Pada gambar diatas, View adalah menu default di menu My Account. Jadi ribet nih jelasinnya :D hehe mendingan liat contoh kode berikut:


...

$items['menu-tab'] = array(
'title' => t('Tabbed menu'),
'page callback' => 'mymodule_tabbed_menu',
'access arguments' => array('access mymodule'),
'type' => MENU_NORMAL_ITEM
);

$items['menu-tab/view'] = array(
'title' =>t('Tabbed menu'),
'type' => MENU_DEFAULT_LOCAL_TASK,
'weight' => 0
);

$items['menu-tab/admin'] = array(
'title' => t('Administer'),
'page callback' => 'mymodule_tabbed_admin',
'access arguments' => array('access mymodule'),
'type' => MENU_LOCAL_TASK,
'weight' => 1
);

...

function mymodule_tabbed_menu() {
return 'Hello from tabbed menu';
}

function mymodule_tabbed_admin() {
return 'Hello from admin tabbed menu';
}

Kode diatas akan menghasilkan tampilan seperti berikut ini:

tabbed

Tampak Tabbed Menu otomatis terpilih sebagai default menu.

MENU_SUGGESTED_ITEM

Tipe menu ini hampir sama dengan MENU_NORMAL_ITEM. Perbedaannya adalah kalau MENU_NORMAL_ITEM akan muncul secara otomatis di blok navigasi, maka MENU_SUGGESTED_ITEM secara default disabled atau non-aktif. Menu tipe ini dapat diaktifkan atau enabled oleh admin (atau user yang memiliki hak) melalui halaman administer.


...

$items['suggested-item'] = array(
'title' => t('This is suggested menu'),
'page callback' => 'mymodule_suggested_item',
'access arguments' => array('access mymodule'),
'type' => MENU_SUGGESTED_ITEM
);

...

function mymodule_suggested_item() {
return 'Hello from suggested menu';
}

...

Menu tersebut akan tampak pada halaman administrasi menu (administer->site building->menu->navigation) seperti pada gambar berikut:

suggested-item

Yup, itu tadi cara membuat menu di custom module Drupal 6. Kalo ada kode-kode yang kurang efisien atau salah mohon dikoreksi soalnya saya juga masih newbie di Drupal :). Semoga bermanfaat.

Referensi: http://api.drupal.org

Full source code download di sini.

Discussion

5 Responses to “Pt. 2: Membuat menu di custom module Drupal 6”

  1. Thx infonya pak, saya sendiri juga penggemar drupal. Belajarnya sulit, tapi extensibilitasnya luar biasa ^^

    Posted by Jiewa | October 15, 2009, 9:16 am
  2. sama2 jie :D saya juga masi blajar nih.. karena extensibilitasnya mantap ini lah makanya saya seneng :D

    Posted by ojat | October 15, 2009, 9:44 am
  3. mau tanya, kalo bikin tabbed menu di dalam tabbed menu gmn..? thanks before..

    Posted by hhh | October 29, 2009, 2:42 pm

Post a comment

Photos on flickr

Archives