User Online auch in Viewforum und Viewtopic anzeigen

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag von Shauku »

Ich will das Script nicht aus dem Header ausbauen!?!?
Ich will auf Viewtopicebene die Daten ausgeben. Auf Index und Viewforumebene funktioniert das ja bereits. Deswegen denke ich, das es am intelligentesten ist, die viewtopic.php zu modifizieren.

Die Daten im Header dürften Standarddaten sein. Deswegen versteh ich nicht so ganz, warum die so wichtig sind. Aber bitte :D .

Hier der Ausschnitt aus der Pageheader:

Code: Alles auswählen

if (defined('SHOW_ONLINE'))
{

function show_online_box_everywhere($forum_id=0,$display_forum=false)
{
   if(!$display_forum)
   {
      unset($forum_id);
   }
global $lang, $images,$template,$theme,$userdata,$board_config,$db;
global $logged_visible_online,$logged_hidden_online,$guests_online,$online_userlist,$l_online_users;


	$user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : '';
	$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_ip
		FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
		WHERE u.user_id = s.session_user_id
			AND s.session_time >= ".( time() - 300 ) . "

		ORDER BY u.username ASC, s.session_ip ASC";
	if( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
	}

	$userlist_ary = array();
	$userlist_visible = array();

	$prev_user_id = 0;
	$prev_user_ip = $prev_session_ip = '';

	while( $row = $db->sql_fetchrow($result) )
	{
		// User is logged in and therefor not a guest
		if ( $row['session_logged_in'] )
		{
			// Skip multiple sessions for one user
			if ( $row['user_id'] != $prev_user_id )
			{
				$style_color = '';
				if ( $row['user_level'] == ADMIN )
				{
					$row['username'] = '<b>' . $row['username'] . '</b>';
					$style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
				}
				else if ( $row['user_level'] == MOD )
				{
					$row['username'] = '<b>' . $row['username'] . '</b>';
					$style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
				}

				if ( $row['user_allow_viewonline'] )
				{
					$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>';
					$logged_visible_online++;
				}
				else
				{
					$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>';
					$logged_hidden_online++;
				}

				if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN )
				{
					$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link;
				}
			}

			$prev_user_id = $row['user_id'];
		}
		else
		{
			// Skip multiple sessions for one user
			if ( $row['session_ip'] != $prev_session_ip )
			{
				$guests_online++;
			}
		}

		$prev_session_ip = $row['session_ip'];
	}
	$db->sql_freeresult($result);

	if ( empty($online_userlist) )
	{
		$online_userlist = $lang['None'];
	}
	$online_userlist = ( ( isset($forum_id) ) ? $lang['Browsing_forum'] : $lang['Registered_users'] ) . ' ' . $online_userlist;

	$total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online;

	if ( $total_online_users > $board_config['record_online_users'])
	{
		$board_config['record_online_users'] = $total_online_users;
		$board_config['record_online_date'] = time();

		$sql = "UPDATE " . CONFIG_TABLE . "
			SET config_value = '$total_online_users'
			WHERE config_name = 'record_online_users'";
		if ( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Could not update online user record (nr of users)', '', __LINE__, __FILE__, $sql);
		}

		$sql = "UPDATE " . CONFIG_TABLE . "
			SET config_value = '" . $board_config['record_online_date'] . "'
			WHERE config_name = 'record_online_date'";
		if ( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, 'Could not update online user record (date)', '', __LINE__, __FILE__, $sql);
		}
	}

	if ( $total_online_users == 0 )
	{
		$l_t_user_s = $lang['Online_users_zero_total'];
	}
	else if ( $total_online_users == 1 )
	{
		$l_t_user_s = $lang['Online_user_total'];
	}
	else
	{
		$l_t_user_s = $lang['Online_users_total'];
	}

	if ( $logged_visible_online == 0 )
	{
		$l_r_user_s = $lang['Reg_users_zero_total'];
	}
	else if ( $logged_visible_online == 1 )
	{
		$l_r_user_s = $lang['Reg_user_total'];
	}
	else
	{
		$l_r_user_s = $lang['Reg_users_total'];
	}

	if ( $logged_hidden_online == 0 )
	{
		$l_h_user_s = $lang['Hidden_users_zero_total'];
	}
	else if ( $logged_hidden_online == 1 )
	{
		$l_h_user_s = $lang['Hidden_user_total'];
	}
	else
	{
		$l_h_user_s = $lang['Hidden_users_total'];
	}

	if ( $guests_online == 0 )
	{
		$l_g_user_s = $lang['Guest_users_zero_total'];
	}
	else if ( $guests_online == 1 )
	{
		$l_g_user_s = $lang['Guest_user_total'];
	}
	else
	{
		$l_g_user_s = $lang['Guest_users_total'];
	}

	$l_online_users = sprintf($l_t_user_s, $total_online_users);
	$l_online_users .= sprintf($l_r_user_s, $logged_visible_online);
	$l_online_users .= sprintf($l_h_user_s, $logged_hidden_online);
	$l_online_users .= sprintf($l_g_user_s, $guests_online);
}
Benutzeravatar
metty84
Mitglied
Beiträge: 159
Registriert: 08.03.2007 13:13
Wohnort: Marienberg
Kontaktdaten:

