Multiple ANzeige in der Wer ist onlie liste

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3903
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Multiple ANzeige in der Wer ist onlie liste

Beitrag 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.
Benutzeravatar
chris1278
Mitglied
Beiträge: 3903
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag 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.
Benutzeravatar
IMC
Mitglied
Beiträge: 760
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag 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().
Gruß, Thorsten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3903
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag 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.
Benutzeravatar
IMC
Mitglied
Beiträge: 760
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag 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
Zuletzt geändert von IMC am 07.06.2025 21:31, insgesamt 1-mal geändert.
Gruß, Thorsten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3903
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag von chris1278 »

Schau nochmal nach ich hab das anders gemacht eigentlich so wie du vorgeschlagen hast.
Benutzeravatar
IMC
Mitglied
Beiträge: 760
Registriert: 25.11.2018 20:32
Wohnort: Lüneburg
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag von IMC »

Sehr gut. Dein Edit war noch nicht da als ich meinen Beitrag schrieb.
Gruß, Thorsten
Benutzeravatar
chris1278
Mitglied
Beiträge: 3903
Registriert: 12.11.2007 06:20
Wohnort: Euskirchen
Kontaktdaten:

Re: Multiple ANzeige in der Wer ist onlie liste

Beitrag von chris1278 »

Alles gut.
Antworten

Zurück zu „Extension Bastelstube“