Yii Framework Forum: Melempar Variable - Yii Framework Forum

Jump to content

  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

Melempar Variable Rate Topic: -----

#1 User is offline   Mr. Naubisah 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 08-December 10

Posted 12 December 2010 - 09:50 AM

Hola Kakak Yii Senior,

Saya baru di Yii. Mau nanya, Kak:
Saya generate CRUD dari gii. Nah, secara default kan, ada 3 jenis layout:
- main.php
- column1.php
- column2.php

Bagaimana cara saya melempar variable dari main.php ke column2.php??? Yang sekarang seh saya buat pake bantuan keyword 'global', karena saya belum sepenuhnya mengerti flow/life-cycle Yii.

Mohon Bimbingan Kakak Senior sekalian.... :)
0

#2 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 12 December 2010 - 11:05 AM

sama bro, ane juga masih baru di Yii ;).

setahu saya itu cuma layout aja.
kalo mau lempar2an variable mending di Model, View, Controller terkait.
emang variable seperti apa yg dikehendaki ?
everything must standing on balance
0

#3 User is offline   Mr. Naubisah 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 08-December 10

Posted 12 December 2010 - 11:27 AM

View Postsaebaryo, on 12 December 2010 - 11:05 AM, said:

sama bro, ane juga masih baru di Yii ;).

setahu saya itu cuma layout aja.
kalo mau lempar2an variable mending di Model, View, Controller terkait.
emang variable seperti apa yg dikehendaki ?


Makasih bro udah balas... :)
Gini bro, di view aku dah nge-render model Store:

<?php
$this->breadcrumbs=array(
	'Stores'=>array('index'),
	$model->name,
);

$this->menu=array(
	array('label'=>'List Store', 'url'=>array('index')),
	array('label'=>'Create Store', 'url'=>array('create')),
	array('label'=>'Update Store', 'url'=>array('update', 'id'=>$model->owner_id)),
	array('label'=>'Delete Store', 'url'=>'#', 'linkOptions'=>array('submit'=>array('delete','id'=>$model->owner_id),'confirm'=>'Are you sure you want to delete this item?')),
	array('label'=>'Manage Store', 'url'=>array('admin')),
);

?>

<h1>View Store #<?php echo $model->owner_id; ?></h1>

<?php 
global $current_logo;
$current_logo=StoreLogo::model()->findByPk((int)$model->current_logo);
$current_logo=$current_logo->path;

$this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'owner_id',
		'current_logo',
		'name',
		'signature',
		'desc',
		'reputation',
		'created',
		'modified',
	),
)); ?>



Nah, aku mau nempatin current logo di bar kanan web(sidebar column2.php). Awalnya aku coba aja nge-echo image di sidebar itu, ternyata di column2 $model sudah tidak terbaca lagi, makanya di code awal ada pelemparan variable melalui $this->menu. Aku coba sisipkan melalui $this->menu, dengan cara menempatkan $current_logo diarray paling akhir $this->menu, tetap tidak bisa. Solusi terakhir seh, aku manfaat kan keyword global (menurut aku seh, design seperti ini jelek. Pasti ada cara lain).

Berikut code di column2.php
<?php 
$this->beginContent('//layouts/main'); ?>
<div class="container">
	<div class="span-19">
		<div id="content">
			<?php echo $content; ?>
		</div><!-- content -->
	</div>
	<div class="span-5 last">
		<div id="sidebar">
		<div id="store-logo">
		<?php
			global $current_logo;
			echo CHtml::image(Html::imageUrl($current_logo)); 
		?>
		</div> 
		<?php
			$this->beginWidget('zii.widgets.CPortlet', array(
				'title'=>'Operations',
			));
			$this->widget('zii.widgets.CMenu', array(
				'items'=>$this->menu,
				'htmlOptions'=>array('class'=>'operations'),
			));
			$this->endWidget();
		?>
		</div><!-- sidebar -->
	</div>
</div>
<?php $this->endContent();?>


Bagaimana solusinya bro??? :-[
0

#4 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 12 December 2010 - 11:19 PM

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'];


Posted Image
0

#5 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 12 December 2010 - 11:34 PM

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,
		));
	}

everything must standing on balance
0

#6 User is offline   junxiong 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 541
  • Joined: 21-June 10

Posted 13 December 2010 - 07:41 AM

View Postsaebaryo, on 12 December 2010 - 11:34 PM, said:

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)
“The most likely way for the world to be destroyed, most experts argue, is by accident. That’s where we come in; we’re computer professionals. We cause accidents.” - Nathaniel Borenstein

