Jak używać Event'ów? Jak pobierać i odsyłać z powrotem dane przez event'y?

Forum przeznaczone na rozmowy między autorami rozszerzeń i inne pytania związane z poważniejszą ingerencją w kod phpBB 3.2.x.
mpaw
Posty: 31
Rejestracja: 05 września 2019, 15:40

Jak używać Event'ów? Jak pobierać i odsyłać z powrotem dane przez event'y?

Post autor: mpaw » 14 grudnia 2019, 21:53

Dzień dobry.

Widzę, że jestem pierwszą osobą która tutaj pisze (w tym dziale). Cieszy mnie to i mam nadzieję, że mój wpis przyczyni się do popularyzacji tego subforum i zachęci deweloperów i wolontariuszy bądź amatorów do udzielania się i komentowania :)

Tworzę właśnie mój pierwszy dodatek. Korzystając z phpBB Skeleton Extension wygenerowałem szkielet mojego dodatku. Zaznaczyłem podczas kastomizacji w formularzu, że chcę używać eventów.

Mam jednak problem. Nie wgłębiając się w szczegóły, chcę użyć jednego z eventów, generowanego w funkcji submit_post(). Event nosi nazwę core.submit_post_modify_sql_data. Ale nie wgłębiajmy się w szczegóły. Już piszę o co mi chodzi.

Wiem, że żeby użyć event'a w dodatku, muszę, w pliku listenera event'ów, zarejestrować go tablicy, zwracanej przez funkcję getSubscribedEvents() i powiązać event z moją własną funkcją.

Nie wiem jednak co dalej. Jak mogę pobrać dane z event'a a jak zwrócić je do eventa'a? Czy to w ogóle możliwe? Skoro event nosi nazwę modify, to sugeruje, że można pobrać stare dane z eventa i wstrzyknąć mu nowe dane, zgodnie z wybraną przez siebie intencją i celem. Jak to zrobić?

Dzięki,
Michał.

mpaw
Posty: 31
Rejestracja: 05 września 2019, 15:40

Re: Jak używać Event'ów? Jak pobierać i odsyłać z powrotem dane przez event'y?

Post autor: mpaw » 15 grudnia 2019, 15:50

Aktualizacja:

Już wiem, jak obsłużyć event:
Dla potomnych napiszę całą procedurę. :)
  • Generujemy szkielet dodatku, przy pomocy Extension Skeleton, zaznaczając PHP Events w Contents
  • Rozpakowujemy całe archiwum i wrzucamy cały folder, o nazwie, którą podaliśmy w Vendor Name, od katalogu phpBB/ext/
  • Wchodzimy do tego katalogu i katalogu wewnątrz niego i przechodzimy do /events/main_listener.php i otwieramy go do edycji
  • Znajdujemy funkcję getSubscribedEvents i dodajmy powiązane ze sobą nazwy eventów i funkcje, które mają je obsłużyć
  • Tworzymy wyżej wymienione funkcje z parametrem $event
  • Teraz pozostaje zmodyfikować nasze funkcje, modyfikując obiekt $event wewnątrz tychże funkcji. Zmienna ta, przekazywana jest przez referencje, więc po jej modyfikacji, zmiany będą widoczne wewnątrz funkcji macierzystych phpBB, które wyzwoliły dany event
Mam nadzieję, że komuś to pomoże.
W razie co, proszę o kontakt, gdyby coś było niejasne bądź nieprecyzyjne.

Dzięki
Michał

ODPOWIEDZ