[Yii Framework] Membuat Forum Sederhana(2)

Okeh, kita lanjutkan bahasan sebelumnya..

Saya disini mendefinisikan sebuah aturan dimana orang yang bisa berpartisipasi dalam tanya jawab di forum ini adalah orang-orang yang sudah melakukan login terlebih dahulu. Berrti kalo dia belum memiliki akun, dia harus melakukan register. Untuk mendefinisikan hal tersebut, maka harus di lakukan pengaturan di function “accessRule()”, dimana harus kita set seperti berikut:

			array('allow',
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),

Karena kita tadi menggunakan editor, maka hasil dari inputan kita di editor tadi akan menjadi berupa text yang sudah tergabung dengan HTML yang sudah di generate otomatis oleh editor tadi. Nah, untuk membuat agar tampilan text HTML yang terdapat pada inputan kita tadi akan otomatis di tampilkan dengan bentuk aslinya, maka kita harus ubah beberapa hal..

Pertama buka pada “projectAnda/protected/views/pertanyaan/_view.php”, ubah code berikut:

<div class="view">
	<b><?php echo CHtml::encode($data->getAttributeLabel('id')); ?>:</b>
	<?php echo CHtml::link(CHtml::encode($data->id), array('view', 'id'=>$data->id)); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('pertanyaan')); ?>:</b>
	<?php echo CHtml::link($data->pertanyaan); ?>
	<br />

	<b><?php echo CHtml::encode($data->getAttributeLabel('id_penanya')); ?>:</b>
	<?php echo CHtml::encode($data->id_penanya); ?>
	<br />
</div>

menjadi seperti berikut:

<div class="view">
	<b><?php echo CHtml::encode(User::model()->findByPk($data->id_penanya)->username) ?></b>
	bertanya :<br/>
	<?php echo CHtml::link($data->pertanyaan, array('view', 'id'=>$data->id)); ?>
	<br />
</div>

Penjelasan : Pada code di atas saya menghapus beberapa bagian. Ada dua yang saya hapus yaitu tampilan id pertanyaan dan id penanya. Kenapa saya hilangkan? yah itu karena saya rasa id pertanyaan tidak perlu di ketahui oleh user. Sedangkan informasi id orang yang bertanya juga saya hilangkan dan saya ganti dengan orang yang bertanya langsung dengan mengambil informasi ny langsung dari tabel user. Jadi yang hanya di tampilkan pada halaman index hanya informasi judul dari pertanyaan yang jika di klik akan langsung mengarah ke halaman detail nya.

Setelah hal di atas selesai, kita akan membuat suatu kondisi dimana saat user memilih suatu pertanyaan yang sudah ada maka akan user akan langsung di suguhkan tampilan pertanyaan tersebut beserta jawaban yang sudah ada di pertanyaan tersebut. Selain itu user juga akan di berikan option untuk menjawab pertanyaan tersebut.  Pertama, untuk menampilkan semua jawaban pada pertanyaan tersebut, kita harus mengeset query nya pada controllernya. Edit code pada actionView nya menjadi seperti berikut:

	public function actionView($id)
	{
		$sql="SELECT * FROM jawaban where id_pertanyaan=".$id;
		$dataProvider=new CSqlDataProvider($sql,array(
			'keyField' => 'id',
		));
		$this->render('view',array(
			'model'=>$this->loadModel($id),
			'dataProvider'=>$dataProvider,
		));
	}

Penjelasan : code di atas akan mengembalikan data “pertanyaan” yang memiliki id= $id, dan mengembalikan semua data” jawaban” yang memiliki id_pertanyaan=$id.

Lalu kita buat tampilan view nya sesuai dengan yang sudah kita definisikan di atas. Buatlah sebuah file _viewJ.php pada “projectAnda/protected/views/pertanyaan/_viewJ.php”. Lalu masukkan code berikut di dalamnya:

<div class="view">
        <b>
        <?php echo CHtml::encode(User::model()->findByPk($data['id_penjawab'])->username) ?>
        </b>
	Menjawab :<br/>
        <?php echo $data['jawaban']; ?>
	<br />
</div>

Setelah itu pada “protected/views/pertanyaan/view.php”, ubah code yang awalnya seperti berikut:

<?php $this->widget('zii.widgets.CDetailView', array(
	'data'=>$model,
	'attributes'=>array(
		'id',
		'pertanyaan',
		'id_penanya',
	),
)); ?>

menjadi seperti berikut:

<h2>
<?php echo $model->pertanyaan; ?>
</h2>

<?php $this->widget('zii.widgets.CListView', array(
	'dataProvider'=>$dataProvider,
	'itemView'=>'_viewJ',
)); ?>
<h3><?php echo CHtml::link('Jawab Pertanyaan Ini', array('jawaban/create', 'induk'=>$model->id)); ?></h3>

 

Penjelasan : pada tampilan view, kita akan menampilkan semua jawaban yang memiliki id_pertanyaan pada view tersebut. Untuk itu kita harus menampilkan list pertanyaan yang kita maksud. Saya menampilkan list pertanyaan tersebut ke dalam CListView dan menggunakan halaman viewJ untuk menampilkannya… Lalu di bagian paling bawah code tersebut, saya membuat sebuah link yang akan mengarah ke halaman create pada halaman create/jawaban.

Skenario menginput jawaban disini adalah, user memilih sebuah pertanyaan. Lalu user menjawab pertanyaan tersebut. Dalam proses ini, program akan secara otomatis menangkap id_pertanyaan yang akan di masukkan. Jadi user tidak perlu repot-repot menginput id_pertanyaan secara manual, program akan secara otomatis membuat nya. Nah, untuk itu ada bebrapa hal yang harus kita modifikasi pada program kita untuk membuat hal tersebut menjadi otomatis.. Dan itu akan saya bahas pada bahasan selanjutnya😀

Sekian dlu chapter 2… akan saya lanjutkan di chapter selanjutnya…

Selamat mencoba…

Semoga bermanfaat😀 ..

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: