Yii Layouts Kullanımı Hakkında

Selam arkadaşlar her yeni acemi gibi bende soru ile başlayım. Yii sistemini az çok çözdüm gibi takıldıgım nokta ise layouts konusunda şimdi biz farklı bir main çagırabilmek için önce colums1 tarzında bir ara dosya oluşturup controllerden $loyut = colum1 deyip , colum1 dosyasinda da farklı yapılandırmış olduğumuz main dosyasını çagırmak zorundamıyız mesala CI de şöyle tanımlıyorduk Controller dosyasında çalışmak istediğimiz dosyaları $this->load->view(‘ust.php’) , $this->load->view(‘main.php’) ve $this->load->view(‘footer.php’) tarzında bir kullanımı vardı yii de bu tarz bir yapı mevcutmu. Yii deki yapı insanı biraz kısıtlıyor gibi yada ben tam çözemedim header , main , footer yapısında bilgi ve tecrübelerinizi paylaşmanızı rica ediyorum veya herhangi bir makale linkide olabilir paylaşabilirseniz sevinirim

Birden fazla layout kullanabilirsin, layout lari degistirmek icin $this->layout=’//layouts/main2’; sekilde tanimlayabilirsin

Layout icinde yazdigin gibi ust.php ve footer.php lari cagirabilirsin ama bence ayri layout yapman daha guzel olur.

Sadece bir layout da isini kolayca cozer menu ler icin CMenu yu inceleyip kullanabilirsin

Farkli thema kullanmak istersende Yii::app()->theme=‘mobile’; sekilde istegine gore tanimlama yapabilirisin.

Kolay gelsin

Merhaba.

yii de layout olayı gayet başarılı bir şekilde uygulanmakta, ci den yii ye geçmemde bir çok neden var, yii ye alıştıkça bu nedenlerin sayılarıda artmakta ve iyiki geçmişim diyebilmekteyim. umarım yanlış yönlendirmeyiz.

/controller yapısı örneği/

/controllers/MyControlller.php

/controllers/YourControlller.php

/layout yapısı örneği/

/views/layouts/layoutdosyasi1.php

/views/layouts/layoutdosyasi2.php

/view yapısı örneği (my ve your yukarıdaki controller isimleri)/

/views/my/show.php

/views/your/show.php

/MyController içinde layout kullanımı/

MyController.php içerisine bu kodu ekliyoruz


$this->layout='//layouts/layoutdosyasi1';

/*action örneği url : /my/deneme */


public function actionDeneme(){

/* 

*  ci deki this->load->view() kodunun yii deki karşılığı

*  controller dosyanla aynı isimdeki dizin (/views/my/) altına bakar ve ilgili dosyanı render eder

*/

$this->render('show');

}

/=====================/

/YourController içinde layout kullanımı/

YourController.php içerisine bu kodu ekliyoruz


$this->layout='//layouts/layoutdosyasi2';

/*action örneği url : /your/deneme */


public function actionDeneme(){

/* 

*  ci deki this->load->view() kodunun yii deki karşılığı

*  controller dosyanla aynı isimdeki dizin (/views/your/) altına bakar ve ilgili dosyanı render eder

*/

$this->render('show');

}

ikinci bir yöntem her iki class ı Controller classından extend edip bu class ta bir defa layout tanımı yapıp diğer classlarında da etkili olmasını sağlayabilirsin, böylelikle her class ta ayrı ayrı tanımlama yapmamış olursun.

örneğin; 10 tane class için bir layout kullanıp, admin class ı için farklı bir layout kullanacaksan admin contrroller inda layout tanımı yaparak diğerlerinden farklı olmasını da sağlayabilirsin.

her iki tercihte projenin yapısına göre veya koşullara kullanılabilir.

iyi çalışmalar.

hocam cevaplarınız için saolun az çok fikir sahibi oldum asıl sorum şu şimdi biz bir controller açıyoruz denemeController adında bu tamam $loyut = denemeLoyut veriyoruz buda tamam denemeLoyut.php ve denemeMain.php dosyalarımızı loyuts içine kaydediyoruz views de deneme adinda bir dosya ve içerisine ekle sil düzenle dosyalarını açıyoruz burda skıntı yok benim sormak istediğim ekrana render basarken alttaki layot kodu neden var yani once layouts içindeki denemeLoyut.php içindeki bu kod çalışıyor denemeMain.php içeriğini $content değişkenine basıyor sonra denemeMain.php içerisindeki $content değişkenide views dosyadaki değerlerin içeriğini denemeMain.php içerisine basıyor benim anlamadığım bu dolambaçlı yapı neden var yani bizim denemeLayout.php dosyasına ne ihtiyacimiz var bu altaki kodu hangi vasıfla kullanıyoruz ve zaten bu (header main footer) mantığı değil include mantığı oluyor ufak projelerde skıntı yok ama misal bir eticaret sisteminde modul mantığı kullanacaksanız sağda ve soldaki modullerden bahsediyorum bu yapı ile nasıl çözebilirsiniz.

