Beitragszahl in Benutzerliste (German / Deutsch)

by Taurec, Friday, January 20, 2017, 07:45 (908 days ago)

Hallo!

Ich würde gerne den Benutzerbereich/Benutzerliste etwas aufmotzen, indem ich eine Spalte mit der Anzahl der geschriebenen Beiträge eines Benutzers einfüge. So würde man sehen, wer die eifrigsten Schreiber sind, und ich könnte Karteileichen mit 0 Beiträgen schneller identifizieren und löschen.

Mir scheint, eine solche Funktion ist schon vorhanden, da in den Dateien entsprechende Bereiche auskommentiert sind.

In der user.inc.php um Zeile 130:

// count postings:
if($categories==false) $count_result = @mysqli_query($connid, "SELECT COUNT(*) FROM ".$db_settings['forum_table']." WHERE user_id = ".intval($row['user_id']));
else $count_result = @mysqli_query($connid, "SELECT COUNT(*) FROM ".$db_settings['forum_table']." WHERE user_id = ".intval($row['user_id'])." AND category IN (".$category_ids_query.")");
list($postings) = mysqli_fetch_row($count_result);
mysqli_free_result($count_result);
$userdata[$i]['postings'] = $postings;
$userdata[$i]['postings'] = $row['postings'];

In der user.inc.tpl in Zeile 42, um den Spaltentitel zu aktivieren:

