Seite 2 von 3

Verfasst: 12.02.2007 16:00
von Richi2
ok, hier sind sie!

viewtopic

viewtopic_body

ich hoffe du kannst mir damit helfen!


MFG

Verfasst: 12.02.2007 16:11
von Richi2
und hier ist die datei von dem who_is_online thema!

page_header

also manchmal klappt es, da steht dann auch da, 1 mitglied im forum!

aber öfters steht da, 0 mitglieder im forum!

aber kannst dir nochmal die datei anschauen!

MFG

Danke

Verfasst: 12.02.2007 16:32
von gn#36
Tja den Fehler habe ich schon mal gefunden, er resultiert aus der Verwendung von gleichen Variablennamen in der page_header.php und in der viewtopic.php. Der Übeltäter heißt $total_posts. Im page_header steht er für die Anzahl der Posts im Forum, während das im viewtopic.php für die Anzahl der darzustellenden Posts steht. Da der page_header allerdings nach der Festlegung des Inhalts von $total_posts in der viewtopic.php aufgerufen wird resultiert daraus, dass die Variable die Anzahl der Posts im gesamten Forum enthält. Dann wird eine Schleife durchlaufen mit $total_posts als Anzahl der Durchläufe wobei jedes mal ein Post ausgegeben wird.(Gut dass ich nicht auf die Idee gekommen bin das Skript in einer Backupversion meines Forums mit 14.000 Beiträgen zu testen...).
Abhilfe:
Da ich nicht weiß, in wie vielen anderen Dateien ein ähnliches Problem auftreten könnte werden wir den neu eingefügten Code ändern und zur Sicherheit (und weil ich das ziemlich einfach finde) alles in eine Funktion packen.
Finde also in der page_header.php

Code: Alles auswählen

//
	// If you don't use these stats on your index you may want to consider
	// removing them
	//
ersetze durch

Code: Alles auswählen

function show_online_box_everywhere()
{
global $lang, $images,$template;
//
	// If you don't use these stats on your index you may want to consider
	// removing them
	//
Finde dann

Code: Alles auswählen

$template->assign_vars(array(
		'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>'), 

		'FORUM_IMG' => $images['forum'],
		'FORUM_NEW_IMG' => $images['forum_new'],
		'FORUM_LOCKED_IMG' => $images['forum_locked'],

		'L_FORUM' => $lang['Forum'],
		'L_TOPICS' => $lang['Topics'],
		'L_REPLIES' => $lang['Replies'],
		'L_VIEWS' => $lang['Views'],
		'L_POSTS' => $lang['Posts'],
		'L_LASTPOST' => $lang['Last_Post'], 
		'L_NO_NEW_POSTS' => $lang['No_new_posts'],
		'L_NEW_POSTS' => $lang['New_posts'],
		'L_NO_NEW_POSTS_LOCKED' => $lang['No_new_posts_locked'], 
		'L_NEW_POSTS_LOCKED' => $lang['New_posts_locked'], 
		'L_ONLINE_EXPLAIN' => $lang['Online_explain'], 

		'L_MODERATOR' => $lang['Moderators'], 
		'L_FORUM_LOCKED' => $lang['Forum_is_locked'],
		'L_MARK_FORUMS_READ' => $lang['Mark_all_forums'], 

		'U_MARK_READ' => append_sid("index.$phpEx?mark=forums"))
	);
und füge dahinter

Code: Alles auswählen

}
show_online_box_everywhere();
ein.
Eigentlich sollte das das Problem beheben.
EDIT: Der andere Fehler mit der falschen Anzahl an Users Online taucht bei mir nicht auf...
Allerdings hast du meine Anweisungen im anderen Thema offenbar nicht 100% exakt befolgt, denn etwas, das vor einer schließenden Klammer ( } ) stehen sollte steht bei deinem Code dahinter. Dass daher der Fehler kommt glaube ich aber nicht, da die Zugehörige IF Abfrage so oder so keinerlei Wirkung mehr hat. Für das zukünftige Modden wäre es aber sehr sinnvoll wenn du die Anweisungen exakter ausführst, denn es kann durchaus einen Unterschied machen ob ein Code konditional oder immer ausgeführt wird.

Verfasst: 12.02.2007 16:48
von Richi2
wenn ich jetzt das im page_header.php änder kommt dann:

