dane z hookow w innej funkcji

Założony przez nad3jf.

Więc tak z góry uprzedzam, że nie wiedziałem gdzie napisać ten temat i jeśli napisałem w złym dziale to przepraszam i proszę o przeniesienie.

Chciałbym się zapytać czy można korzystać z danych z jednego hooka w drugim. Tzn ktoś składa raport i z odpowiedniego hooka wybieram kto, jakie jego powód i w jakim poście. A potem przykładowo chciałbym wykorzystać w innym hooku te dane.
możesz sprecyzować ?
podaj nazwę haka #1 i jakie dane wyciągasz ( skąd ), a potem nazwę haka #2 i co tu chcesz zrobić
może niepotrzebne jest to pytanie, bo dane z H1 masz w H2 z założenia, a jak nie, to możesz się posłużyć globalami ... jak zrozumiałeś - zastosuj, jak nie - odpisz i opisz sytuację ;)
W zasadzie to teraz chodzi mi o hooka report_do_report_start. I przykładowo wiem, że mogę wyciągnąć jaki użytkownik raportował i powód. Powód to będzie $mybb->input['reason']; I chodzi mi żebym mógł w innym hooku użyć tego powodu. Przykładowo aby dopisać co kolwiek do posta, który był raportowany.
możliwe, że nie do końca rozumiesz jak to się kręci ;)
haki hakami, ale to co masz dostępne, jest dostępne w obrębie jednego wywołania skryptu ( są jeszcze inne możliwości, ale to nas tutaj raczej nie dotyczy )
tak więc:
  • wysyłasz raport ( aka. zgłaszasz post ), klikając w "Zgłoś post"
  • zostaje wywołany skrypt report.php
  • ze względu na ukryty input o nazwie "action" z wartością "do_report" skrypt "wie", że ma dokonać zgłoszenia
  • teraz Ty, w hooku report_do_report_start masz dostępne dane na temat zgłoszenia, w report_do_report_end zapewne dostępne jest to samo, a chyba lepiej tutaj się podpiąć, bo skrypt już sprawdzi, czy zgłoszenie jest poprawne ( sprawdź, czy mam rację ;) )
  • chcesz coś dopisać do raportowanego postu - ale podczas tego wywołania skryptu nie ma dostępnego haka, który by treść tego postu udostępniał, pozwalał na jej zmianę i pozostawienie skryptowi by ją zapisał, tak więc ...
  • mając dostępne wszelkie dane z $mybb->input, musisz sam pobrać treść postu z bazy, zmodyfikować ją w wybrany przez siebie sposób i wysłać tak zmodyfikowaną treść z powrotem do bazy
... jak widzisz, nie ma hop ziup ;) trzeba samemu popisać czasem, żeby móc coś zrobić
No tak ale czy przykładowo mógłbym wykorzystać ten powód w innej funkcji ? Chodzi mi np. dodając coś do szablonu czy coś takiego ? Wtedy wystarczy zrobić $reason = $mybb->input['reason']; i zmienną reason dać globalną czy po prostu bez zapisywania tego w zmiennej ? Chodzi mi o samą teorię tego nie konkretne działanie :)
Nie, zbytnio nie możesz wykorzystać powodu w innej funkcji.
To znaczy mija się z celem zapisywanie powodu i danych o poście do jakiegoś pliku/bazy a potem drugą funkcją wczytywanie.

SR podsunął Ci bardzo dobre rozwiązanie. Dodałbym tylko do ostatniego jego punktu, że w MyBB jest klasa odpowiedzialna za forsowanie postów (tematów) i lepiej użyć jej, niż samemu w bazie grzebać. Skoro jest, to używajmy, bo wiadomo, że zawsze (póki funkcje nie zmienią nazwy, a to mało prawdopodobne - raczej dobywa niż zmienia/usuwa) będzie full-compatible. ;)

Jednym słowem jeżeli nadal nie ogarniasz, to podaj KONKRETNY przykład co chcesz zrobić.
@ nad3jf
nie ma sensu przepisywanie do $reason i robienie tej zmiennej globalną, ponieważ $mybb już taką jest
jeżeli chcesz mi powiedzieć "ale potem w $mybb->input['reason'] już nic nie ma" to ja tylko dopowiem, że potem, to i w $reason nic nie będzie, bo zmienna przestanie istnieć po zakończeniu wykonywania skryptu ( o czym pisałem już wcześniej )

przyszło mi do głowy nieco dziwne rozwiązanie, mające jeden feler, ale może na Twoje potrzeby wystarczy
zacznę od przykładu - jeżeli w tabeli users dodasz jedno pole, to w mybb podczas wykonywania skryptu to pole będzie od razu widoczne ( globalnie )
koniec przykładu
nie wiem, czy podobnie jest z postami, ale być może wystarczy dodać pole reason do tabeli z postami ( posts ? ) i przy parsowaniu postów sprawdzać, czy coś takiego jak $post['reason'] istnieje, jak istnieje to robisz swoje ( czyli przy zgłaszaniu wpisujesz w to pole powód, a potem podczas parsowania coś z nim zrobisz ), jak nie, to ... robisz tak, jak to opisaliśmy z Victorem wcześniej
a jaki to miało by mieć feler - maksymalnie jeden komunikat zgłoszenia ^_^ każdy kolejny nadpisywał by poprzedni, chyba że sobie z tym jakoś poradzisz ( a da się ;) tylko czy jest sens tak się bawić )

jak napisał Victor, bez konkretów, to raczej będziemy tutaj błądzić i podawać setki niepotrzebnych sposobów na wykorzystanie tego powodu, ale być może żaden nie będzie godzien uwagi w Twoim przypadku

@ Victor
nazwa może się nie zmienić, ale lista parametrów owszem ;) to taki wniosek po przejrzeniu dokumentacji zawartej w plikach MyBB - nie miała wiele wspólnego z faktyczną listą parametrów wywołania

faktem jest, że nie napisałem jak się dobrać do postów, bo jak do tej pory się nimi nie zajmowałem i nie specjalnie kojarzę dotyczące ich funkcje ^_^ ale nie zmienia to faktu, że będzie to droga db→php→db, a czy w php napiszemy własny skrypt łączący się z bazą, czy wykorzystamy gotowy obiekt $db czy skorzystamy jeszcze z czegoś innego ... to już zupełnie inna sprawa i oczywiście, że lepiej wykorzystywać gotowe API
No cóż serdecznie Wam dziękuje, myślę że na razie rozwialiście moje wątpliwości. Jeśli jednak czegoś nie będę pewien to napiszę. Temat można już zamknąć.


Użytkownicy przeglądający ten wątek:

1 gości