Seite 1 von 1

Multiple ANzeige in der Wer ist onlie liste

Verfasst: 09.05.2025 23:26
von chris1278
Hallo. Ich bin gerade dabei eine neue Erweiterung zu programieren.

Ich habe dafür drei Routings in der entsprechenden yml datei angelegt.

Bei dem ersten Routing funktioniert das aber sobald ich die anderen seiten aufrufe steht immer forenübersicht.

Ich meine wenn man in der Forenindex auf den schriftzug wer ist online klickt sieht man ja immer wer gerade was macht.

Ich habe das so probiert:

Code: Alles auswählen

public function add_seite1_viewonline($event)
{
	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite1' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite1.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE1');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite1');
	}
}

public function add_seite2_viewonline($event)
{
	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite2' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite2.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE2');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite2');
	}
}

public function add_seite3_viewonline($event)
{	
	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite3' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite3.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE3');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite3');
	}
}


genau so wie so:

Code: Alles auswählen

public function add_seite1_viewonline($event)
{
	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite1' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite1.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE1');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite1');
	}

	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite2' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite2.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE2');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite2');
	}
	
	if ($event['row']['session_page'] === 'app.' . $this->phpEx . '/seite3' ||
		$event['row']['session_page'] === 'app.' . $this->phpEx . '/seite3.php')
	{
			$event['location'] = $this->language->lang('VIEWONLINE_SEITE3');
			$event['location_url'] = $this->helper->route('chris1278_ext_seite3');
	}
}
Falls mir da jemand ein tip geben kann was ich da falsch gemacht habe. Oder evtl. eine Extension kennt die auch mehrer routing seiten hat und in der wer ist online liste richtig ausgegeben wird. Dafür wäre ich erstmal sehr dankbar.

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 10.05.2025 23:24
von chris1278
Ich habe es gelöst bekommen.

Also folgendes Problem bestand.

Da ich die Routing Links mit Parameter benutz, habe so nach dem aufbau hier:

xyz/seite1.php?mode=1...usw hat dies nicht funktioniert.

Ich habe das ganze jetzt so umgebaut:

Code: Alles auswählen

if (strpos($event['row']['session_page'], 'seite1') == true || strpos($event['row']['session_page'], 'seite1.php') == true)
{
	$event['location'] = $this->language->lang('VIEWONLINE_SEITE1');
	$event['location_url'] = $this->helper->route('chris1278_ext_seite1');
}
else if (strpos($event['row']['session_page'], 'seite2') == true || strpos($event['row']['session_page'], 'seite2.php') == true)
{
	$event['location'] = $this->language->lang('VIEWONLINE_SEITE2');
	$event['location_url'] = $this->helper->route('chris1278_ext_seite2');
}
else if (strpos($event['row']['session_page'], 'seite3') == true || strpos($event['row']['session_page'], 'seite3.php') == true)
{
	$event['location'] = $this->language->lang('VIEWONLINE_SEITE3');
	$event['location_url'] = $this->helper->route('chris1278_ext_seite3');
}

Damit wird eben geprüft, ob die besagte Zeichenfolge in dem String enthalten ist. Also Beispiel:

Der String hat den Inhalt: Hallo, die Welt ist schön!

Jetzt wird einfach geprüft, ob in dem String sagen wir mal als Beispiel das Wort Welt enthalten ist. Ist der Eintrag enthalten gibt es true aus und der Eintrag wird in die wer ist online Liste geschleust.

Dann spielt es keine Rolle, was vor dem gesuchten Eintrag steht oder dahinter.


Die Variante, die ich vorher hat, funktioniert eben nur mit den absoluten angaben.

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 18:35
von IMC
Hi Chris,

du nutzt die Funktion strpos() um zu ermitteln ob ein String in einem anderen String enthalten ist. Die Funktion gibt, wenn der String enthalten ist, die Position des gesuchten String zurück. Dies ist ein Integerwert grösser, gleich 0. Bei einen Vergleich mit true kann es vorkommen das es zu einer Fehlerhaften Auswertung kommt wenn der gesuchte String an Position 0 ist, da dies in deinem Vergleich als false ausgewertet wird.

