Tutorial CodeIgniter : Penerapan Rekursif Untuk Membuat Menu Bertingkat di CodeIgniter

Begadang lagi dan begadang lagi, itulah rutinitas saya beberapa minggu ini untuk menyelesaikan beberapa pekerjaan yang masih menumpuk. Dari yang biasanya begadang hanya sampai jam 3 pagi, kini beralih sampai jam 7 pagi (#haha) dan bangun jam 2 siang. Bisa dipastikan saya akhirnya sering bolos kuliah. Baru bangun nangkring depan laptop lagi sampai sore dan malamnya nangkring di ITSolution untuk bantu pak dosen garap penelitian. Nah, kebetulan teman-teman saya baru saja membuka sebuah cafe baru di depan ITSolution. Walaupun namanya cafe, tapi harganya sekelas mahasiswa lho. Lumayan untuk saya, gak perlu jauh-jauh lagi untuk berwisata kuliner di kala perut keroncongan ;). Nah…ngomong-ngomong soal penelitian, sekarang saya juga sedang membantu pak Eko di penelitian yang digagas oleh beliau dan kebetulan juga penelitian tersebut berhasil mendapatkan dana hibah. Topik penelitiannya masih seputar blog desa, yang benar-benar dibabat habis oleh kampus ketika KKN kemarin. Mungkin ini namanya rejeki, tuhan memang tidak membiarkan hambanya yang telah bekerja keras kemudian disakiti oleh orang lain begitu saja. Ada sesuatu yang selalu disiapkan oleh tuhan dari setiap perjuangan dan pengorbanan yang telah dilakukan oleh manusia.

Aplikasi blog desa yang baru ini dibangun menggunakan framework HMVC yang dikembangkan oleh pak Eko, monggo kunjungi blog beliau untuk mencoba framework yang diberi nama becak framework tersebut. Sebenarnya sama saja dengan framework codeigniter, cuma di becak framework secara default sudah menggunakan modularisasi (HMVC, Hierarchical Model View Controller). Kebetulan pada aplikasi blog desa yang baru ini menggunakan tree menu bertingkat yang dinamis dan ini bisa diselesaikan dengan fungsi rekursif. FYI, fungsi rekursif adalah sebuah fungsi yang memanggil dirinya sendiri di dalam function tersebut. Biasanya sih dulu saya gunakan untuk menyelesaikan soal faktorial. Ketika digunakan untuk di tree menu, scriptnya sama saja. Dengan sedikit tambahan untuk menghubungkannya dengan database, akhirnya fungsi rekursif untuk menampilkan tree menu bertingkat bisa cepat selesai. Nah, pada postingan kali ini saya akan mencoba untuk menerapkannya di CodeIgniter. Cekidot gan…

1. Kita siapkan dulu sebuah tabel menu dengan struktur parent child, artinya ada sebuah field yang dijadikan sebagai acuan parent-nya. Desain tabelnya hampir sama dengan postingan saya beberapa waktu lalu yang juga membahas tentang tree menu di CodeIgniter.

CREATE TABLE IF NOT EXISTS `tbl_menu` (
  `id_menu` int(11) NOT NULL AUTO_INCREMENT,
  `id_parent` varchar(11) DEFAULT NULL,
  `menu` varchar(50) NOT NULL,
  PRIMARY KEY (`id_menu`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;

INSERT INTO `tbl_menu` (`id_menu`, `id_parent`, `menu`) VALUES
(1, '0', 'Beranda'),
(2, '0', 'Profil'),
(3, '0', 'Galeri'),
(4, '0', 'Hubungi Kami'),
(5, '2', 'Visi'),
(6, '2', 'Misi'),
(7, '2', 'Struktur Organisasi'),
(8, '2', 'Sejarah Singkat'),
(9, '3', 'Kemahasiswaan'),
(10, '3', 'Lembaga'),
(11, '3', 'Kegiatan Tahunan'),
(12, '10', 'Lala Lele'),
(13, '10', 'Lala Karet'),
(14, '10', 'Lala Gabus'),
(15, '10', 'Lala Gosong');

2. Biar lebih cepat, saya disini tidak menggunakan model :). Query-nya langsung saya tulis di Controller saja. Buat sebuah controller dengan nama rekursif_menu.php dan ketikkan kode di bawah ini :

class Rekursif_Menu extends CI_Controller {

	function __construct()
	{
		parent::__construct();
		$this->load->database();
	}

	function index()
	{
		echo $this->menu(0,$h="");
	}

	private function menu($parent=0,$hasil){

		$w = $this->db->query("SELECT * from tbl_menu where id_parent='".$parent."'");
		if(($w->num_rows())>0)
		{
			$hasil .= "<ul>";
		}
		foreach($w->result() as $h)
		{

			$hasil .= "<li>".$h->menu;
			$hasil = $this->menu($h->id_menu,$hasil);
			$hasil .= "</li>";
		}
		if(($w->num_rows)>0)
		{
			$hasil .= "</ul>";
		}
		return $hasil;
	}
}

3. Pada kode di atas, function menu dibuat private agar tidak bisa diakses dari url. Function menu dipanggil lagi saat perulangan untuk mengambil data dari database. Dengan begitu, kode rekursif di atas akan menghasilkan sebuah tree menu bertingkat tanpa batas.

Gampangkan cara menerapkan rekursif untuk membuat tree menu bertingkat di CodeIgniter…??? Kalau masih ada yang binggung dengan bagaimana alurnya sehingga bisa dihasilkan sebuah menu yang berulang-ulang dengan aturan yang sama, silahkan digambarkan terlebih dahulu, kemudian dipahami lagi :D. Saya biasanya menerapkan problem solving seperti itu, walaupun waktunya kurang efisien. OK deh, sekian dulu postingan saya kali ini. Semoga bermanfaat untuk kita semua.

Happy Blogging and Keep Coding

Cheerrrss….!!!!

13 comments

      • Nina Reply

        Sip gan, terus view nya gimna gan? udah saya coba2 blm bisa gan. mksh sebelumnya

  1. mbahmul Reply

    mas, kalau buat tree untuk bagan seperti struktur organisasi itu gimana ya? dengan CodeIgniter tentunya.. bisa nggak nerapin konsep diatas

    • Dion Rizqi Reply

      oh ternyata tidak menggunakan view…
      berbeda dengan tutor di blog sebelah….
      thanks dah gan tinggal masukin cssnya nih