Pazartesi, 11 Ağustos 2008

MVC Yapısı: View Dosyası ve Kullanımı

 

MVC yapısının diğer bir öğesi de View'dır. View, Controller öğesinden gelen bilgileri HTML olarak kullanıcıya sunan kısımdır. Ancak sadece HTML kodu ile yazaılmaz. View içinde de PHP komutlarını (foreach, while vs...) kullanabilirsiniz.

View dosyasına veri aktarmak için Controller öğesinde $data dizisine, View dosyasında kullanacağınız değişkenin adını vererek bilgi aktarmanız yeterlidir. Örneğin, Controller öğesinde Model`den çektiğiniz son_mesaj fonksiyonunun Controller dosyasında nasıl işlendiğini görelim:

//önce Model dosyasını yüklüyoruz:
$this->load->model('Model_ismi');

//şimdi Model içinden son mesajları bir View değişkenine atıyoruz: 
$data['son_mesaj'] = $this->Model_ismi->son_mesaj();

//değişkenimizi ekrana basmak için blog_view dosyasını yüklüyoruz:

$this->load->view('blog_view',$data);

Yukarıdaki Controller dosyası içinde Model dosyasından çektiğimiz $data dizinine son_mesaj değişkeni ile aktardığımız bilgi View dosyası içinde $son_mesaj değişkeni ile çağırılacaktır. Buna göre blog_view.php dosyasının içi şöyle görünecektir:

son mesajlar

<?foreach($son_mesaj as $row) ?> gönderilen mesajlar : <?=$row->mesaj?> <?}?>

Yukarıdaki kod parçasında da görüldüğü üzere, veritabanından $son_mesaj dizisine çekilen mesajlar, blog_view.php dosyası içinde $row değişkenine aktarılarak ekrana basılırlar.

Bir MVC uygulamasında en az bir adet View dosyası mutlaka olmalıdır. Yoksa kullanıcılara gösterecek bir sonuç olmaz. Bu kısa makale ile View hakkında biraz bilgi vermek istedim. View`ların programda kullanım mantığı, şablon kullanımı ve diğer özellikleri hakkında daha sonra siteye bilgi eklemeye devam edeceğiz.

Yorumlar

CodeIgniter'da her Controller'a ait bir View olması gerekiyor o zaman. Ya da bir çok Controller tek bir View da kullanabilir herhalde. Ben asıl template kullanımının nasıl olduğunu anlayamadım.

Yani sitenin tematik tasarımı varsa, farklı temları nasıl adapte edebiliyoruz?

Farklı temalı siteler için CI'da farklı yaklaşımlar mevcuttur. Bununla ilgili olarak yukarıdaki yazıda da değinildiği gibi başka bir makalede anlatılacaktır.

Merhabalar,
Codeigniter icin ıncelemelerım sonucunda kullanıslı ve güclü gordugum YATS tema kutuphanesini sizinle paylasmak istiyorum.

Aşağıdaki adresten detaylı bilgi alabılırsınız.
http://codeigniter.com/wiki/Yet_Another_Template_System/

ci de bircok tema yaklasimi var fatih de dedigi gibi bende bir suredir tema yonetimi icin bir cozum aramaktayim ama isteklerime ne YATS nede Template cozum oldu bende kendi kullandigim klasik 2-3 satirlik kodla isime devam ediyorum bu daha hızlı ve daha verimli geliyor bana
klavuzdaki load->vars fonksiyonu bu konuda cok faydali bir aracttir bunu kullanmanızı oneririm...
Fatih iyiki boyle bir site actin basarilar tekrar...

tema sisteminin, daha doğrusu, load->view() sisteminin bu denli ucunun açık bırakılmış olması, dilediğimizi yapalım özgürce diye.

ben kendime çok ciddi bir tema sistemi oluşturabildim bu sayede, başkasının tema sistemlerine gerek duymaksızın herşey güzelce çalışıyor, birazcık denemek yeterli olacaktır.

modelimizde verileri bir metodla çektik.. örneğin user tablosundan bir tane user çektik bunu view 'e data dizizinde gönderdik...


Peki result() ile aldık diyelim.. peki foreach kullanmak şartmı??

yani zaten bir satır çektim . bunu normal bir satır dizi halinde kullanamıyormuyum mesela:

$result = $query->result();

echo $result['title'];


??

şimdiden teşekkurler yorumlar için...


@Mehmet: Tek bir satır çekip bunu da dizi olarak kullanmak istiyorsan:


$result = $query->row_array();

cümlesini çekmelisin.

fatih hocam birde bu şekilde mi almak lazım tek satırlık query resultı ??

ben dizi  gibi kullanmayı düşündüm ama genel geçer kullanılan yöntem bu mudur??

@Mehmet: Tek satırı row() olarak çekersen objeye alırsın, row_array() olarak çekersen diziye alırsın.

Konu anlaşildi fatih hocam teşekkurler

Yorum Ekle