<?php $this->beginContent(’//layouts/denemeMain’); ?>

<div id="content">

&lt;?php echo &#036;content; ?&gt;

</div><!-- content -->

<?php $this->endContent(); ?>

oncelikle bir dosyayi render yapmak icin

$this->render(‘fileName’,array(‘param1’=>$param1));

kullanman yeterli

default kullanmak istedigin layout da basacaksan bu content i baska hic bir sey yapmana gerek yok

farkli bir layout da basacaksan layout tanimlaman lazim ki onu da

$this->layout=’//layouts/main2’;

seklinde yaparsin

senin kullandigin ve yii nin default olarak urettigi column1 senin isimlendirmenle denemeLoyut unu kullanmak zorunda degilsin onun yerine direk main layout u veya isimlendirmenle denemeMain layout unu kullanabilirsin. column1 layout u ufak farkliliklari olan layoutlari tekrar tekrar uretmeni engeller.

Merhaba @kyzsoft.

aslında yapı dolambaçlı değil aksine çok basit. tam olarak kavrayamamanızdan dolayı size öyle geliyor.

layout üzerinde


<?php echo $content; ?>

dikkatinizi çekmiştir.

siz controllerden


$this->render('view',array('data'=>$data);

dediğinizde datalarınızı gönderip işlem yaptığınız view dosyanız layout üzerinde render ediliyor.

örneğin;

loyout dosyanızda

header (sabit html kodu)

content (değişen içerik)

footer (sabit html kodu)

olduğunu düşünelim, her bir action da header ve footer sabit olarak gelir contentiniz ise render edilen view dosyanızdan gelir.

nacizane tavsiyem, (anlayamamanızdan kaynaklanan) ön yargılarınızı bir kenara bırakıp, başlangıç aşamasında olduğunuzdan dolayı önce küçük projelerle yii nin hızının ve sağladığı kolaylıklarının farkına vararak adım adım büyük projelere ilerlemenizdir.

hiç bir frameworkte rastlamadığınız "gii" diye bir zımbırtısı varki normal şartlarda 2 ay süren bir projenin 3 haftada nasıl bitirebileceğini (birazda yeteneğinize bağlı olarak) görebilirsiniz.

büyük projelere geçtikten sonra module, widget ve extension lar mantığınıza oturacağı için o zaman istediğiniz her şeyi yapabilirsiniz.

iyi çalışmalar.

Merhaba @cemal Bey,

1-Controller de bir çok action var ve(gii ile oluşan) bunların hangisi render ediliyor?Render olayı tam olarak nedir?

cevap 1:

ör classımız ‘class HarflerContoller extends Controller{…}’

ör 1.actionımız ‘public function actionSesliler(){…}’

ör 2.actionımız ‘public function actionSessizler(){…}’

Controller içerisindeki hangi action ın ÇALIŞTIRILACAĞINI browser dan bizler söylüyoruz/istiyoruz

bu işlemi örneklendirerek 3 adımda inceleyelim

örnek: http://<1:PROJENİZ>/<2:CONTROLLER>/<3:ACTION> şeklinde bir kullanıcının istek gönderdiğini varsayalım

<1:PROJENİZ> : prjenizin adı, localinizda"localhost/projeniz" şeklinde de olabilir

<2:CONTROLLER> : controller ismi ‘Harfler’

<3:ACTION> : method ismi ‘Sesliler’

  1. actiona erişim şu şekilde olur : http://<PROJENİZ>/harfler/sesliler

  2. actiona erişim şu şekilde olur : http://<PROJENİZ>/harfler/sessizler

2-$this->render(‘fileName’,array(‘param1’=>$param1)); bu ifade de $param1 neyi temsil ediyor?Teşekkürler

cevap 2:


$this->render('view',array('param1'=>$param1);

kodu bulunduğu controller ve method içinde /projeniz/protected/views/CLASS-ADI/view.php dosyanıza $param1 değişkeninizi ‘param1’ değişkenine atayarak gönderir ve render eder.

gönderdiğiniz değişkenleri /view.php dosyanızda var_dump($param1) ile detaylı inceleyebilirsiniz


$this->render('_form',array('parametreniz'=>$computerList,'arabalar'=>$arabaListesi);

kodu bulunduğu controller ve method içinde /projeniz/protected/views/CLASS-ADI/_form.php dosyanıza $computerList değişkenini ‘parametreniz’ değişkenine atayarak, $arabaListesi değişkenini ‘arabalar’ değişkenine atayarak gönderir ve render eder/sunar/işleme koyar.

gönderdiğiniz değişkenleri /_form.php dosyanızda var_dump($parametreniz) ve var_dump($arabalar) ile detaylı inceleyebilirsiniz

anlayamadığınız bir yer varsa sorabilirsiniz,

Yii Frameworku tanımanız ve iyi bir şekilde kullanabilmeniz için http://www.yiiframework.com/doc/guide/ sayfasını ziyaret edebilirsiniz.

iyi çalışmalar.

Öncelikle ağzınıza sağlık Yahya bey,

Çok detaylı ve anlaşılır anlattınız ve anladım.Yii nin kendi dokümanında birşey anlıyamıyorum maalesef.Yeni başlıklar altında bir kaç sorum yine olacak

Merhaba @cemal Bey,

yardımcı olabilediğime sevindim,

yalnız sizlerden ve diğer arkadaşlardan yine bizim (Türkçe bilgi paylaşanlara) yararımıza küçük bir ricam olacak,

dikkat edersek açılan konu "Yii Layouts Kullanımı Hakkında" ve verilen cevaplarda yine konuyla ilişkili olarak devam etmekte, farklı konuları veya soruları farklı başlıklar açarak sorabilir veya devam ettirebilirsek hem formu düzgün kullanıp konu hakkında arama yapanlara istediği şeyi doğru adreste bulmasına yardımcı oluruz, hemde konular iç içe geçmemiş olur ki karmaşıklığı önlemiş oluruz, umarım söylediklerimle yanlış anlaşılmamışımdır(yanlış anlatım veya anlam içeren cümle/kelime varsa özür dilerim).

ilgi ve anlayışınız için teşekkürler,

Başka konularda görüşmek dileğiyle,

iyi çalışmalar.

Kesinlikle haklısınız Yahya Bey gerekeni yapıyorum.