Seite 2 von 4

Verfasst: 16.05.2007 17:16
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);
}

Verfasst: 22.05.2007 16:04
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

Verfasst: 23.05.2007 14:15
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:

Verfasst: 23.05.2007 15:30
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----------------------------------------*/ 

Verfasst: 24.05.2007 17:45
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?

Verfasst: 24.05.2007 22:07
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

Verfasst: 24.05.2007 23:38
von Shauku

Verfasst: 25.05.2007 01:55
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

Verfasst: 25.05.2007 14:53
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)

Verfasst: 25.05.2007 21:32
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