Yii2: Tutorial Membuat Blog Sederhana Part II

Lanjutan dari artikel sebelumnya.. http://www.hafidmukhlasin.com/2014/06/25/yii2-tutorial-membuat-blog-sederhana-part-i/
Langkah selanjutnya

Menampilkan Komentar pada Post Single

- Persiapkan Data Komentar
Edit SiteController pada frontend\controllers\SiteController.php

Persiapkan data komentar pada function actionPostSingle($id)

    $comments = \common\models\Comment::find()
					->where(['status' => 1,'post_id'=>$id])
					->orderBy('id DESC')
					->all();
	

Intinya, komentar yang ditampilkan adalah hanya komentar pada artikel tersebut saja dan yang statusnya 1

Lalu jangan lupa, kirimkan parameter comments via render\

	return $this->render('postSingle', [
            'post' => $post,
			'categories' => $categories,
			'comments' => $comments,
        ]);
	

- Menampilkan Data Komentar
Edit view postSingle.php pada frontend\views\site\postSingle.php

	foreach($comments as $comment){
		echo "<div style='border-bottom:1px solid #ddd; padding:5px;margin:5px;'>";
		echo "<p class='pull-right'><small>
			  Comment by ".$comment->author." at ".date("F j, Y, g:i a",$comment->create_time).
			  "</small></p>";
		echo $comment->content;
		echo "</div>";
	}
	

Menambahkan Form Komentar pada Post Single

Kita bisa gunakan Gii untuk menggenerate form..

http://back.end/gii

Pilih Form Generator lalu isi fieldnya sesuai berikut in
- View Name = site/formComment
- Model Class = common\models\Comment
- View Path = @frontend/views
Lalu silahkan di Generate aja

- Persiapkan Model Comment untuk Form Komentar
Edit SiteController pada frontend\controllers\SiteController.php
Persiapkan model komentar pada function actionPostSingle($id)

	$model = new \common\models\Comment();
	

Lalu jangan lupa, kirimkan parameter model via render\

	return $this->render('postSingle', [
		'post' => $post,
		'categories' => $categories,
		'comments' => $comments,
		'model' => $model,
	]);
	

- Tampilkan Form Komentar pada SinglePost
Edit view postSingle.php pada frontend\views\site\postSingle.php

	echo $this->render('formComment', [
        'model' => $model,
    ]);
	

- Edit Form Komentar Hasil Generate
frontend\views\site\formComment.php

	<?= $form->field($model, 'author')->textinput(['style'=>'width:50%;']) ?>
	<?= $form->field($model, 'email')->textinput(['style'=>'width:50%;']) ?>
	<?= $form->field($model, 'url') ?>
	<?= $form->field($model, 'content')->textarea(['rows'=>3]) ?>
	<?php
	//$form->field($model, 'status')
	//$form->field($model, 'post_id')
	//$form->field($model, 'create_time')
	?>
	

- Siapkan Action Simpan Komentar
Edit SiteController pada frontend\controllers\SiteController.php

pada function actionPostSingle($id)

	if ($model->load(Yii::$app->request->post())) {
		$model->post_id=$id;
		$model->status=0;
		$model->create_time=time();
		if ($model->validate()) {
			if($model->save()){
				Yii::$app->session->setFlash('success', 'Comment saved, waiting moderation');
			}
		}
	}
	

Default comment statusnya 0 artinya drfat atau tidak dipublish

 

Menangani Komentar User yang Sudah Login

Jika user dah login maka hanya kolom Komentar saja yang muncul.

- Edit Form Komentar
frontend\views\site\formComment.php

	<?php
	if (Yii::$app->user->isGuest) { ?>
		<?= $form->field($model, 'author')->textinput(['style'=>'width:50%;']) ?>
		<?= $form->field($model, 'email')->textinput(['style'=>'width:50%;']) ?>
		<?= $form->field($model, 'url') ?>
	<?php
	}
	?>

	<?= $form->field($model, 'content')->textarea(['rows'=>3]) ?>
	<?php
	//$form->field($model, 'status')
	//$form->field($model, 'post_id')
	//$form->field($model, 'create_time')
	?>
	

Artinya jika dia belum login maka field url author dan email akan muncul.

- Edit SiteController pada frontend\controllers\SiteController.php

pada function actionPostSingle($id)

	if (!Yii::$app->user->isGuest){
		$model->author=Yii::$app->user->identity->username;
		$model->email=Yii::$app->user->identity->email;
		$model->status=1;
	}

	if ($model->validate()) {
		if($model->save()){
			if($model->status==1){
				Yii::$app->session->setFlash('success', 'Comment saved,');
			}
			else{
				Yii::$app->session->setFlash('success', 'Comment saved, waiting moderation');
			}
		}
	}
	

Sehingga jika bukan guest atau si user dah login maka variabel author akan diisi dengan username, demikian juga dengan field lain
dan status diset jadi 1, artinya publish atau ditampilkan..

Bersambung

CMIIW

Ini kode lengkapnya https://drive.google.com/file/d/0BwSv7MUYD04kRVBlaG02RW1uaGs/edit?usp=sharing

Tags:
2 Comments
  1. Arno
    • Arno

Leave a Reply

Your email address will not be published. Required fields are marked *