2015-06-03 3 views
1

Мне нужно перезагрузить содержимое моего виджета Yii через AJAX каждые XX секунд.
Это мой код виджета:Перезагрузка виджета Yii через ajax

class UserOnlineWidget extends CWidget 
{ 
    public function init(){ 

    } 

    public function run(){ 
    $userOnline=User::getOnlineUser();  
    $this->render("userOnLineWidget", array('userOnline'=>$userOnline)); 
    } 

} 

И это мнение userOnLineWidget.php:

<div class="userOnline"> 
<h5>User Online</h5> 
<ul> 
<?php 
    foreach($userOnline as $user) { 
    ?> 
    <li> 
     <ul> 
      <li><?php echo CHtml::link($user['username'], array('/site/view/'.$user['id'])); ?></li> 
      <li><?php echo ($user['online'] != null)? 'online' : 'offline'; ?></li> 
     </ul> 
    </li> 
    <?php 
    } 
?> 
</ul> 
</div> 

Как я могу это сделать? Я использую Yii 1.1.

+0

Пожалуйста, по крайней мере, добавьте код, который пытается это сделать. Я не вижу никаких признаков запросов Ajax. Люди не собираются делать вашу работу за вас, но если вы покажете, что вы сделали, кто-то может указать, как двигаться дальше с этой точки. – crafter

+0

Я понятия не имею, где мне нужно поставить вызов Ajax. Я новичок в мире Yii, поэтому я хотел бы знать, для чего лучше всего это делать. Я не хочу, чтобы ты выполнял мою работу. – enfix

ответ

1

Вот небольшой пример. Надеюсь, это поможет вам. Виджет, который показывает время с сервера каждую секунду.

//SiteController 
public function actionTest() 
{ 
    $this->render('my_view'); //just rendering view 
} 

public function actionContent() 
{ 
    $this->widget('time'); //return html of widget. use for ajax 
} 

//my_view.php 
<script src="<?php echo $this->assetsBase ?>/js/jquery-1.10.2.js"></script> 
<script type="text/javascript"> 
    $(document).ready(function() { 
     setInterval(function() { 
      $.get('/site/content', {}, function(data) { 
       $('#widget').html(data); 
      }); 
     }, 1000); //update widget content every second 
    }); 
</script> 
<div id="widget"> 
    <?php $this->widget('time'); // render widget ?> 
</div> 

//widget 
class Time extends CWidget 
{ 
    public function init(){ 

    } 

    public function run(){ 
     $date = new DateTime(); 
     $this->render("test", array('time'=>$date->format('H:i:s'))); 
    } 

} 

//view for widget test.php 
<p><?= $time ?></p> 
Смежные вопросы