Site içi ulaşımlarda kullanılan Javascript menüler bazen veritabanı üzerinden bilgiler çekerler. Genellikle kategoriler üzerinden alınan bilgiler toparlanarak ekranda alt sayfalara ulaşım anlamında alt alta kullanılırlar.
Örneğin, ana kategorilere bağlı alt kategorilerin bulunduğu bir yapımız olsun ve bu yapıya ulaşmak için sitemizin üst kısmında ana kategori ve onun altında da alt kategorileri gösterelim. Bu iş amacı ile yapacağımız işlem sırası şöyle olacaktır : Controller dosyamızdan Model dosyamızdaki fonksiyonu yükleyip, kategorileri bir diziye attıktan sonra bu diziyi View dosyası içinde göstereceğiz.
Öncelikle veritabanı dosyamızı oluşturalım. Kategori ve Alt_kategori isimli iki tablomuz olsun. Kategori tablosu ile Alt_kategori tablosunu id ve ust_id değişkenleri ile bağlayalım. Bunların şeması aşağıdaki gibidir.
CREATE TABLE IF NOT EXISTS `kategori` ( `id` int(11) NOT NULL auto_increment, `ad` varchar(100) NOT NULL, PRIMARY KEY (`id`), KEY `ad` (`ad`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; CREATE TABLE IF NOT EXISTS `alt_kategori` ( `id` int(11) NOT NULL auto_increment, `ust_id` int(11) NOT NULL, `ad` varchar(100) NOT NULL, `link` varchar(150) NOT NULL, PRIMARY KEY (`id`), KEY `ad` (`ad`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
Controller dosyasının yeri application/controlers dizini altında olacaktır. Controller dosyamızın içindeki ilgili metod:
class Menu extends Controller {
function Menu()
{
parent::Controller();
}
function index()
{
$this->load->model('menu_model','Model');
$data['menu_dizini'] = $this->Model->kategori_getir();
$this->load->view('menu_view',$data);
}
}
Model dosyasının yeri application/models dizini altında olacaktır :
class Menu_model extends Model {
function Menu_model()
{
parent::Model();
}
function kategori_getir()
{
$query = $this->db->get('kategori');
if($query->num_rows())
{
$db_main = $query->result_array();
foreach($db_main as $val):
$sub = $this->db->get_where('alt_kategori',array('ust_id' => $val['id']));
$db_alt[$val['id']] = $sub->result_array();
endforeach;
$return = array(
'main' => $db_main,
'alt' => $db_alt
);
return $return;
}
else return FALSE;
}
}
Model dosyasından alınan bilgiler, Controller üzerinden geçtikten sonra aşağıdaki View dosyası ile işlenerek ekrana bastırılacaktır :
- <?=$db_main['ad']?>
-
<? foreach($menu_dizini['alt'][$db_main['id']] as $db_alt): ?>
- <?=$db_alt['ad']?> <?endforeach;?>
<?endforeach;?>
-
<? foreach($menu_dizini['main'] as $db_main): ?>
Yukarıdaki kodlar kolay anlaşılır olması için menü tek başına düşünülerek yazılmıştır. Site içinde kullanılırken diğer kodlara entegre olacak şekilde (ana sayfa, görünüşler, içerik vs.) yeniden yazılması gereklidir.
Yeniden düzenleyip hatalarını giderdiğim bu yazıda geçen kodların çalışan uygulamasını, javascript menü kodu ve css dosylarını da ekleyerek buradan indirmeye hazır hale getirdim. @25 Temmuz 2009
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : MVC menu Model
Türkiye