Zuletzt gesehen
|
Layzee |
Geschrieben am 11. April 2020 12:24:32
|

|
Moin zusammen,
ich glaub ich hab nen Corona-Koller oder sowas.
Ich verzweifle grad an einer doch eigentlich ganz einfachen Funktion.
Es handelt sich um ein "last seen Panel", welches einfach nur die letzten (in diesem Fall) 12 Mitglieder anzeigt, die online sind/waren.
Der Code:
<?php
// Datumsfunktion
function modern_date($timestamp) {
$timeframe = time() - $timestamp;
if ($timeframe <= 10) return "vor wenigen Sekunden";
elseif ($timeframe >= 11 && $timeframe <= 59) return "vor ".$timeframe." Sekunden";
elseif ($timeframe >= 60 && $timeframe <= 3599) return "vor ".ceil($timeframe / 60)." Minuten";
elseif ($timeframe >= 3600 && $timeframe <= 86399) return "vor ".ceil($timeframe / 3600)." Stunden";
elseif ($timeframe >= 86499 && $timeframe <= 604799) return "vor ".ceil($timeframe / 86400)." Tagen";
elseif ($timeframe >= 604800 && $timeframe <= 6048000) return "vor ".ceil($timeframe / 604800)." Wochen";
else return "am ".strftime("%d.%m.%Y", $timestamp);
}
// Datenbankabfrage
$result = dbquery("SELECT user_id, user_name, user_avatar, user_status, user_lastvisit FROM ".DB_USERS." ORDER BY user_lastvisit DESC LIMIT 0,12");
if (dbrows($result)) {
while ($data = dbarray($result)) {
// Variablen setzen
$user_id = $data['user_id'];
$user_name = $data['user_name'];
$user_status = $data['user_status'];
$user_avatar = ((!$data['user_avatar'] || !file_exists(IMAGES."avatars/".$data['user_avatar'])) ? IMAGES."avatars/noavatar100.png" : IMAGES."avatars/".$data['user_avatar']);
$user_class = (($data['user_lastvisit'] < (time() - 80)) ? "user-offline" : "user-online");
$user_lastvisit = modern_date($data['user_lastvisit']);
// Ausgabe
echo profile_link($user_id, "<img align='left' style='margin:5px; width:60px; height:60px; border:1px solid #fff; border-radius:50%;' src='".$user_avatar."' alt='".$data['user_name']."' class='".$user_class." rotate' height='40' width='40' title='".$data['user_name']." ".$user_lastvisit."' />", $user_status)."\n";
}
}
echo "<div style='margin-top:10px; font-size:12px; align:center; text-align:center; color:#ffffff;'>Mitglieder gesamt: ".number_format(dbcount("(user_id)", DB_USERS, "user_status<='1'"))." | ";
$data = dbarray(dbquery("SELECT user_id,user_name FROM ".DB_USERS." WHERE user_status='0' ORDER BY user_joined DESC LIMIT 0,1"));
echo "Neu dabei: <a class='side' style='display:inline; color:#ffffff;' href='".BASEDIR."profile.php?lookup=".$data['user_id']."'>".trimlink($data['user_name'],25)."</a>\n";
echo "</div>";
?>
Das Ganze sieht dann auf der Seite aber SO aus:

Wie man sieht, wird der Online/Offline Status anhand eines kleinen Icons dargestellt, welches aber eigentlich mit in "title" stehen sollte, also erst bei Mouseover angezigt werden soll.
Verantwortlich dafür ist diese Zeile:
echo profile_link($user_id, "<img align='left' style='margin:5px; width:60px; height:60px; border:1px solid #fff; border-radius:50%;' src='".$user_avatar."' alt='".$data['user_name']."' class='".$user_class." rotate' height='40' width='40' title='".$data['user_name']." ".$user_lastvisit."' />", $user_status)."\n";
Jetzt wäre es mir auch noch egal, wenn der Userstatus komplett ausgeblendet werden würde, aber egal wie ich die Ausgabe schreibe, es führt zu einem Fehler auf der Webseite.
Also hab ich jetzt zwei Fragen:
1. bekomme ich das Icon irgendwie IN die Title-Anzeige (erst bei Mouseover) oder wenn nicht, wie nehme ich das korrekt GANZ raus?
Wie gesagt, ich hab irgendwie grad echt nen Durchhänger :)
PHP-Fusion Version: V8 von Krelli (Systemweb)
PHP-Version: 7.1
Danke im Voraus.
Bearbeitet von Layzee am 11. April 2020 12:31:55
|
Information: |
PHP Version: 7.2.x • MySQL Version: 8.0 •  PHP-Fusion: v9 Stable |
|
|
|
Krelli |
Geschrieben am 11. April 2020 18:40:32
|