Sicherer ist es wenn ein strikten Vergleich mit false durchgeführt wird. false wird von der Funktion immer zurück gegeben wenn der gesuchte String nicht gefunden wird. Der strikte Vergleich mit !== ist wichtig damit die 0 nicht als false interpretiert wird.
Hier ein Beispiel:

Code: Alles auswählen

if (strpos($event['row']['session_page'], 'seite1') !== false)
{
	...........
}
Ab php 8 gibt es zu diese Zweck die Funktion str_contains().

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 21:03
von chris1278
Okay, ich sollte also eher prüfen, ob der Wert nicht false ist.

Was das str_contains()angeht so hab ich mir das mal angeschaut. Ich denke, das ist hierfür durchaus eher geeignet.

Werde das mal umbauen.

@edit.

Hab das jetzt so umgebaut und funktioniert.

Code: Alles auswählen

if (str_contains($event['row']['session_page'], 'seite1') !== false)
{
	$event['location']		= $this->language->lang('VIEWONLINE_SEITE1');
	$event['location_url']	= $this->helper->route('chris1278_ext_seite1');
}
else if (str_contains($event['row']['session_page'], 'seite2') !== false)
{
	$option	= substr($event['row']['session_page'], strpos($event['row']['session_page'], '?'));

	$event['location']		= $this->language->lang('VIEWONLINE_SEITE2');
	$event['location_url']	= $this->helper->route('chris1278_ext_seite2') . $option;
}
else if (str_contains($event['row']['session_page'], 'seite3') !== false)
{
	$option	= substr($event['row']['session_page'], strpos($event['row']['session_page'], '?'));

	$event['location']		= $this->language->lang('VIEWONLINE_SEITE3');
	$event['location_url']	= $this->helper->route('chris1278_ext_seite3') . $option;
}
Dafür mus ich natürlich auch die php min. Version auf >=8.0.0 setzen. Sonst könnte das Fehler geben.

Alter nativ könnte ich natürlich in der listner eine Bedingung einbauen, dass die anzeige in der wer ist online liste nur geladen wird, wenn die php Version eben 8.0 oder höher ist. Dann könnte die Extension auch bei 7.1 bis kleiner als 8.0 lauen halt ohne die anzeige bei wer ist online. Mal schauen.

Also im Prinzip dann so:

Code: Alles auswählen

if (phpbb_version_compare(PHP_VERSION, '8.0.0', '>='))
{
	echo 'php passt';
}
Dann würde dies nur ausgeführt, wenn eben php 8.0 oder höher ist.

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 21:26
von IMC
Nein, so wie ich es vorgeschlagen habe.

Code: Alles auswählen

if (strpos($event['row']['session_page'], 'seite1') !== false)
{
	...........
}
Damit hast du die Bedingung immer erfüllt wenn "seite1" in $event['row']['session_page'] vorkommt.
Die zweite Bedingung mit "seite1.php" kannst du weg lassen da diese in der ersten Abfrage nach "seite1" schon enthalten ist.

Der Vergleich strpos($event['row']['session_page'], 'seite1') === true kann nicht funktionieren da strpos() kein true zurück gibt.

Mit === oder !== werde nicht nicht nur die Werte verglichen sondern auch der Type der Variablen.

0 !== false gibt true zurück
5 !== false gibt true zurück
false !== false gibt false zurück

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 21:29
von chris1278
Schau nochmal nach ich hab das anders gemacht eigentlich so wie du vorgeschlagen hast.

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 21:34
von IMC
Sehr gut. Dein Edit war noch nicht da als ich meinen Beitrag schrieb.

Re: Multiple ANzeige in der Wer ist onlie liste

Verfasst: 07.06.2025 22:12
von chris1278
Alles gut.