kopecsrk
(Dzumir)
1
Hello,
I have ajaxSubmitButton :
echo CHtml::ajaxSubmitButton(
'skomentuj', array('task/reqTest03'), array(
'update' => '#req_res02',
)
);
And function:
public function actionReqTest03() {
if (isset($_POST['comment'])) {
$modelMess = new Message;
$modelMess->created = new CDbExpression('NOW()');
$modelMess->user_id = Yii::app()->user->getId();
$modelMess->task_id = $_POST['task_id'];
$modelMess->text = $_POST['comment'];
$modelMess->hour = date('H:i:s');
$modelMess->save();
echo CHtml::encode(print_r($_POST['comment'], true));
}
}
foreach :
<?php foreach ($model->messages as $messages) { ?>
<br><span style="color:green;font-weight:bold;"><?php echo CHtml::encode($messages->user->name); ?></span>  
<span style="color:rgb(58, 98, 124);font-weight:bold;">(<?php echo CHtml::encode ($messages->created); ?>,</span>
<?php echo CHtml::link('<div id="deletetask" style="margin-left:300px;margin-top:-17px;"></div>', array('task/DeleteMessage', 'id' => $messages->id)); ?>
<span style="color:rgb(58, 98, 124);font-weight:bold;"><?php echo CHtml::encode ($messages->hour); ?>)</span><br>
<?php echo $messages->text; ?><br>
<?php } ?>
When i add new message, all save in db. But how i can displaying this message in page, without reloading the side? AJAX METHOD.
I think that you’ll need to handle response ajax
with a js function, passing reference to $ajaxOptions array
of your ajaxSubmitButton. So you can update your span or div
with new message.
<script language="javascript">
function successASB(data)
{
$('#req_res02').html(data);
}
</script>
<?php
echo CHtml::ajaxSubmitButton(
'skomentuj', array('task/reqTest03'), array(
'success' => 'successASB',
)
);
?>
<div id="req_res02"></div>
Remember to handle update of req_res02 in success function.
If you have to display last post, for example, you need to return
a json array from request to handle data correcly.
kopecsrk
(Dzumir)
5
Your example doesn’t works, div not reloading.
Have you check problem with firebug (console) ?
kopecsrk
(Dzumir)
7
maybe div is reloading, but when i add new message, older text hide, and new text show.
example:
user (date)
message message message
user2 (date)
message message message
user3 (date)
message message message
<div id="req_res02">There is reloading message in textField</div>
but when i write new message, this reloading message delete and put new message. I need displaying that:
user (date)
message message message
user2 (date)
message message message
user3 (date)
message message message
<div id="req_res02">
user4 (date)
message message message
And when i add new message div add message inside.
Your function return only last record inserted.
So you can try only update div :
<script language="javascript">
function successASB(data)
{
var existingData = $('#req_res02').html();
$('#req_res02').html(existingData+data);
}
</script>
kopecsrk
(Dzumir)
9
Ok, now this add and reloading message, but how i can add text message + user + date inside? or how loading record in datebase last adden?
With this function you are already viewing the list of previous messages with the last inserted
kopecsrk
(Dzumir)
11
Yes, but, in "req_res02" is only "text" message
In req_res02 you have result of calling action. If you output
also field that you need, you can complete your div.
kopecsrk
(Dzumir)
13
Thx, i render now all $_POST in my DIV = "req_res02".