【问题标题】:How do I write a codeigniter badge?如何编写 codeigniter 徽章?
【发布时间】:2017-03-08 14:06:23
【问题描述】:

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


位置代码/功能:

  • crud_model // 每个用户的消息数应用计数 // START
  • 标题 // 每个用户的消息数应用计数 // 开始

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

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

【问题讨论】:

    标签: codeigniter count message badge


    【解决方案1】:

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

    【讨论】:

    • 1.我从哪里删除方法(控制器或 view_badge.php?)? 2. 表是message_thread with row (message_thread_id, message_thread_code, sender, reciever, last_message_timestamp) message with row (message_id, message_thread_code, message, sender, timestamp, read_status )3。我用 count_all_results() 重命名计数函数,结果是 505 错误对不起,我是新手......我不太了解 php + codeigniter。 4. 能否提供完整代码。谢谢
    • 好的,你想统计一个用户的所有未读消息吗? (正如您在问题中所说)?或者您想像在计数函数中那样计算特定线程中的所有未读消息?
    • 我想统计一个用户的所有未读消息。示例管理员有 2 条来自 XX 消息的未读消息。学生有 3 条来自 YY 消息的未读消息。
    • 而且您的问题似乎没有包含整个视图?我可以看到 php endif 但没有 if?在你看来,你是循环的中间人还是什么?
    • “来自 XX 消息的 2 条未读消息”?您真的是指来自该用户的所有发件人和消息线程的所有未读消息吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 你应该把相关代码贴出来吧,没人知道你是怎么计算未读邮件的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-03
    相关资源
    最近更新 更多