私は自分の Web プロジェクトにコメント システムを実装しようとしています。私は Yii に非常に慣れていません。ユーザーがコメントを送信できるようにして、データベースを更新し、すべての投稿のコメントを再レンダリングできるようにします (注意: ページ全体を更新したくありません)。
を使用してこれを達成しようとしCHtml::ajaxSubmitButton
ていますが、電話をかけることすらできないようです。通話が行われているかどうかを確認する方法がわかりません。
私の現在のコードは次のとおりです。
_questionComment
- これは「参照」ビュー内で部分的にレンダリングされます
<div class="form">
<?php
$form = $this -> beginWidget('CActiveForm', array(
'id' => 'question-answer-form',
'enableClientValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
),
));
$response = new QuestionAnswerForm;
?>
<div class="row">
<?php
echo $form->labelEx($response, 'link');
echo $form->textField($response, 'link');
echo $form->error($response, 'link');
?>
</div>
<div class="row">
<?php
echo $form->labelEx($response, 'description');
echo $form->textField($response, 'description');
echo $form->error($response, 'description');
?>
</div>
<div class="row buttons">
<?php echo CHtml::ajaxSubmitButton('Reply', 'comment', array(
'update'=>'#comments',
'type'=>'POST',
)); ?>
</div>
<?php $this->endWidget(); ?>
</div>
QuestionController/actionComment()
- ajax リクエストを処理する必要があります
public function actionComment()
{
if(Yii::app()->request->isAjaxRequest)
{
//current user has posted a response
if(isset($_POST['QuestionAnswerForm']))
{
$response = new QuestionAnswerForm;
$response->attributes = $_POST['QuestionAnswerForm'];
//answer form has passed inspection
if($response->validate())
{
//save new answer to database
$newAnswer = new QuestionAnswer;
$newAnswer->link = $response->link;
$newAnswer->description = $response->description;
$newAnswer->question_id = Yii::app()->getRequest()->getQuery('id');
$newAnswer->user_id = Yii::app()->user->getId();
//adds a timestamp using a default timezone 'GMT'
$newAnswer->timestamp = Timestamp::getCurrentTimeStamp();
$newAnswer->save();
}
}
}
}
browse
- ここにコメントが表示されます。ユーザーがコメントを送信した後、閲覧ページですべてのコメントを部分的に再度レンダリングする必要があります。ajaxSubmitButton の「update」パラメーターを使用してこれを達成しようとしました。
<?php
/*
* @var $this QuestionController
* @var $question Question
* @var $answers QuestionAnswer
*/
echo "<h1>" . $question['name'] . "</h1>";
echo "<h3>" . $question['description'] . "</h3>"
?>
<? $this->renderPartial('_renderComments', array('answers'=>$answers)); ?>
<? $this->renderPartial('_questionComment'); ?>