2014-03-04 40 views
2

我一直在尋找解決方案以下的網絡,我希望有人能指出我在正確的方向。Codeigniter Twitter樣式流和Ajax

我有一個在Codeigniter中構建的web應用程序,主視圖從模型的帖子流中加載。目前用戶必須刷新頁面以獲取最新內容,這並不理想,我想實現的是流div更新並定期加載新內容。

我是CI和Ajax的新手,我想知道是否有人可以幫助解決方案。

一些代碼...

型號

function stream($uid, $updated, $limit) { 
     $this->db->cache_on(); 
     $now = microtime(true); 
     //$sql = "SELECT STATEMENT HERE"; 
     $query = $this->db->query($sql, array($uid, $uid, $updated, $limit)); 

     return $query->result(); 
    } 

控制器

function index() { 
     if($this->session->userdata('logged_in')) { 

      $session_data = $this->session->userdata('logged_in'); 
      $data['username'] = $session_data['username']; 
      $data['first_name'] = $session_data['first_name']; 
      $data['last_name'] = $session_data['last_name']; 
      $data['avatar'] = $session_data['avatar']; 
      $data['cover'] = $session_data['cover']; 

      //Stream Data 
      $updated = microtime(true); 
      $limit = 100; 
      $data['user_id'] = $session_data['id']; 

      $this->load->library('pagination'); 

      $config['base_url'] = BASE_URL; 
      $config['total_rows'] = $limit; 
      $config['per_page'] = 10; 
      $config['num_links'] = 20; 

      $this->pagination->initialize($config); 

      //$this->load->model('post'); 
      $data['results'] = $this->post->stream($data['user_id'], $updated, $limit); 
      $data['notifications'] = $this->user->notifications($data['user_id']); 
      $data['userStats'] = $this->user->getUserStats($data['user_id']); 

      $this->load->view('home_view', $data); 
      //$this->output->cache(1); 
      //$this->output->enable_profiler(FALSE); 
     } else { 
      //If no session, redirect to login page 
      redirect('/', 'refresh'); 
     } 
    } 

的看法是複雜的,但在本質上它使用了$results數組,然後地方foreach循環鑰匙進入引導區,例如

<div class="row"> 
    <div class="col-sm-12"> 
    <div class="panel panel-default"> 
     <div class="panel-heading"> 
    <img src="<?php echo $user_avatar;?>" class="postAvatar"> 
    <h4><?php echo $user_full_name;?><br><small><i class="fa fa-map-marker"></i> <?php echo $relDate.' from '.$post_location ?></small></h4> 
     </div> 
     <div class="panel-body bodyText"> 
    <div class="postBody"> 
      <?php echo $formatted;?> 
    </div> 
     </div> 
    </div> 
    </div> 
</div> 

回答

1

我強烈建議你看看HTML5中引入的WebSocket technique。它正是爲諸如你的新貼紙之類的東西而開發的。

還有一個叫做socket-io的交叉瀏覽器支持websocket庫。

也許你也有興趣this漂亮的jquery插件。

HTML5 FTW!

+0

有一個例子在那裏與CI,Socket.io和MySQL? –

+1

在這裏你有一個很好的[教程](http://devzone.zend.com/209/writing-socket-servers-in-php/),它向你展示瞭如何在php中使用帶有socket.io的websockets。只適合你的codeigniter數據源。 – WoIIe

+0

@沃爾謝謝哥們! –

1

爲了完成它,你必須做很多事情。

  1. 首先創建一個API,意味着你的控制器中的一個函數,它將爲你提供json格式的最新帖子。

  2. 你必須使用javascript/jquery到以前創建api網址,以獲取最新的帖子,然後解析JavaScript中的json響應,之後,你必須通過javascript編輯html並插入這篇文章數據到HTML。

  3. 使用的setInterval給你一個特定的時間間隔後一次次給AJAX功能來獲取最新的職位和填充它們的HTML div的