parse error: ...\page_header.php on line 336

was muss da jetzt noch geändert werden?


MFG

Verfasst: 12.02.2007 16:53
von gn#36
Dann hast du was falsch gemacht beim Einbau... ich vermute mal dass das jetzt an der fehlplatzierten schließenden Klammer liegt...
Zeig mal die Datei her.
Und die Fehlermeldung bitte auch(Zeilennummer)!

Verfasst: 12.02.2007 16:57
von Richi2
hier

page_header

MFG

Danke für deine ganten bemühungen!

Verfasst: 12.02.2007 17:06
von gn#36
Entschuldige, in meiner Anweisung fehlte ein Semikolon:

Code: Alles auswählen

show_online_box_everywhere();
statt

Code: Alles auswählen

show_online_box_everywhere()
:oops:

Verfasst: 12.02.2007 17:11
von Richi2
ist doch überhaupt nicht schlimm!

wir sind doch alle nur Menschen! :wink:

Aber kannst du dir das nochmal wegen dem who_is_online anschauen!

bei mir steht manchmal auch wenn eher selten 1 benutzer ist im forum,

öfters steht immernoch 0 mitglieder im forum!

aber das ganze ist nur wenn ich in einen beitrag reingehe oder halt in eine kategorie! mit der index seite ist soweit alles ok!

was kann hier noch ein fehler sein?

MFG

Verfasst: 12.02.2007 17:37
von gn#36
EDIT: Zur besseren Übersicht: Das zugehörige andere Thema findet sich hier
Oha, diese Modifikation hat anscheinend so ihre Tücken...
Dieser Fehler liegt daran, dass der Code für das Viewonline nicht allein für die Anzeige des Viewonlines auf dem Index zuständig ist, sondern ebenfalls für die in den einzelnen Foren. Ob gerade ein Forum aufgerufen ist, wird abgefragt und wenn ja dann die Abfrage auf dieses Forum beschränkt. Somit zeigt die Viewonline Anzeige auch immer nur die Personen an, die im Forum sind. Da das mit der Session zusammenhängt und die nicht ständig aktualisiert wird ergeben sich da wohl mal ab und zu Differenzen. Um das zu beheben sind ein paar andere Veränderungen nötig, Moment.

EDIT:So, schwere Geburt...
Diese Modifikation funktioniert so nur korrekt, wenn du das auch tatsächlich im overall_header.tpl einbaust, es wird NICHT in jeder beliebigen Datei funktionieren. Das liegt daran, dass das eben noch von anderen Dingen verwendet wird.
Als erstes verschieben wir den Start der Funktion ein wenig nach vorne:
finde

Code: Alles auswählen

if (defined('SHOW_ONLINE'))
{
direkt dahinter kommt

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; 
Als nächstes den alten Funktionsstart löschen.
Also weg mit

Code: Alles auswählen

function show_online_box_everywhere()
{
global $lang, $images,$template; 
Dann muss noch eine kleine Modifikation im Code her:
Finde

Code: Alles auswählen

//
		// If you don't use these stats on your index you may want to consider
		// removing them
		//
DAVOR einfügen:

Code: Alles auswählen

if(!$forum_id)
	{
finde

Code: Alles auswählen

show_online_box_everywhere();
DAVOR einfügen finde DAVOR einfügen

Code: Alles auswählen

if(isset($forum_id)&& defined('SHOW_ONLINE') && $forum_id)
{
	$logged_visible_online = 0;
	$logged_hidden_online = 0;
	$guests_online = 0;
	$online_userlist = '';
	$l_online_users = '';
	show_online_box_everywhere($forum_id,true);
	$template->assign_vars(array(
		'TOTAL_USERS_ONLINE' => $l_online_users,
		'LOGGED_IN_USER_LIST' => $online_userlist,
		));
}
So, wie man sieht etwas komplizierter, ich hoffe ich habe jetzt keine Änderungen, die ich vorgenommen hatte vergessen. Wenn doch wirst du das vermutlich merken...

Verfasst: 12.02.2007 21:22
von Richi2
jo, also vielen dank!

ich hoffe das ist nun endgültig alles und das es keine Probleme mehr gibt!

also vielen dank für deine bemühungen!


MFG