2017-03-08 79 views
0

如何計算特定用戶的所有未讀電子郵件並將其放在徽章上: 這些文件是here如何編寫代碼標記?


位置代碼/功能:

  • crud_model每個用戶 //消息號衝擊片雷管計數//開始
  • 頭 //消息每個用戶號碼衝擊片雷管計數//開始

示例:管理員有10條消息總數(8條d消息+ 2未讀消息)。徽章顯示2條未讀消息。


<?php 
$current_user = $this->session->userdata('login_type') . '-' . $this->session->userdata('login_user_id'); 
$this->db->where('sender', $current_user); 
$this->db->or_where('reciever', $current_user); 
$message_threads = $this->db->get('message_thread')->result_array(); 
$unread_message_number = count($message_threads); 
?> 
<a href="<?php echo base_url();?>index.php?teacher/message"> 
<i class="entypo-mail"></i> 
Message 
<span class="badge badge-secondary"><?php echo $unread_message_number; ?></span> 
</a> 
</li> 
<?php endif;?> 

的存在控制器:

function count($message_thread_code) { 
    $unread_message_counter = 0; 
    $current_user = $this->session->userdata('login_type') . '-' . $this->session->userdata('login_user_id'); 
    $messages = $this->db->get_where('message', array('message_thread_code' => $message_thread_code))->result_array(); 
    foreach ($messages as $row) { 
     if ($row['sender'] != $current_user && $row['read_status'] == '0') 
      $unread_message_counter++; 
    } 
    return $unread_message_counter; 
} 

我想從所記錄的用戶數的未讀消息的總數。

回答

0

你不應該命名一個方法或函數與原生PHP函數相同,如count()。取出方法,而是隻使用Codeigniters count_all_results()

試試這個:

<?php 
    $current_user = $this->session->userdata('login_type') . '-' . $this->session->userdata('login_user_id'); 
    $this->db->where('message_thread.reciever', $current_user); 
    $this->db->where('message.read_status', 0); 
    $this->db->from('message_thread'); 
    $this->db->join('message', 'message.message_thread_code = message_thread.message_thread_code'); 
    $unread_message_number = $this->db->count_all_results(); 
?> 

既然你沒有reciever ID在你的餐桌消息,我們正在一個加盟能夠查詢當前用戶。在我的例子中,我假設你有message_thread_code這個列作爲消息和腳本之間的外鍵?

如果這個例子有效,你不需要控制器中的自定義count()方法。

備選方案2:爲了使代碼更清潔,你可以把邏輯的方法內部控制器:

function count_unread(){ 
    $current_user = $this->session->userdata('login_type') . '-' . $this->session->userdata('login_user_id'); 
    $this->db->where('message_thread.reciever', $current_user); 
    $this->db->where('message.read_status', 0); 
    $this->db->from('message_thread'); 
    $this->db->join('message', 'message.message_thread_code = message_thread.message_thread_code'); 
    return $this->db->count_all_results(); 
} 

,然後刪除PHP代碼,只在你的頭使用:

<?php if($account_type == 'teacher'):?> 
<li> 
    <a href="<?php echo base_url();?>index.php?teacher/message"> 
    <i class="entypo-mail"></i> 
    Message 
    <span class="badge badge-secondary"><?php echo count_unread(); ?></span> 
    </a> 
</li> 
<?php endif;?> 
+0

1.完整的代碼從那裏我刪除方法(CONTRO ller或view_badge.php?)? 2。該表是帶有行的message_thread(message_thread_id,message_thread_code,sender,reciever,last_message_timestamp) 帶有行的消息(message_id,message_thread_code,message,sender,timestamp,read_status <0未讀,1read>)3。我用count_all_results()重命名count函數,結果是505錯誤對不起,我是新的......我不太瞭解php + codeigniter。 4.如果你能給我提供完整的代碼。謝謝 –

+0

好的,你想爲用戶統計所有未讀消息嗎? (如你在你的問題中所述)?或者你是否想要計算特定線程中的所有未讀消息,就像你在計數函數中似乎做的那樣? –

+0

我想爲用戶統計所有未讀郵件。示例管理員有2條來自XX消息的未讀消息。學生有3條來自YY消息的未讀消息。 –

0

你需要做的就是計算$ message_threads的數量吧?

... 
$message_threads = $this->db->get('message_thread')->result_array(); 
$unread_message_number = count($message_threads); 

然後發送$ unread_message_number到您的視圖。你把所有的東西都放在你的例子中,我只想象你的模型,視圖和控制器在你的實際應用中是分開的。

+0

你或許應該張貼相關的代碼,那麼,有沒有辦法讓任何人知道你是怎麼計算未讀電子郵件 – Pacio

+0

我發佈與控制器 –