<th><a href="index.php?mode=user{if $search_user_encoded}&amp;search_user={$search_user_encoded}{/if}&amp;order=postings&amp;descasc={if $descasc=="ASC" && $order=="postings"}DESC{else}ASC{/if}&amp;ul={$ul}" title="{#order_linktitle#}">{#user_postings#}</a>{if $order=="postings" && $descasc=="ASC"}&nbsp;<img src="{$THEMES_DIR}/{$theme}/images/asc.png" alt="[asc]" width="5" height="9" />{elseif $order=="postings" && $descasc=="DESC"}&nbsp;<img src="{$THEMES_DIR}/{$theme}/images/desc.png" alt="[desc]" width="5" height="9" />{/if}</th>

Und in Zeile 53, um den Spalteninhalt/die Beitragszahl anzuzeigen:

<td><span class="small">{if $row.postings>0}<a href="index.php?mode=user&amp;action=show_posts&amp;id={$row.user_id}">{$row.postings}</a>{else}{$row.postings}{/if}</span></td>

Die Kommentierung zu entfernen (wie oben) führt aber nur dazu, daß eine leere Spalte angezeigt wird.

Habe ich etwas übersehen oder funktioniert das einfach nicht?
Läßt sich die Beitragszahl auf andere Weise in der Benutzerliste einblenden?

Gruß
Taurec

Avatar

Beitragszahl in Benutzerliste

by Auge ⌂ @, Friday, January 20, 2017, 09:10 (908 days ago) @ Taurec

Hallo

Ich würde gerne den Benutzerbereich/Benutzerliste etwas aufmotzen, indem ich eine Spalte mit der Anzahl der geschriebenen Beiträge eines Benutzers einfüge. So würde man sehen, wer die eifrigsten Schreiber sind, und ich könnte Karteileichen mit 0 Beiträgen schneller identifizieren und löschen.

Das halte ich für ein nachvollziehbares Anliegen. Wobei das Löschen von nach bestimmten Kriterien als unbenutzt geltenden Accounts ja auch aus dem Adminbereich heraus auf Knopfdruck möglich ist.

Mir scheint, eine solche Funktion ist schon vorhanden, da in den Dateien entsprechende Bereiche auskommentiert sind.

In der user.inc.php um Zeile 130:
...
Die Kommentierung zu entfernen (wie oben) führt aber nur dazu, daß eine leere Spalte angezeigt wird.

Habe ich etwas übersehen ...

Ja. Der Abschnitt aus der user.inc.php bezieht sich nicht auf die Benutzerliste, sondern auf die Ansicht der Daten einzelner Benutzer.

... oder funktioniert das einfach nicht?
Läßt sich die Beitragszahl auf andere Weise in der Benutzerliste einblenden?

Grundsätzlich ja, aber an den für diese Ansicht relevanten Stellen existiert bisher kein Code. Meiner Meinung nach gehört die Anzahl der Beiträge für den von dir avisierten Zweck auch dorthin und nicht in die Ansicht für den einzelnen Benutzer. Allerdings würde es mir persönlich nicht gefallen, die Anzahl der Beiträge jedes Benutzers jedem auf die Benutzerliste Zugriffsberechtigten verfügbar zu machen. Das artet schnell in einen Wettbewerb, wer denn die meisten Beiträge hat, aus. Also sollte diese Info den Forenteams vorbehalten sein.

Ich möchte momentan keine neuen Funktionen einfügen und stattdessen dafür sorgen, dass die Version 2.4.0 fertig wird. Du kannst die Erweiterung für dich natürlich gerne vornehmen, auch ohne meine obigen Überlegungen für den Zugriff auf diese Informationen zu berücksichtigen. Der Codeblock, mit dem die Benutzerliste erstellt wird, findet sich in der user.inc.php weiter vorne, ab ca. Zeile 25.

  switch($action)
   {
    case 'main':
      // …

Die Abfragen für die Benutzerliste selbst finden sich im aktuellen Code(!) ab Zeile 77. Dort stehen die Abfragen für die Benutzerliste mit und ohne Suchbegriff.

Beide Queries müssen um einen Subquery erweitert werden. Aus …

SELECT ".$db_settings['userdata_table'].".user_id, user_name, user_type, user_email, email_contact, user_hp, user_lock

… wird …

SELECT ".$db_settings['userdata_table'].".user_id, user_name, user_type, user_email, email_contact, user_hp, user_lock, (SELECT COUNT(*) FROM ".$db_settings['forum_table']." WHERE user_id = ".$db_settings['userdata_table'].".user_id) AS countpostings

Damit hast du schon einmal die Daten. Den Einbau in das Template user.inc.tpl mit der Übergabe des Werts an das Array $userdata in der Schleife while($row = mysqli_fetch_array($result)) und die Anpassung des Templates selbst bekommst du hin?

Tschö, Auge

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

Beitragszahl in Benutzerliste

by Taurec, Friday, January 20, 2017, 13:07 (908 days ago) @ Auge

Vielen Dank!

Hat geklappt, trotz meiner nur oberflächlichen PHP-Kenntnisse

Damit hast du schon einmal die Daten. Den Einbau in das Template user.inc.tpl mit der Übergabe des Werts an das Array $userdata in der Schleife while($row = mysqli_fetch_array($result)) und die Anpassung des Templates selbst bekommst du hin?

Mit dieser Zeile habe ich in der Schleife den Wert übergeben:

$userdata[$i]['countpostings'] = $row['countpostings'];

In der user.inc.tpl sieht Zeile 42 jetzt so aus:

<th><a href="index.php?mode=user{if $search_user_encoded}&amp;search_user={$search_user_encoded}{/if}&amp;order=countpostings&amp;descasc={if $descasc=="ASC" && $order=="countpostings"}DESC{else}ASC{/if}&amp;ul={$ul}" title="{#order_linktitle#}">{#user_postings#}</a>{if $order=="countpostings" && $descasc=="ASC"}&nbsp;<img src="{$THEMES_DIR}/{$theme}/images/asc.png" alt="[asc]" width="5" height="9" />{elseif $order=="countpostings" && $descasc=="DESC"}&nbsp;<img src="{$THEMES_DIR}/{$theme}/images/desc.png" alt="[desc]" width="5" height="9" />{/if}</th>
 


Und Zeile 53:

<td><span class="small">{if $row.countpostings<1}{$row.countpostings}{else}<a href="index.php?mode=user&amp;action=show_posts&amp;id={$row.user_id}">{$row.countpostings}</a>{/if}</span></td>

Die Beitragszahlen werden als Link zur Beitragsliste des Benutzers richtig angezeigt.

Um die Spalte aber auch sortierbar zu machen, mußte ich in der user.inc.php in Zeile 68 in die Anweisung

     if($order!='user_id' && $order!='user_name' && $order!='user_email' && $order!='user_type' && $order!='registered' && $order!='logins' && $order!='last_login' && $order!='countpostings' && $order!='user_lock' && $order!='user_hp' && $order!='email_contact' && $order!='online') $order='user_name';

noch die Bedingung $order!='countpostings' einfügen.

Die Sortierung dauert einige Sekunden. Offenbar muß die Software bei 560 Nutzern, deren Beiträge gezählt und sortiert werden müssen, ziemlich herumrechnen. Ist also mit Vorsicht zu genießen.

Gruß
Taurec

RSS Feed of thread
powered by my little forum