MyBB.de Forum
Location Variable - Druckversion

+- MyBB.de Forum (https://www.mybb.de/forum)
+-- Forum: Anpassungen (https://www.mybb.de/forum/forum-47.html)
+--- Forum: Plugin-Entwicklung (https://www.mybb.de/forum/forum-74.html)
+--- Thema: Location Variable (/thread-35013.html)



Location Variable - BatemansAxe - 11.09.2017

URL zum Forum https://throughtheashes.de
Welche Styles nutzt du? Default (angepasst)
Hast du Plugins installiert? Thread Description & View Groups
Welche MyBB-Version benutzt du? 1.8.12
Welche PHP-Version benutzt du? 7.1.6-nmm1
Welche Datenbank benutzt du? (mit Version) MySQLi 5.7.15
Hast du ein Update/Upgrade durchgeführt? Serverseitig ja.
Hast du dein MyBB Forum von einer anderen Boardsoftware konvertiert? Nein.
Seit wann tritt das Problem auf? unklar, da noch nicht aufgefallen bisher.
Wird eine Fehlermeldung ausgegeben? Nein.

Hallo!

(ich hätte dasgern im Bereich "Programmierung" gepostet, da mein Anliegen hier nicht hingehört. Aber noch hab ich keine 10 Beiträge. Also muss ich das hier los werden.)

Ich habe eine eigene Seite erstelt. So wie die Anleitung bei "Häufig gestellte Fragen". Ich wollte damit einen Link generieren, der den Usern eine Übersicht zeigt, welcher User gerade WO online ist. Folgenden Code habe ich dafür gebastelt:

Code:
<html>
<head>
<title>{$settings['bbname']} - Stalker</title>
{$headerinclude}
</head>
<body>
{$header}
<table border="0" cellspacing="{$theme['borderwidth']}" cellpadding="{$theme['tablespace']}" class="tborder">
<tr>
<td class="thead" colspan="3"><strong>Stalker</strong></td>
</tr>
<tr>
<td class="tcat" align="center"><a href="online.php?sortby=username"><span class="smalltext"><strong>{$lang->on_username}</strong></span></a></td>
<td class="tcat" align="center"><a href="online.php?sortby=time"><span class="smalltext"><strong>{$lang->time}</strong></span></a></td>
<td class="tcat" width="50%"><a href="online.php?sortby=location"><span class="smalltext"><strong>{$lang->location}</strong></span></a></td>
</tr>
{$online_rows}
<tr>
<td class="tfoot" colspan="3" align="right"><span class="smalltext"><strong><a href="online.php?action=today">{$lang->online_today}</a> | <a href="online.php">{$lang->refresh_page}</a></strong></span></td>
</tr>
</table>
</td>
</tr>
</table>
{$footer}
</body>
</html>

Das Ergebnis: "Stalker" eigene Seite

Wie sie sehen, sehen sie nichts. Die Variablen sind wahrscheinlich falsch. Irgendwas greift da nicht. Nach 2 Stunden herum probieren, komme ich immer wieder auf das gleiche Ergebnis. Nüscht.

Hätte jemand eine Lösung?


RE: Location Variable - StefanT - 11.09.2017

Hast du die Variablen in deiner PHP-Datei überhaupt definiert?


RE: Location Variable - BatemansAxe - 11.09.2017

Nein, ich habe die Variablen aus der Templategruppe "Who Is Online" aus dem einzelnen Template "online" entnommen. Deshalb dachte ich, das wäre schon irgendwo hinterlegt.

Zugegeben, das Definieren von Variablen geht ein bisschen tiefer in die Materie, als ich Ahnung hab.

Ebenfalls bin ich meine Plugins nochmal durchgegangen. Ich habe auch "Anzeigen der Mitglieder in den letzten 24 Stunden" von Mr. Brechreiz installiert, aber nicht aktiviert. Letzteres habe ich dann mal durchprobiert, aber dann wird auch nichts angezeigt. Hätte ja sein können, dass die Templategruppe zu diesem Plugin gehört.

Wie müsste ich vorgehen, um die angesprochenen Variablen korrekt zu definieren?


RE: Location Variable - BatemansAxe - 13.09.2017

Gut ich habe mir selbst geholfen. Ist vielleicht nicht alles sauber, aber es scheint jetzt laienhaft zu funktionieren.

Einziges Problem, was ich habe:

Es wird die falsche Uhrzeit angezeigt. Da sind 2 Stunden dazwischen. Wenn es eigentlich 10 Uhr ist, steht dort 8 Uhr.

Wie könnte ich das ändern?


RE: Location Variable - StefanT - 13.09.2017

Bei was wird die Uhrzeit falsch angezeigt?


RE: Location Variable - BatemansAxe - 13.09.2017

"Stalker" - eigene Seite


RE: Location Variable - StefanT - 13.09.2017

Ohne den Code deiner eigenen Seite kann ich dir leider nicht sagen, was darin falsch ist. Wink


RE: Location Variable - BatemansAxe - 13.09.2017

Gut, dachte nämlich auch, dass das Zeitformat einfach nur falsch eingestellt ist. Aber selbst wenn ich es in der Konfiguration ändere, passiert nichts^^

Code:
<?php
define("IN_MYBB", 1);
//define("NO_ONLINE", 1); // Wenn Seite nicht in Wer ist online-Liste auftauchen soll

require("global.php");

add_breadcrumb("Stalker");
define("IN_MYBB", 1);
define('THIS_SCRIPT', 'online.php');

$templatelist = "online,online_row,online_row_ip,online_today,online_today_row,online_row_ip_lookup,online_refresh,multipage,multipage_end,multipage_start";
$templatelist .= ",multipage_jump_page,multipage_nextpage,multipage_page,multipage_page_current,multipage_page_link_current,multipage_prevpage";

require_once "./global.php";
require_once MYBB_ROOT."inc/functions_post.php";
require_once MYBB_ROOT."inc/functions_online.php";
require_once MYBB_ROOT."inc/class_parser.php";
$parser = new postParser;

// Load global language phrases
$lang->load("online");

if($mybb->usergroup['canviewonline'] == 0)
{
error_no_permission();
}

// Make navigation

if($mybb->get_input('action') == "today")
{
add_breadcrumb($lang->nav_onlinetoday);

$plugins->run_hooks("online_today_start");

$threshold = TIME_NOW-(60*60*24);
$query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}'");
$todaycount = $db->fetch_field($query, "users");

$query = $db->simple_select("users", "COUNT(uid) AS users", "lastactive > '{$threshold}' AND invisible = '1'");
$invis_count = $db->fetch_field($query, "users");

if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1)
{
$mybb->settings['threadsperpage'] = 20;
}

// Add pagination
$perpage = $mybb->settings['threadsperpage'];

if($mybb->get_input('page', MyBB::INPUT_INT) > 0)
{
$page = $mybb->get_input('page', MyBB::INPUT_INT);
$start = ($page-1) * $perpage;
$pages = ceil($todaycount / $perpage);
if($page > $pages)
{
$start = 0;
$page = 1;
}
}
else
{
$start = 0;
$page = 1;
}

$query = $db->simple_select("users", "*", "lastactive > '{$threshold}'", array("order_by" => "lastactive", "order_dir" => "desc", "limit" => $perpage, "limit_start" => $start));

$todayrows = '';
while($online = $db->fetch_array($query))
{
$invisiblemark = '';
if($online['invisible'] == 1)
{
$invisiblemark = "*";
}

if($online['invisible'] != 1 || $mybb->usergroup['canviewwolinvis'] == 1 || $online['uid'] == $mybb->user['uid'])
{
$username = format_name(htmlspecialchars_uni($online['username']), $online['usergroup'], $online['displaygroup']);
$online['profilelink'] = build_profile_link($username, $online['uid']);
$onlinetime = my_date($mybb->settings['timeformat'], $online['lastactive']);

eval("\$todayrows .= \"".$templates->get("online_today_row")."\";");
}
}

$todaycount = my_number_format($todaycount);
$invis_count = my_number_format($invis_count);

if($todaycount == 1)
{
$onlinetoday = $lang->member_online_today;
}
else
{
$onlinetoday = $lang->sprintf($lang->members_were_online_today, $todaycount);
}

if($invis_count)
{
$string = $lang->members_online_hidden;

if($invis_count == 1)
{
$string = $lang->member_online_hidden;
}

$onlinetoday .= $lang->sprintf($string, $invis_count);
}

$multipage = multipage($todaycount, $perpage, $page, "online.php?action=today");

$plugins->run_hooks("online_today_end");

eval("\$today = \"".$templates->get("online_today")."\";");
output_page($today);
}
else
{
$plugins->run_hooks("online_start");

// Custom sorting options
if($mybb->get_input('sortby') == "username")
{
$sql = "u.username ASC, s.time DESC";
$refresh_string = "?sortby=username";
}
elseif($mybb->get_input('sortby') == "location")
{
$sql = "s.location, s.time DESC";
$refresh_string = "?sortby=location";
}
// Otherwise sort by last refresh
else
{
switch($db->type)
{
case "sqlite":
case "pgsql":
$sql = "s.time DESC";
break;
default:
$sql = "IF( s.uid >0, 1, 0 ) DESC, s.time DESC";
break;
}
$refresh_string = '';
}

$timesearch = TIME_NOW - $mybb->settings['wolcutoffmins']*60;

// Exactly how many users are currently online?
switch($db->type)
{
case "sqlite":
$sessions = array();
$query = $db->simple_select("sessions", "sid", "time > {$timesearch}");
while($sid = $db->fetch_field($query, "sid"))
{
$sessions[$sid] = 1;
}
$online_count = count($sessions);
unset($sessions);
break;
case "pgsql":
default:
$query = $db->simple_select("sessions", "COUNT(sid) as online", "time > {$timesearch}");
$online_count = $db->fetch_field($query, "online");
break;
}

if(!$mybb->settings['threadsperpage'] || (int)$mybb->settings['threadsperpage'] < 1)
{
$mybb->settings['threadsperpage'] = 20;
}

// How many pages are there?
$perpage = $mybb->settings['threadsperpage'];

if($mybb->get_input('page', MyBB::INPUT_INT) > 0)
{
$page = $mybb->get_input('page', MyBB::INPUT_INT);
$start = ($page-1) * $perpage;
$pages = ceil($online_count / $perpage);
if($page > $pages)
{
$start = 0;
$page = 1;
}
}
else
{
$start = 0;
$page = 1;
}

// Assemble page URL
$multipage = multipage($online_count, $perpage, $page, "online.php".$refresh_string);

// Query for active sessions
$query = $db->query("
SELECT DISTINCT s.sid, s.ip, s.uid, s.time, s.location, u.username, s.nopermission, u.invisible, u.usergroup, u.displaygroup
FROM ".TABLE_PREFIX."sessions s
LEFT JOIN ".TABLE_PREFIX."users u ON (s.uid=u.uid)
WHERE s.time>'$timesearch'
ORDER BY $sql
LIMIT {$start}, {$perpage}
");

// Fetch spiders
$spiders = $cache->read("spiders");

while($user = $db->fetch_array($query))
{
$plugins->run_hooks("online_user");

// Fetch the WOL activity
$user['activity'] = fetch_wol_activity($user['location'], $user['nopermission']);

$botkey = my_strtolower(str_replace("bot=", '', $user['sid']));

// Have a registered user
if($user['uid'] > 0)
{
if(empty($users[$user['uid']]) || $users[$user['uid']]['time'] < $user['time'])
{
$users[$user['uid']] = $user;
}
}
// Otherwise this session is a bot
else if(my_strpos($user['sid'], "bot=") !== false && $spiders[$botkey])
{
$user['bot'] = $spiders[$botkey]['name'];
$user['usergroup'] = $spiders[$botkey]['usergroup'];
$guests[] = $user;
}
// Or a guest
else
{
$guests[] = $user;
}
}

// Now we build the actual online rows - we do this separately because we need to query all of the specific activity and location information
$online_rows = '';
if(isset($users) && is_array($users))
{
reset($users);
foreach($users as $user)
{
$online_rows .= build_wol_row($user);
}
}
if(isset($guests) && is_array($guests))
{
reset($guests);
foreach($guests as $user)
{
$online_rows .= build_wol_row($user);
}
}

// Fetch the most online information
$most_online = $cache->read("mostonline");
$record_count = $most_online['numusers'];
$record_date = my_date('relative', $most_online['time']);

// Set automatic refreshing if enabled
if($mybb->settings['refreshwol'] > 0)
{
$refresh_time = $mybb->settings['refreshwol'] * 60;
eval("\$refresh = \"".$templates->get("online_refresh")."\";");
}

$plugins->run_hooks("online_end");

eval("\$Stalker = \"".$templates->get("Stalker")."\";");
output_page($Stalker);
}

Der Code ist aus der php-Datei "online.php" kopert. Ich weiß, stalker.php braucht das meiste wahrscheinlich gar nicht. Aber ich bin unsicher, was ich raus löschen kann und was nicht. Deshalb lasse ich es zunächst einfach so.


RE: Location Variable - StefanT - 13.09.2017

Wenn die Uhrzeit überall falsch ist, liegt das an der Konfiguration. Für Gäste gilt die im Admin-CP eingestellt Zeitzone, für Benutzer findet sich die Einstellungen im Benutzer-CP.


RE: Location Variable - BatemansAxe - 13.09.2017

Ach das muss ich extra einstellen im Benutzer CP...okay. Ja, geht bei vielen Dingen so. Die Software ist wirklich ziemluch "individuell". Fluch und Segen zugleich Wink

Ich danke dir!

Thema erleigt.