Beitrag von metty84 »

erstma sorry dasses so lang gedauert hat aber ich hab spontan nen kleinen kurzurlaub in polen eingeschoben

also ich habs mir mal angekukt und dieser teil hier

Code: Alles auswählen

function show_online_box_everywhere($forum_id=0,$display_forum=false) 
{ 
   if(!$display_forum) 
   { 
      unset($forum_id); 
   } 
global $lang, $images,$template,$theme,$userdata,$board_config,$db; 
global $logged_visible_online,$logged_hidden_online,$guests_online,$online_userlist,$l_online_users; 
kommt mir sehr komisch vor den erstens kommt er in meinem script net vor und zweitens könnte dieser teil auch für die fehler verantwortlich sein den wen die funktion show_online_box_everywhere angesprochen wird, wird vom header die forenid "gelöscht" damit hat alles was in der seite nach dem der header eingebunden wurde keinerlei zugrif mehr auf diese daten. also nimm es einfach mal raus und probiere obs funzt die forenid wird mit den von mir vorgegebenen änderungen die du ja schon gemacht hast garnichtmehr in der whosonlineanzeige berücksichtigt also kann der teil auch raus

auserdem fehlt da irgendo ne klammer wen du den teil so rausnimmst hauts aber wieder hin
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag von Shauku »

Das war ein Fix: http://www.phpbb.de/viewtopic.php?t=142 ... c&start=20
(da fehlt also keine Klammer :) ).

Aber ich hab grad gesehen, das meine eigentliche page_header.php an der Stelle anders aussieht (auf meinem Testboard sind anscheinend schon ein paar andere Sachen eingebaut, tut mir leid). Das dürfte jetzt aber wirklich Standard sein:
if (defined('SHOW_ONLINE'))
{

$user_forum_sql = ( !empty($forum_id) ) ? "AND s.session_page = " . intval($forum_id) : '';
$sql = "SELECT u.username, u.user_id, u.user_allow_viewonline, u.user_level, s.session_logged_in, s.session_ip
FROM ".USERS_TABLE." u, ".SESSIONS_TABLE." s
WHERE u.user_id = s.session_user_id
AND s.session_time >= ".( time() - 300 ) . "
/*----------------------------------------$user_forum_sql----------------------------------------*/
ORDER BY u.username ASC, s.session_ip ASC";
if( !($result = $db->sql_query($sql)) )
{
message_die(GENERAL_ERROR, 'Could not obtain user/online information', '', __LINE__, __FILE__, $sql);
}

$userlist_ary = array();
$userlist_visible = array();

$prev_user_id = 0;
$prev_user_ip = $prev_session_ip = '';

while( $row = $db->sql_fetchrow($result) )
{
// User is logged in and therefor not a guest
if ( $row['session_logged_in'] )
{
// Skip multiple sessions for one user
if ( $row['user_id'] != $prev_user_id )
{
$style_color = '';
if ( $row['user_level'] == ADMIN )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#' . $theme['fontcolor3'] . '"';
}
else if ( $row['user_level'] == MOD )
{
$row['username'] = '<b>' . $row['username'] . '</b>';
$style_color = 'style="color:#' . $theme['fontcolor2'] . '"';
}

if ( $row['user_allow_viewonline'] )
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'>' . $row['username'] . '</a>';
$logged_visible_online++;
}
else
{
$user_online_link = '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=" . $row['user_id']) . '"' . $style_color .'><i>' . $row['username'] . '</i></a>';
$logged_hidden_online++;
}

if ( $row['user_allow_viewonline'] || $userdata['user_level'] == ADMIN )
{
$online_userlist .= ( $online_userlist != '' ) ? ', ' . $user_online_link : $user_online_link;
}
}

$prev_user_id = $row['user_id'];
}
else
{
// Skip multiple sessions for one user
if ( $row['session_ip'] != $prev_session_ip )
{
$guests_online++;
}
}

$prev_session_ip = $row['session_ip'];
}
$db->sql_freeresult($result);

if ( empty($online_userlist) )
{
$online_userlist = $lang['None'];
}
$online_userlist = ( ( isset($forum_id) ) ? $lang['Browsing_forum'] : $lang['Registered_users'] ) . ' ' . $online_userlist;

