Codeigniter Template Kullanımı
Merhaba arkadaşlar,
Sizlere bu yazımda Codeigniter içerisinde template kullanımını anlatacağım. Öncelikle template olarak neyi kastettiğimizden bahsedelim. Arkadaşlar codeigniter içerisinde her bir web sayfası için bir view dosyası hazırlıyoruz. Bu sayfalara controller içerisinden bilgiler gönderiyoruz. Bazı durumlarda bu viewler içerisinde sabit bulundurmak durumunda olduğumuz alanlar olabiliyor. Örneğin şekilde görüldüğü gibi bir header ve footer.
Bu header ve footer alanlarında linkler ve birbiriyle bağlantılı menüler bulundurmamız gerekli olabiliyor. Her sayfaya aynı menüden tekrar tekrar yazıp ve her değişikliği birçok sayfada yapmak yerine temel bir template hazırlanmış olsa tüm sayfalarda değişmez alan olarak kullanılmış olsa hem kod açısından bütünlük sağlanır hemde yapılacak olası değişikliklerde tek bir değişiklik ile tüm sayfalara erişilmiş olunur.
Bu aslında ASP.Net’te bulunan master page kullanımı ile benzerlik göstermektedir. Orada da hazırlanmış olan bir ana template içerisinde değiştirilmesi serbest bırakıpmış alanları kullanabiliyorsunuz. Biz de Codeigniter içerisinde hazırlayacağımız basit bir template sistemi ile kendi master page classımızı oluşturacağız. Burada değişiklik yapılmasını istediğimiz alanlara ise bir önceki derste belirttiğimiz veri gönderim işlemlerini kullanarak işlemlerimizi sürdüreceğiz.
Öncelikle ilk işlem olarak bir codeigniter template kütüphanesi oluşturalım ve bu kütüphanede bulunan sınıf yardımı ile Anasayfa & İletişim sayfalarından oluşan basit bir örnek yapalım.
- Template :
Template sınıfında yapacağımız işlem en basit manada şu ki; sayfalar için oluşturacağımız viewleri bu template göndererek o sayfalar bir değişkenmiş gibi ana template içerisinde göstermektir. Burada kullanılacak metod ile bu işlemi gerçekleştireceğiz. Gerekli açıklamaları kod blokları içerisinde yapacağız.
Template Kodları :
<?php /** * Template sınıfı.. */ class Template { var $CI_Object; var $layout; function __construct($layout = '') { //Öncelikle bir Codeigniter nesnesi oluşturuyoruz. $this->CI_Object =& get_instance(); //Layout ataması yapıyoruz. Ana layout view'i entegre ettik. $this->layout = $layout; } function set($layout){ $this->layout = $layout; } /** * Bu metodumuz ile gönderilen view ve içerisinde gösterilecek dataları işliyoruz. * @param [type] $view [description] * @param [type] $data [description] * @param boolean $return [description] */ function setView($view, $data = null, $return = false) { //Bu değişken ile gelen view'i ana template göndereceğiz. //true değeri view verisinin geri döndürülmesini ifade eder. //yani değişkene atamış olduk. $data['degiskenAlan'] = $this->CI_Object->load->view($view, $data, true); if($return){ //View i geri döndürüyoruz. $output = $this->CI_Object->load->view($this->layout, $data, true); return $output; }else{ //View ekranda gösterelim. $this->CI_Object->load->view($this->layout, $data, false); } } } ?>
Oluşturduğumuz library dosyasını (template), config içerisindeki autoload’da çalıştıralım.
$autoload[‘libraries’] = array(‘database’,’template’,’session’); //Artık bu kütüphane projemizde otomatik devreye girecektir.
Şimdi basit bir template view oluşturalım ve içerisinde değişecek kısımları belirleyelim.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title><?= $title ?></title> </head> <body> <!-- Değişmeyecek hersayfada bulunacak basit bir menü yapalım, 2 link olması yeterli. --> <a href="<?=site_url('anasayfa')?>">Anasayfa</a> <a href="<?=site_url('iletisim')?>">İletişim</a> <?= $degiskenAlan?> </body> </html>
- Anasayfa Controller:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Anasayfa extends CI_Controller { function __construct(){ parent::__construct(); //Kütüphaneyi çağırıyoruz ve içerisinde de hangi view gösterilecekse onu belirtiyoruz. //template kütühanesi içerisinde template_view sayfası. $this->load->library('template','template_view'); $this->template->set('template_view'); } public function index() { $this->data['_integer'] = 1; $this->data['_float'] = 2.1; $this->data['_string'] = "Merhaba Codeigniter!"; $this->load->model('UlkeModel'); $this->data['_array'] = $this->UlkeModel->ulkeListe(); $this->data['_bool'] = TRUE; //Önceki kodumuz: //$this->load->view('anasayfa_view',$this->data); //Yeni kodumuz: Kütüphaneye ve içerisindeki metoda ulaşıyoruz. //Gösterilecek kısım içerisine anasayfa_view i ve dataları gönderiyoruz. //Title da gönderelim. $this->data['title'] = "Anasayfa"; $this->template->setView('anasayfa_view',$this->data); } }
- İletişim Controller:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Iletisim extends CI_Controller { function __construct(){ parent::__construct(); //Kütüphaneyi çağırıyoruz ve içerisinde de hangi view gösterilecekse onu belirtiyoruz. //template kütühanesi içerisinde template_view sayfası. $this->load->library('template','template_view'); $this->template->set('template_view'); } public function index() { $this->data['iletisim_sayfasi'] = "Burası iletişim sayfası"; //Önceki kodumuz: //$this->load->view('anasayfa_view',$this->data); //Yeni kodumuz: Kütüphaneye ve içerisindeki metoda ulaşıyoruz. //Gösterilecek kısım içerisine anasayfa_view i ve dataları gönderiyoruz. //Title da gönderelim. $this->data['title'] = "İletişim"; $this->template->setView('iletisim_view',$this->data); } }
Burada controller üzerinde gerekli işlemler yapılmış ve her sayfa içeriği genel template içerisine entegre edilmiştir. Anasayfa_view içeriğini ve İletisim_view içeriğini de gösterelim.
<h1>Anasayfa</h1> <h2>Tüm Gönderilen Veriler</h2> <?=$_integer ?> <br> <?=$_float ?> <br> <?=$_string ?> <br> <?=print_r($_array) ?> <br> <?=$_bool ?>
<h1>İletişim Sayfası</h1>
Artık sayfalarımızın ana teması olan linklerin olduğu alan sabittir. Diğer ayrıntılar ve başlık kısımları değişkenler ile gönderilmiştir. Geniş projelerde template mantığını kullanmak çok fayda sağlamaktadır. Dilediğimiz kısımlarda farklı templateler de oluşturulabilir. Tüm alanlarda aynı template kullanılacaksa bunuda global bir controller içerisinde tutarak kalıtım ile diğer controller içerisinde kullabiliriz. Anlatımlarımın yanı sıra sormak istediğiniz her türlü sor için ogzhnozdmr@gmail.com adresinden bana ulaşabilirsiniz. Proje kodlarını linkten indirebilirsiniz.. İyi çalışmalar.. 🙂