Rabu, 10 Juli 2013

Tutorial CodeIgniter : Penerapan Rekursif Untuk Membuat Menu Bertingkat di CodeIgniter

fungsi rekursif untuk menampilkan tree menu bertingkat bisa cepat selesai. Nah, pada postingan kali ini saya akan mencoba untuk menerapkannya di CodeIgniter. Cekidot gan…
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.
1CREATE TABLE IF NOT EXISTS `tbl_menu` (
2  `id_menu` int(11) NOT NULL AUTO_INCREMENT,
3  `id_parent` varchar(11) DEFAULT NULL,
4  `menu` varchar(50) NOT NULL,
5  PRIMARY KEY (`id_menu`)
6) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
7
8INSERT INTO `tbl_menu` (`id_menu`, `id_parent`, `menu`) VALUES
9(1, '0', 'Beranda'),
10(2, '0', 'Profil'),
11(3, '0', 'Galeri'),
12(4, '0', 'Hubungi Kami'),
13(5, '2', 'Visi'),
14(6, '2', 'Misi'),
15(7, '2', 'Struktur Organisasi'),
16(8, '2', 'Sejarah Singkat'),
17(9, '3', 'Kemahasiswaan'),
18(10, '3', 'Lembaga'),
19(11, '3', 'Kegiatan Tahunan'),
20(12, '10', 'Lala Lele'),
21(13, '10', 'Lala Karet'),
22(14, '10', 'Lala Gabus'),
23(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 :
1class Rekursif_Menu extends CI_Controller {
2
3    function __construct()
4    {
5        parent::__construct();
6        $this->load->database();
7    }
8
9    function index()
10    {
11        echo $this->menu(0,$h="");
12    }
13
14    private function menu($parent=0,$hasil){
15
16        $w = $this->db->query("SELECT * from tbl_menu where id_parent='".$parent."'");
17        if(($w->num_rows())>0)
18        {
19            $hasil .= "<ul>";
20        }
21        foreach($w->result() as $h)
22        {
23
24            $hasil .= "<li>".$h->menu;
25            $hasil = $this->menu($h->id_menu,$hasil);
26            $hasil .= "</li>";
27        }
28        if(($w->num_rows)>0)
29        {
30            $hasil .= "</ul>";
31        }
32        return $hasil;
33    }
34}
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

sumber : http://gedelumbung.com/tutorial-codeigniter-penerapan-rekursif-untuk-membuat-menu-bertingkat-di-codeigniter/