$total_online_users = $logged_visible_online + $logged_hidden_online + $guests_online;

if ( $total_online_users > $board_config['record_online_users'])
{
$board_config['record_online_users'] = $total_online_users;
$board_config['record_online_date'] = time();

$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = '$total_online_users'
WHERE config_name = 'record_online_users'";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update online user record (nr of users)', '', __LINE__, __FILE__, $sql);
}

$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = '" . $board_config['record_online_date'] . "'
WHERE config_name = 'record_online_date'";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update online user record (date)', '', __LINE__, __FILE__, $sql);
}
}

if ( $total_online_users == 0 )
{
$l_t_user_s = $lang['Online_users_zero_total'];
}
else if ( $total_online_users == 1 )
{
$l_t_user_s = $lang['Online_user_total'];
}
else
{
$l_t_user_s = $lang['Online_users_total'];
}

if ( $logged_visible_online == 0 )
{
$l_r_user_s = $lang['Reg_users_zero_total'];
}
else if ( $logged_visible_online == 1 )
{
$l_r_user_s = $lang['Reg_user_total'];
}
else
{
$l_r_user_s = $lang['Reg_users_total'];
}

if ( $logged_hidden_online == 0 )
{
$l_h_user_s = $lang['Hidden_users_zero_total'];
}
else if ( $logged_hidden_online == 1 )
{
$l_h_user_s = $lang['Hidden_user_total'];
}
else
{
$l_h_user_s = $lang['Hidden_users_total'];
}

if ( $guests_online == 0 )
{
$l_g_user_s = $lang['Guest_users_zero_total'];
}
else if ( $guests_online == 1 )
{
$l_g_user_s = $lang['Guest_user_total'];
}
else
{
$l_g_user_s = $lang['Guest_users_total'];
}

$l_online_users = sprintf($l_t_user_s, $total_online_users);
$l_online_users .= sprintf($l_r_user_s, $logged_visible_online);
$l_online_users .= sprintf($l_h_user_s, $logged_hidden_online);
$l_online_users .= sprintf($l_g_user_s, $guests_online);
}
Davor kommt übrigends das hier:
//
// Get basic (usernames + totals) online
// situation
//
$logged_visible_online = 0;
$logged_hidden_online = 0;
$guests_online = 0;
$online_userlist = '';
$l_online_users = '';
Wozu soll das gut sein, die Werte vorher zu löschen?!

---

Wie dem auch sei. Ich hab mal sowas von keine Ahnung, wie ich das zum laufen bekomme. Alles was ich bis jetzt gesehen (und verstanden) habe, deutet eigentlich darauf hin, dass es eigentlich schon gehen müsste. :cry:
Benutzeravatar
metty84
Mitglied
Beiträge: 159
Registriert: 08.03.2007 13:13
Wohnort: Marienberg
Kontaktdaten:

Beitrag von metty84 »

da ham wir ja das problem! hau den fix raus und mache es so wie ich es gepostet hab und es wird funktionieren

mein vorschlag ist zwar die quick & dirty variante aber du willst ja sowieso überall alle user anzeigen lassen und nicht nur in bestimmten bereichen von daher brauchst du keinen fix der dieses feature erweitert sondern einen der es aushebelt und fertig

achso nimm diese zeile mal komplet raus

Code: Alles auswählen

/*----------------------------------------$user_forum_sql----------------------------------------*/ 
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag von Shauku »

metty84 hat geschrieben:da ham wir ja das problem! hau den fix raus und mache es so wie ich es gepostet hab und es wird funktionieren
Den Fix gibt es doch garnicht und es funktioniert trotzdem nicht...
metty84 hat geschrieben:mein vorschlag ist zwar die quick & dirty variante aber du willst ja sowieso überall alle user anzeigen lassen und nicht nur in bestimmten bereichen von daher brauchst du keinen fix der dieses feature erweitert sondern einen der es aushebelt und fertig
Aber es funktioniert doch nicht, so wie du es beschrieben hast. Es geht nicht!
metty84 hat geschrieben:achso nimm diese zeile mal komplet raus

Code: Alles auswählen

/*----------------------------------------$user_forum_sql----------------------------------------*/ 
Diese Zeile ändert G_A_R_N_I_C_H_T_S .

---

Ich freu mich wirklich, dass du versuchst mir zu helfen. Ich hab auch dringend hilfe nötig :D . Aber wir reden aneinander vorbei. Wir sollten nochmal ganz von Anfang an anfangen 8) .

