如何统计特定用户的所有未读电子邮件并将其放在徽章上: 文件为here。
位置代码/功能:
示例:管理员共有10条消息(8条读取消息+ 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 :(得分:0)
您需要做的就是计算$ message_threads的数量,对吧?
...
$message_threads = $this->db->get('message_thread')->result_array();
$unread_message_number = count($message_threads);
然后将$ unread_message_number发送到您的视图。你把所有东西放在你的例子中,我只想象你的模型,视图和控制器在你的实际应用程序中是分开的。
答案 1 :(得分:0)
您不应将方法或函数命名为与count()
等本机PHP函数相同的名称。删除方法,而只使用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();
?>
由于您的表消息中没有接收者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;?>