如何编写 codeigniter 徽章?

How do I write a codeigniter badge?

如何计算特定用户的所有未读电子邮件并将其放在徽章上: 这些文件是 here


位置code/function:


示例:管理员总共有 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;
}

我想统计已登录用户的未读消息总数。

您需要做的就是计算 $message_threads 的数量,对吗?

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

然后将$unread_message_number发送到您的视图。你在你的例子中把所有东西放在一起,我只是想你的模型、视图和控制器在你的实际应用程序中是分开的。

您不应将方法或函数命名为与原生 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(); 
?>  

由于您的 table 消息中没有收件人 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-code 并仅在您的 header:

中使用它
<?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;?>