2017-03-08 2 views
0

Wie zähle ich alle ungelesenen E-Mails für einen bestimmten Benutzer und lege sie auf ein Abzeichen: Die Dateien sind here.Wie schreibe ich ein Codeigniter-Badge?


Location Code/Funktion:

  • crud_model // Meldungsnummer apper Zahl pro Benutzer // START
  • Kopf // Meldungsnummer apper Zahl pro Benutzer START //

Beispiel: Der Admin hat 10 Nachrichten insgesamt (8 rea d Nachricht + 2 ungelesene Nachricht). Das Abzeichen zeigt 2 ungelesene Nachrichten an.


<?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;?> 

Die vorhandenen Controller:

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; 
} 

ich die Gesamtzahl der ungelesenen Nachrichten vom angemeldeten Benutzer zählen möge.

Antwort

0

Sie sollten eine Methode oder Funktion nicht wie eine native PHP-Funktion wie count() benennen. Entfernen Sie die Methode, und stattdessen nur verwenden Codeigniters count_all_results()

Try this:

<?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(); 
?> 

Da Sie keine Empfänger-ID in der Tabelle Nachricht haben, machen wir einen Join der Lage sein, den aktuellen Benutzer abfragen . In meinem Beispiel gehe ich davon aus, dass Sie die Spalte message_thread_code als Fremdschlüssel zwischen den Meldungen und der Lauffläche haben? Wenn dieses Beispiel funktioniert, benötigen Sie die benutzerdefinierte Methode count() in Ihrem Controller nicht.

Alternative 2: Um den Code sauberer zu machen, könnten Sie die Logik in einer Methode in der Steuerung setzen:

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(); 
} 

Und dann den PHP-Code entfernen und diese nur in der Kopfzeile verwenden:

<?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. Von dort, wo ich die Methode Post entfernen (contro ller oder view_badge.php?)? 2.Die Tabelle ist message_thread mit Zeile (message_thread_id, message_thread_code, sender, reciever, last_message_timestamp) Nachricht mit Zeile (message_id, message_thread_code, message, sender, timestamp, read_status <0 ungelesen, 1read>) 3. Ich benenne die count Funktion mit count_all_results() um und das Ergebnis ist 505 error Sorry ich bin neu ...... ich kenne mich nicht gut aus php + codeigniter. 4. Wenn Sie mir den vollen Code zur Verfügung stellen können. Thanks –

+0

OK, möchten Sie ALLE ungelesenen Nachrichten für einen Benutzer zählen? (wie Sie in Ihrer Frage angeben)? Oder möchten Sie alle ungelesenen Nachrichten in einem bestimmten Thread zählen, so wie Sie es in Ihrer Zählfunktion zu tun scheinen? –

+0

Ich möchte alle ungelesenen Nachrichten für einen Benutzer zählen. Beispiel Admin hat 2 ungelesene Nachricht von XX Nachricht. Student hat 3 ungelesene Nachrichten von YY message. –

0

Alles, was Sie tun müssen, zählt die Anzahl der $ message_threads, oder?

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

Und dann $ unread_message_number zu Ihrer Ansicht senden. Sie fügen alles in Ihrem Beispiel zusammen, ich kann mir nur vorstellen, dass Ihr Modell, Ihre Ansicht und Ihr Controller in Ihrer eigentlichen App getrennt sind.

+0

Sie sollten wahrscheinlich den entsprechenden Code dann schreiben Sie, gibt es keine Möglichkeit für jedermann zu wissen, wie Sie ungelesene E-Mail berechnen – Pacio

+0

ich den vollständigen Code mit Controller –