|
Moin Layzee,
habe das mal durchgespielt und das Problem liegt in deinem Fall zuallererst in der Funktion profile_link in der maincore.php.
Sobald Benutzer deren Profil unsichbar gemacht haben und du in der Funktion statt nur den Usernamen einen kompletten String mit Image-Code usw. mitlieferst, wurde der Benutzername falsch "zensiert" für die gekürzte Ausgabe (beispielsweise S*****)
Du müsstest in der maincore.php die Zeile 1151 von
$user_name = substr($user_name, 0, 1)."*****"; ändern zu
$user_name = str_replace($udata['user_name'], substr($udata['user_name'], 0, 1)."*****", $user_name); Nach dieser Änderung sollte dein Code funktionieren, wenn du im Funktionsaufruf für profile_link(.....) ebenfalls noch alle $data['user_name'] änderst zu $user_name. Schließlich hast du dem Script ja wenige Zeilen oben drüber gesagt, dass du diese Variable festlegst.
Bei mir hat dein Code funktioniert. Mit der vorstehenden Änderung werden übrigens alle Vorkommen des Benutzernamens -falls notwendig- korrekt gekürzt.
Ich werde das exakt so übernehmen, da es durchaus nützlich ist. Diese Änderung kommt also in die Final Version mit rein. |
Information: |
PHP Version: 8.2.x • MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD |
|
|
|
Layzee |
Geschrieben am 11. April 2020 20:00:52
|

|
Hi Krelli,
erstmal Danke für die Antwort und den nicht unwichtigen Hinweis.
Der Code entstand beim "Rumtesten", deshalb waren die Variablen noch nicht vollständig richtig....
Ich habe die von dir genannten Änderungen vorgenommen, leider löst das aber das Problem nicht.
Es geht bei dem Problem um die im roten Rahmen markierten Icos... die müssen entweder weg oder IN den "title" tag:

Ich werd bald kirre damit... |
Information: |
PHP Version: 7.2.x • MySQL Version: 8.0 •  PHP-Fusion: v9 Stable |
|
|
|
Krelli |
Geschrieben am 11. April 2020 21:50:02
|

|
Das sind die FontAweSome Icons. Entweder FAS deaktivieren oder in der maincore.php die profile_link Funktion abändern
Zusammengefügt am 12. April 2020 um 12:36:59:
Tausche doch mal die Funktion profile_link in deiner maincore.php komplett aus mit folgendem Code
// User profile link
function profile_link($user_id, $user_name, $user_status, $class = "profile_link") {
global $locale, $settings, $userdata;
$class = ($class ? $class : ""); $hide_user = false; $online_status = "offline";
$udata = dbarray(dbquery("SELECT * FROM ".DB_USERS." WHERE user_id = '".$user_id."' LIMIT 1"));
$fas_class = false;
if($udata['user_name'] == $user_name && $settings['fontawesome'] == 1) { $fas_class = true; }
// check if online
if ((dbcount("(online_user)", DB_ONLINE, "online_user='".$udata['user_id']."'")) == 1) {
$class .= " status-online";
$online_status = "online";
}
else {
$class .= " status-offline";
}
$hide_user = false;
if(!iADMIN && (IsSet($udata['user_hideme']) && $udata['user_hideme'] == 1)) {
if((!iMEMBER) || (iMEMBER && $userdata['user_id'] != $udata['user_id'])) {
$user_name = str_replace($udata['user_name'], substr($udata['user_name'], 0, 1)."*****", $user_name);
$hide_user = true;
}
}
elseif(!iMEMBER && ($settings['hide_userprofiles'] == "1" || (IsSet($udata['user_hideme']) && $udata['user_hideme'] != 0))) {
$hide_user = true;
}
elseif(iADMIN && (IsSet($udata['user_hideme']) && $udata['user_hideme']==1)) {
$user_name = str_replace($udata['user_name'], $udata['user_name']."*", $user_name);
$hide_user = false;
}
if ((in_array($user_status, array(0, 3, 7)) || checkrights("M"))) {
if(!isset($udata)) {
$link = $user_name;
} else {
if ($udata['user_status'] == "5" || $udata['user_status'] == "6") {
//this will showing that user has gone (anonymized or deactivated)
$user_name = $locale['user_anonymous'];
}
$link = "".($hide_user ? $user_name : ($fas_class ? "<i class='fa fa-user ".$class."' title='".$online_status."'></i>" : "")."<a href='".BASEDIR."profile.php?lookup=".$user_id."' title='".$online_status."'>".$user_name."</a> ");
}
} elseif ($user_status == "5" || $user_status == "6") {
$link = $locale['user_anonymous'];
} else {
$link = $user_name;
}
return "<span style='white-space:nowrap;'>".$link."</span>";
}
Anschließend änderst du deinen Code noch so, dass du den nicht zwansgweise benötigten 4. Parameter für die zu verwendende CSS-Klasse ebenfalls übergibst, hängst demnach hinten noch ein , "" an: profile_link(....... , "")
Bearbeitet von Krelli am 12. April 2020 09:36:59
|
Information: |
PHP Version: 8.2.x • MySQL Version: Nicht ausgewählt •  PHP-Fusion: IPv9-DE-MOD |
|
|
|
Layzee |
Geschrieben am 13. April 2020 07:44:04
|

|
JA VERDAMMT!
Das war's!
Das hat mich wahnsinnig gemacht *lach*
VIELEN LIEBEN DANK KRELLI!
Hast definitiv einen gut bei mir  |
Information: |
PHP Version: 7.2.x • MySQL Version: 8.0 •  PHP-Fusion: v9 Stable |
|
|