Webboard

Pełna wersja: dane z hookow w innej funkcji
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
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ąć.