Avatar

Geänderte Einträge (German / Deutsch)

by Auge ⌂, Thursday, December 22, 2016, 11:46 (2681 days ago) @ RaHa
edited by Auge, Thursday, December 22, 2016, 11:52

Hallo

Meine Nutzer sagten, dass abhängig von der Kategorieauswahl nicht alle neusten Einträge (aus allen Kategorien) angezeigt werden. Hat man z.B. die Katagorie "meine Auswahl" bekommt man garnicht mit, dass es in einer anderen Kategorie einen neuen Eintrag gibt.

Warum schließen deine Benutzer Kategorien aus ihrer Auswahl aus, wenn sie doch über Aktivitäten in diesen Kategorien informiert sein wollen? Das ist widersinnig. Die Auswahlmöglichkeit ist genau dazu da, die einen nicht interessierenden Kategorien auszuschließen, um nicht mit deren Inhalt belästigt zu werden. Wer das nicht will, soll das nicht nutzen.

Für deine Auflistung geänderter Beiträge in der Liste der letzten Postings habe ich einen neuen Query gebaut, den ich erst einmal in der Rohform zeige.

SELECT
 ent.id,
 entries.pid,
 entries.tid,
 entries.user_id,
 entries.name,
 (SELECT user_name FROM mlf2_userdata WHERE mlf2_userdata.user_id = entries.user_id), entries.name) AS user_name,
 UNIX_TIMESTAMP(entries.TIME) AS TIME,
 UNIX_TIMESTAMP(entries.edited) AS edited,
 UNIX_TIMESTAMP(entries.last_reply) AS last_reply,
 entries.subject,
 entries.category,
 (IF(entries.edited IS NOT NULL, entries.edited, entries.TIME)) AS orderTime
FROM ((
 SELECT id FROM mlf2_entries WHERE spam = 0 ORDER BY TIME DESC LIMIT 6)
  UNION (
 SELECT id FROM mlf2_entries WHERE spam = 0 ORDER BY edited DESC LIMIT 6))
 AS ent
 INNER JOIN mlf2_entries AS entries
  ON ent.id = entries.id
 ORDER BY orderTime DESC
 LIMIT 6

Dabei ist folgendes zu beachten.

1. Der Query berücksichtigt den Fall, dass es keine Kategorien gibt, nicht.
2. Der Query berücksichtigt den Fall, dass der Zugriff auf bestimmte Kategorien auf registrierte Benutzer oder Admins und Mods beschränkt ist, nicht.
3. Der Query berücksichtigt eine durch den Nutzer erfolgte Auswahl von Kategorien (über die wir oben schrieben) nicht.
4. Der Query berücksichtigt die eventuell eingeschaltete Einstellung, dass Bearbeitungen von Beiträgen durch Admins oder Mods nicht öffentlich angezeigt werden, nicht.

Es werden alle neuen oder bearbeiteten Beiträge, die von der eingestellten Begrenzung der Anzeige neuer Postings erfasst werden, angezeigt. Die Sortierung erfolgt zeitlich absteigend, wobei sich bearbeitete Beiträge mit dem Zeitstempel der letzten Bearbeitung in die Liste einreihen. Es gibt in der Liste momentan keine Hervorhebung des Umstands der Bearbeitung. Das sieht man erst, wenn man den Beitrag öffnet. Grundsätzlich ist eine Markierung aber möglich, da der Wert von edited im Falle der Bearbeitung ein Zeitstempel und ohne Bearbeitung NULL ist.

Es wären weitere Optimierungen möglich, da ich bezweifle, dass in diesem Fall (Liste der aktuellesten Beiträge) alle ermittelten Werte des Ergebnisses in der Ausgabe benutzt werden. Zudem kann der Name eines postenden Besuchers gemeinsam mit dem Namen eines registrierten Benutzers im Feld user_name ermittelt werden. Das zu benutzen, erforderte aber größere Änderungen im PHP- und Smarty-Code. Die Baustellen wollte ich jetzt aber nicht auch noch aufmachen.

// latest postings:
if($settings['latest_postings']>0)
{
 
$latest_postings_result = @mysqli_query($connid, "SELECT id, pid, tid, name, user_name, ".$db_settings['forum_table'].".user_id, UNIX_TIMESTAMP(time) AS time, UNIX_TIMESTAMP(time + INTERVAL ".intval($time_difference)." MINUTE) AS timestamp, UNIX_TIMESTAMP(last_reply) AS last_reply, subject, category
FROM ".$db_settings['forum_table']."
LEFT JOIN ".$db_settings['userdata_table']." ON ".$db_settings['userdata_table'].".user_id=".$db_settings['forum_table'].".user_id
WHERE spam=0
ORDER BY time DESC LIMIT ".$settings['latest_postings']) or raise_error('database_error',mysqli_error($connid));

Ersetze den vorhandenen Query mit dem folgenden.

$latest_postings_result = @mysqli_query($connid, "SELECT ent.id, entries.pid, entries.tid, entries.user_id, entries.name, (SELECT user_name FROM ".$db_settings['userdata_table']." WHERE ".$db_settings['userdata_table'].".user_id = entries.user_id) AS user_name, UNIX_TIMESTAMP(entries.time) AS time, UNIX_TIMESTAMP(entries.edited) AS edited, UNIX_TIMESTAMP(entries.time + INTERVAL ".intval($time_difference)." MINUTE) AS timestamp, UNIX_TIMESTAMP(entries.last_reply) AS last_reply, entries.subject, entries.category, (IF(entries.edited IS NOT NULL, entries.edited, entries.time)) AS orderTime
FROM ((SELECT id FROM ".$db_settings['forum_table']." WHERE spam = 0 ORDER BY time DESC LIMIT ".$settings['latest_postings'].") UNION (SELECT id FROM ".$db_settings['forum_table']." WHERE spam = 0 ORDER BY edited DESC LIMIT ".$settings['latest_postings'].")) AS ent
INNER JOIN ".$db_settings['forum_table']." AS entries ON ent.id = entries.id
ORDER BY orderTime DESC LIMIT ".$settings['latest_postings']);

Erstelle aber bitte vorher ein Backup der betroffenen Dateien. Ich habe den Query zwar bei mir getestet, dabei aber nicht das Forum sondern phpMyAdmin genutzt. Falls ich beim anpassen der Tabellennamen irgenwo einen Fehler gemacht habe, und du das unbesehen und ohne Backup einbaust, würde dein Forum hinterher nicht mehr funktionieren.

Bitte gib hier eine Rückmeldung über das Ergebnis deiner Arbeiten ab.

Tschö, Auge

--
Trenne niemals Müll, denn er hat nur eine Silbe!


Complete thread:

 RSS Feed of thread