Seite 1 von 2

core event?

Verfasst: 22.07.2021 17:31
von chris1278
Hallo bei der listener.php steht ja das hier:

Code: Alles auswählen

public static function getSubscribedEvents()
	{
	return array(
		'core.page_header'	=> 'anwendungsskript',
		);
	}
Kann man das selbe event auch für zwei verschiedene mehrmals benutzen ich meine als beispiel etwa so:

Code: Alles auswählen

public static function getSubscribedEvents()
	{
	return array(
		'core.page_header'	=> 'anwendungsskript1',
		'core.page_header'	=> 'anwendungsskript2',
		);
	}
Oder muss immer ein anderes event dort genommen werden.

Gibts da irgendwo vieleicht eine Seite wo man mehr infos bekommt welche Core events es überhaupt gibt. So eine liste welche es gibt und wofür die sind wäre echt super.

Re: core event?

Verfasst: 22.07.2021 17:48
von Dr.Death

Re: core event?

Verfasst: 22.07.2021 17:50
von Kizu
Moin,

meinst du eine Liste wie diese hier?
https://wiki.phpbb.com/Event_List

Die Funktion "anwendungsskript" definierst du ja selber. Ich sehe keinen Sinn darin, dass du zweimal das selbe Event abgreifst, du könntest auch einfach in einer Funktion beide Funktionen durchführen.

MfG, Daniel

Re: core event?

Verfasst: 22.07.2021 18:32
von Kirk
Hi
Das kann man, lies dir mal diesen Beitrag von Luke durch.

Re: core event?

Verfasst: 22.07.2021 19:11
von chris1278
Kirk danke die Info hat geholfen.

Re: core event?

Verfasst: 23.07.2021 00:27
von LukeWCS
Kizu hat geschrieben: 22.07.2021 17:50 Ich sehe keinen Sinn darin, dass du zweimal das selbe Event abgreifst, du könntest auch einfach in einer Funktion beide Funktionen durchführen.
Hängt vom Szenario ab. Nehmen wir folgendes an:

Wir benötigen für mehrere Events mehrere Funktionalitäten, aber nicht für jedes Event alle davon, sondern nur jeweils einen Teil. Für Event 1 brauchen wir Funktionalität A und B, aber nicht C. Für Event 2 brauchen wir Funktionalität B und C, aber nicht A. Und für Event 3 brauchen wir nur C. In so einem Fall teilt man die Funktionalitäten in 3 separate Funktionen auf und definiert entsprechend multiple Hooks pro Event.

Wenn aber alle Funktionalitäten nur für ein einziges Event benötigt werden, ist eine Aufteilung in mehrere Funktionen wenig sinnvoll und man sollte zusammenfassen. Die Wahl der Methode hängt eben vom Szenario ab.

Re: core event?

Verfasst: 23.07.2021 14:37
von Kizu
Moin,
LukeWCS hat geschrieben: 23.07.2021 00:27 Wir benötigen für mehrere Events mehrere Funktionalitäten, aber nicht für jedes Event alle davon, sondern nur jeweils einen Teil. Für Event 1 brauchen wir Funktionalität A und B, aber nicht C. Für Event 2 brauchen wir Funktionalität B und C, aber nicht A. Und für Event 3 brauchen wir nur C. In so einem Fall teilt man die Funktionalitäten in 3 separate Funktionen auf und definiert entsprechend multiple Hooks pro Event.
Ich würde dann vermutlich eher die Funktionalitäten in separate Funktionen auslagern und einfach eine Event-Funktion (oder besser: eine Methode, da wir ja hier von Objekten sprechen) pro Event bauen, die dann die anderen Funktionen aufruft.

MfG, Daniel

Re: core event?

Verfasst: 23.08.2021 07:11
von chris1278
Hi mal eine Frage. Wie man mehrere Publkic functionen mittels aray auf ein und das selbe core event nutzt hab ich schoon nachvollziehen können. Ich habe jetzt eine Extension gemacht wo ich metainformationen in die overall_header_dead_append.html lege und das ganze sollte dann aiuch mit der acp_overall_header_head_append.html im acp funktionieren. Nun hatte ich festgestellt das das core event core.page_header allein nicht ausreicht um auch den gewünschten effekt im acp zu laden. Da die Variabeln aus dem listner.php dort nicht geladen werden. nun habe ich das so gelöst:

Code: Alles auswählen

public static function getSubscribedEvents()
	{
		return array(
			'core.page_header'				=> 	'metainfo',
			'core.adm_page_header'			=> 	'metainfo',
		);
	}
Das funktioniert so wie es soll. Nicht wundern das bei beiden die Funktion metainfo geladen wird, das ist beabsichtig da in beiden event dateien das gleiche steht.

Ist es möglich aus den zwei core events ein einzelnes zu machen bzw. die in einem zusammenzulegen. Ähnlich wie das hier:

Code: Alles auswählen

'core.page_header_after'		=>	array(array('show_randompics'), array('add_randompics')),
Nur das man hier nicht 2 funktionen sondern 2 core events für eine funktion nutzen kann.

Re: core event?

Verfasst: 23.08.2021 08:06
von 69bruno
Was stört dich daran, je event eine Zeile anzugeben ?

Re: core event?

Verfasst: 23.08.2021 10:55
von LukeWCS
Moin
chris1278 hat geschrieben: 23.08.2021 07:11 Ist es möglich aus den zwei core events ein einzelnes zu machen bzw. die in einem zusammenzulegen. Ähnlich wie das hier:
Ich habe mir die entsprechende Core Datei angeschaut, die das assoziative Array von getSubscribedEvents() verarbeitet. Dort sind 3 Varianten pro Event Hook vorgesehen:
  • Der Parameter enthält einen Funktionsnamen (string).
  • Der Parameter enthält ein Array mit Funktionsnamen (string) sowie Priorität (int).
  • Der Parameter enthält ein Array von Arrays.
Alle möglichen Varianten beziehen sich also nur auf den Parameter, nicht auf das Event.

edit:
Wenn man die entsprechende Doku Seite sichtet, findet man auch alle 3 von mir genannten Varianten.
https://area51.phpbb.com/docs/dev/3.2.x ... t-listener

Weitere Überlegung: Beim Event Name wäre sowas rein technisch auch nicht möglich, weil wir hier ein assoziatives Array haben. Also eine Liste mit Schlüsseln und Werten. Der Schlüssel muss immer eindeutig sein, er kann also gar nicht mehrere Varianten enthalten.