Ich will die who is online Anzeige auf:
- der Index-Ebene
- der Viewforum-Ebene
- der Viewtopic-Ebene
darstellen. Dazu habe ich die *.TPL Dateien bereits entsprechend abgeändert.
Auf Index-Ebene wird die Anzeige bereits Standardmässig angezeigt.
Auf Viewforum-Ebene wird die Anzeige durch eine modifkation im Header ebenfalls bereits richtig (wie gewollt) angezeigt.
Auf Viewtopic-Ebene wird mir nichts angezeigt, da die Variablen offensichtlich nicht übergeben werden.
Der Header sollte bereits RICHTIG sein, da er ja auf Viewforum-Ebene das richtige ausspuckt.

Entweder es gibt einen Teil im Header, der die Übergabe für die viewtopic verhindert, oder mir fehlt etwas in der viewtopic selber.

Problem: Auf Viewtopic-Ebene funktioniert die who is online Anzeige nicht obwohl sie auf Viewforum-Ebene bereits funktioniert (also offensichtlich RICHTIG per Header übergeben wird). Wo könnte der Fehler stecken und wie umgeh ich ihn?
Benutzeravatar
metty84
Mitglied
Beiträge: 159
Registriert: 08.03.2007 13:13
Wohnort: Marienberg
Kontaktdaten:

Beitrag von metty84 »

achso und ich dachte es werden bugs produziert.

ähm häng mal deine viewforum.php und die pageheader.php an ich kuk se mir mal an
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag von Shauku »

Benutzeravatar
metty84
Mitglied
Beiträge: 159
Registriert: 08.03.2007 13:13
Wohnort: Marienberg
Kontaktdaten:

Beitrag von metty84 »

ganz einfach du hast in der viewtopic vergessen das

Code: Alles auswählen

define('SHOW_ONLINE', true);
einzufügen

(das mus noch vor "include($phpbb_root_path . 'includes/page_header.'.$phpEx);")

das "define('SHOW_ONLINE', true)" "schaltet" die funktion der who is online box ein, also wen dieser teil nicht in der jeweiligen php steht (und das vor dem include des pageheads) ist diese funktion ausgeschalten und kann damit auch nicht ausgegeben werden bzw wird ein leeres ergebnis ausgegeben

das heist auf allen seiten wo dieser codeschnipsel nicht enthalten ist, ist die whos online box ausgeschalten
Benutzeravatar
Shauku
Mitglied
Beiträge: 120
Registriert: 20.11.2006 20:24

Beitrag von Shauku »

:D . Sehr gut. Das wars. Vielen Dank. Jetzt funktioniert fast alles.

Es fehlt noch:
Anzahl Beiträge: XXXX
Registrierte Benutzer: XX
Neuester Benutzer: Mr.XXX
Das ist offensichtlich nicht bei "Show_online" dabei. Hast du eine Ahnung, wie ich das auch noch aktivieren kann? 8)
Benutzeravatar
metty84
Mitglied
Beiträge: 159
Registriert: 08.03.2007 13:13
Wohnort: Marienberg
Kontaktdaten:

Beitrag von metty84 »

must mal kuken ob der code bei dir der selbe ist da ich im moment nur nen oriopnboard zur hand habe wo ich die daten rauskopieren kann vergleiche es also ma mit dem teil in deiner index.php und nim fals etwas abweicht den teil aus deiner index.php

dashier mus du einfügen in der entsprechenden datei

Code: Alles auswählen

//
// If you don't use these stats on your index you may want to consider
// removing them
//
$total_posts = get_db_stat('postcount');
$total_users = get_db_stat('usercount');
$newest_userdata = get_db_stat('newestuser');
$newest_user = $newest_userdata['username'];
$newest_uid = $newest_userdata['user_id'];

if( $total_posts == 0 )
{
	$l_total_post_s = $lang['Posted_articles_zero_total'];
}
else if( $total_posts == 1 )
{
	$l_total_post_s = $lang['Posted_article_total'];
}
else
{
	$l_total_post_s = $lang['Posted_articles_total'];
}

if( $total_users == 0 )
{
	$l_total_user_s = $lang['Registered_users_zero_total'];
}
else if( $total_users == 1 )
{
	$l_total_user_s = $lang['Registered_user_total'];
}
else
{
	$l_total_user_s = $lang['Registered_users_total'];
}
und suche

Code: Alles auswählen

$template->assign_vars(array(
und füge danach ein

Code: Alles auswählen

'TOTAL_POSTS' => sprintf($l_total_post_s, $total_posts),
		'TOTAL_USERS' => sprintf($l_total_user_s, $total_users),
		'NEWEST_USER' => sprintf($lang['Newest_user'], '<a href="' . append_sid("profile.$phpEx?mode=viewprofile&" . POST_USERS_URL . "=$newest_uid") . '">', $newest_user, '</a>'),
und dan halt noch den teil in der tpl einfügen
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“