Melempar Variable

klo mo lebih global lagi, langsung hajar di config/main.php




	'params'=>array(

		'adminEmail'=>'surat@yahoo.com',

		'colum1'=>'pathketheme1',

		'colum2'=>'pathketheme2',

	)


/// cara akses

echo Yii::app()->params['colum1'];




coba di controllernya waktu mau render view ditambahkan variabel lagi.




public function actionView($id)

	{

		$logo = ....... //diisi path logonya

		$this->render('view',array(

			'model'=>$this->loadModel($id), 'logo'=>$logo,

		));

	}



Iya setau ane, cara Saebaryo itu cara yang benar. Karena sistem Yii memakai sistem push, di mana

Controller yang push data ke view, maka memang harus di Controller yang nge-push variabel dengan passing variabel

ke parameter ke dua di fungsi render() atau renderPartial()

Kalo global itu dipakai kalau emang musti dipakai di mana2, baru harus pakai sih. (misalnya email admin, nama perusahaan, dll)

wah tengkyu udah dijelasin, soalnya saya gak ngerti teorinya, bener ato salah juga gak tau, cm kalo pake itu bisa jalan ya pake aja :P

wkk… sebetulnya saya juga belajar best approach-nya. Jadi biar kalau kedepannya ada perubahan di sistem (yang sudah pasti terjadi dalam perancangan suatu sistem), gampang dilakukan.

Ternyata Yii juga support pull…

Mungkin bisa lihat thread ini kalau tertarik Passing Data o a view

Tetap ga dikenal bro…

Dicontroller saya buat demikian:




	public function actionView()

	{   

		$store=$this->loadModel(Yii::app()->user->id);

		$current_logo=StoreLogo::model()->findByPk((int)$store->current_logo);

		$current_logo=$current_logo->path;




		$this->render('view',array(

			'model'=>$store,

			'current_logo'=>$current_logo

		));

	}



kemudian di colum2.php:




.....


<div id="sidebar">

		<div id="store-logo">

		<?php

	 

			echo CHtml::image(Html::imageUrl($current_logo)); 

		?>

		</div> 


...



Error:


Undefined variable: current_logo

:-[

Any suggestion, bro???

Kalau di apps/views/store/view.php

$current_logo bisa kebaca … (hal yg normal, ya ga?)

Mohon pencerahan abang kakak sekalian? Adakah cara lain? ???

oh ya… cara render itu hanya berefek ke file view bersangkutan.

sedangkan kalau yang kamu mau itukan ke bagian sidebar, yang notabene berada di bagian layout yah…

kalau pengen utak atik isi disitu kamu bisa lihat solusi di sini

http://www.yiiframework.com/forum/index.php?/topic/4473-how-to-pass-variable-to-a-layout/

tetapi dari hasil diskusi di thread situ, secara arsitektur, Yii tidak pernah dirancang supaya developer bisa passing variable ke layout. Karena bisa membuat keterikatan antara controller sama layout…

Yup… passing variable to layout…

Izin baca gan… :)

Menurut saya tehniknya fastcrash udah paling bener karena perkiraan saya layout sidebar berada dalam kendali controller yg berbeda makanya variabelnya gak bisa baca… variabel $current_logo pasti hanya terbaca di column1 (main content)… sekali lagi, ini cuman perkiraan… maklum kita sama2 org buta yg saling menuntun dlm kegelapan… hahaha

he hee… tinggal pilih selera masing-masing

tekniknya mindplay yg dikasih linknya sama bro junxiong itu jg menarik.

btw, klo mo bisa dibaca and rewriten variable ke setiap controller yg berbeda

bisa pakai dengan tehnik ini :

di config/main.php




'params'=>array(

     'adminEmail'=>'surat@yahoo.com',

     'myVar'=>'theme1',  //kasih nilai default jika perlu, eg: theme1, true, etc

)



di controller buat function




public function myVar()   //jika di set public maka variabel bisa diakses di semua file/class

{

     $myVar = 'Theme2';     //nilai myVar ini bisa didapat/diolah dari database, EGPCS, dsb

     Yii::app()->params['myVar'] = $myVar;  // nilai params['myVar'] di main.php di overwritten

}



kemudian tinggal akses dimana saja :)




echo $this->myVar();  //jadi nilai myVar bisa berbeda di setiap controllernya



atau kalau function di set private misal




private function myVar()     //jika di set private maka variabel hanya bisa

{                            //diakses di file/class ini saja

     Yii::app()->params['myVar'];

}



disetiap action, baik create, update, admin, etc fungsi ini harus dipanggil terlebih dahulu




// khususnya berguna untuk memfilter data atau privileges tombol edit, add, etc.

public function actionAdmin()

{

     $this->myVar();


     ...

     ...

}


public function actionCreate()

{

     $this->myVar();


     ...

     ...

}


public function actionView()

{

     $this->myVar();


     ...

     ...

}




kemudian tinggal akses dimana saja sesuai actionnya :)




echo Yii::app()->params['myVar'];

echo $this->myVar();  //  tidak bisa diakses  - errno  <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />


//contoh penggunaan di view

if(Yii::app()->params['myVar'] === TRUE)

     echo 'submit/edit/add button here';






mungkin bisa membantu bagi yang pusing lempar-lemparin variabel, klo ada yang kurang, tolong kasih tau yup. maklum sama2 org buta yg saling menuntun dlm kegelapan… hahaha

kok sepertinya ribet ya…

maaf kalo salah tanggap, bulannya column2.php itu secara otomatis dirender didalam main,

artinya semua variable yang ada di main.php, pasti terbaca di column2.php iya gak seh…

coba ah…

sebenarya semua nilai (asal public state) dapat diakses dimana aza dengan mengunakan : Yii::app()->nilai.

refensi :"Application is created as a singleton by the entry script. The application singleton can be accessed at any place via Yii::app()."

jadi ngak perlu didefinisikan ulang dgn param jg ngak masalah, yang penting udah didefinisi kan di kontroller atau model.

atau kalau mau pake param jg ngak apa tp jk belum didefinisi di kedua tempat diatas.

semua Variable yang telah didefinisikan dlm "The application singleton" atau aplikasi dpt di akses langsung dengan Yii::app() dimana pun dia dalam aplikasi itu

untuk render nya seperti render model maupun controller seperti biasa, Yii::app() sebaiknya jangan di panggil di view nya

@YII alvs : thank’s bro buat masukannya, ane juga baru tau

maklum jarang baca manualnya ;D

bisa kasih contohnya gan, ‘can be accessed at any place via Yii::app()’?

jadi pantang gitu panggil Yii::app() di view?

yup bisa, tp yang sedang dibahas ‘nilai variablenya selalu berbeda di setiap controller & dynamic’

mangkanya pake Yii::app() salah satu solusinya ketimbang pake $_SESSION atau $GLOBAL,

mungkin ada yang nemu solusi yg lain?

Tq

wah bener bener, dulu juga sempat kena masalah kayak gini, pengen buat column tapi ternyata isinya dependency dengan controller / data,

dan waktu itu juga karena tidak punya solusi akhirnya buat colukn di view hahaha…

tapi baca dari oom fastcrash kayaknya jitu tuh, trus ane punya pikiran nih oom… tolong dikritisi pikiran ini…

karena semua controller yang ane buat merupakan turunan dari MyCController bukan turunan dari CController, sehingga saya bisa buat myVar didalam MyController.

selanjutnya semua controller jika perlu merubah tingal overwrite, mungkin dengan setter dan getter yang tepat.

wah mantep nih gan, dah bisa nurunin kelas, MyController ini filenya ditaruh dmn gan?

folder components?




class MyController extends CController

{

public $head;

}



sekalian kasih contohnya bro, cara panggilnya diview?

yup betul

iya bener ditaruh dicomponent… dulu yang bikin ide ini bukan ane… tapi tinggal pake… sepertinya bagus nih lebih classy dibanding config…

benar, sepertinya konsep class ini lebih bagus. Kalau config menurut saya kadang juga diperlukan misalnya untuk nilai-nilai yang global seperti info email atau info-info lainnya yang mungkin diperlukan di berbagai tempat…

Btw, sebetulnya Yii sendiri sudah membuat component Controller yang diturunkan dari CController kan? Jadi maksudnya bro aqge tidak pakai class Controller tetapi buat controller sendiri lagi?

config itu penting, yii sebenarnya fleksibel…tergantung kita mau menerapkan jenis class dan konsep seperti apa, jd sebenar nya mau bikin class sendiri bisa jg dgn modifikasi class yng kemudian class disimpan di componet klu memang ingin membangun dr class bukan dr class reffensi

yup bro, kalo kami menyebutnya Gcontroller, yang di dalamnya sudah ada (akan ini baru rencana )

setter getter untuk left column, dan juga righ kolom, bottom column, etc.

dan ternyata untuk ngatur widget seperettinya akan effien karena bisa di tumpangkan di variable leftwidget(array) dan right widget(array)

entar kalo dah berhasil ane snip kan… sementara doa in dulu …