Yii Playground : Collaborative demo apps. You can join to improve it too!
My Team's Blog: In Indonesian.
0

#7 User is offline   saebaryo 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 74
  • Joined: 13-October 10
  • Location:jogjakarta - Indonesia

Posted 13 December 2010 - 11:29 AM

View Postjunxiong, on 13 December 2010 - 07:41 AM, said:

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
everything must standing on balance
0

#8 User is offline   junxiong 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 541
  • Joined: 21-June 10

Posted 13 December 2010 - 05:11 PM

View Postsaebaryo, on 13 December 2010 - 11:29 AM, said:

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
“The most likely way for the world to be destroyed, most experts argue, is by accident. That’s where we come in; we’re computer professionals. We cause accidents.” - Nathaniel Borenstein

Yii Playground : Collaborative demo apps. You can join to improve it too!
My Team's Blog: In Indonesian.
0

#9 User is offline   Mr. Naubisah 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 08-December 10

Posted 13 December 2010 - 08:45 PM

View Postsaebaryo, on 12 December 2010 - 11:34 PM, said:

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,
		));
	}



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???
0

#10 User is offline   Mr. Naubisah 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 08-December 10

Posted 13 December 2010 - 08:48 PM

Kalau di apps/views/store/view.php

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

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

#11 User is offline   junxiong 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 541
  • Joined: 21-June 10

Posted 13 December 2010 - 10:02 PM

View PostMr. Naubisah, on 13 December 2010 - 08:48 PM, said:

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.yiiframew...le-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...
“The most likely way for the world to be destroyed, most experts argue, is by accident. That’s where we come in; we’re computer professionals. We cause accidents.” - Nathaniel Borenstein

Yii Playground : Collaborative demo apps. You can join to improve it too!
My Team's Blog: In Indonesian.
0

#12 User is offline   Mr. Naubisah 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 6
  • Joined: 08-December 10

Posted 13 December 2010 - 10:58 PM

View Postjunxiong, on 13 December 2010 - 10:02 PM, said:

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.yiiframew...le-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... :)
0

#13 User is offline   Peter JK 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 84
  • Joined: 22-November 10
  • Location:Jakarta, Indonesia

Posted 22 December 2010 - 12:39 PM

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
0

#14 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 27 December 2010 - 01:38 AM

View PostPeter JK, on 22 December 2010 - 12:39 PM, said:

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  :)

//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
0

#15 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 30 December 2010 - 05:12 AM

View PostMr. Naubisah, on 12 December 2010 - 09:50 AM, said:

Hola Kakak Yii Senior,

Saya baru di Yii. Mau nanya, Kak:
Saya generate CRUD dari gii. Nah, secara default kan, ada 3 jenis layout:
- main.php
- column1.php
- column2.php

Bagaimana cara saya melempar variable dari main.php ke column2.php??? Yang sekarang seh saya buat pake bantuan keyword 'global', karena saya belum sepenuhnya mengerti flow/life-cycle Yii.

Mohon Bimbingan Kakak Senior sekalian.... :)



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...
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#16 User is offline   YII alvs 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 53
  • Joined: 11-February 10

Posted 30 December 2010 - 08:58 PM

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
0

#17 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 30 December 2010 - 10:42 PM

@YII alvs : thank's bro buat masukannya, ane juga baru tau
maklum jarang baca manualnya ;D

View PostYII alvs, on 30 December 2010 - 08:58 PM, said:

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.

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

View PostYII alvs, on 30 December 2010 - 08:58 PM, said:

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

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

View Postaqge, on 30 December 2010 - 05:12 AM, said:

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...


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
0

#18 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 04 January 2011 - 02:41 PM

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.
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

#19 User is offline   fastcrash 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 245
  • Joined: 10-March 10
  • Location:South Jakarta

Posted 05 January 2011 - 05:27 AM

View Postaqge, on 04 January 2011 - 02:41 PM, said:

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

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?

View Postaqge, on 04 January 2011 - 02:41 PM, said:

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


yup betul
0

#20 User is offline   aqge 

  • Standard Member
  • PipPip
  • Yii
  • Group: Members
  • Posts: 188
  • Joined: 02-September 10
  • Location:Indonesia

Posted 05 January 2011 - 11:31 PM

View Postfastcrash, on 05 January 2011 - 05:27 AM, said:

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..
Best Regard
Tidak ada coding yang salah
Yang ada hanyalah Coding yang lebih baik
0

Share this topic:


  • (2 Pages)
  • +
  • 1
  • 2
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users