Jumat, 22 November 2013

Tutorial CodeIgniter : Penerapan Rekursif Untuk Membuat Menu Bertingkat di CodeIgniter

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');

<?php
class model_Menu extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }
   
    function getMenu($parent,$hasil){

        $w = $this->db->query("SELECT * from tbl_menu where id_parent='".$parent."'");
        if(($w->num_rows())>0)
        {
            $hasil .= "<ul class='easyui-tree' animate='true'>";
        }
        foreach($w->result() as $h)
        {
            $hasil .= "<li><span>".$h->menu."</span>";
            $hasil = $this->getMenu($h->id_menu,$hasil);
            $hasil .= "</li>";
        }
        if(($w->num_rows)>0)
        {
            $hasil .= "</ul>";
        }
        return $hasil;
    }
   
}

3. _Controller nya


<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Dashboard extends CI_Controller {
    public function index()
    {
       $this->load->model('model_Menu');
      
       $data['menu'] = $this->model_Menu->getMenu(0,"");
       $this->template->load('frontend','view_dashboard',$data);
    }

1 komentar: