Piszemy własną wtyczkę do MyBB

Piszemy własną wtyczkę do MyBB

Witam! Z pewnością część z Was prowadzi, prowadziła lub będzie prowadzić w przyszłości jakieś forum internetowe. Jednym z popularnych dzisiaj CMSów jest MyBB. Goły skrypt forum nie zawsze dostarcza nam wszystkiego, co chcielibyśmy widzieć na naszej stronie. Jednym z rozwiązań jest znalezienie odpowiedniego pluginu w internecie, lecz nie zawsze znajdzie się wtyczka, która zaspokoiłby nasze potrzeby. Co wtedy? Ano wtedy napiszemy sobie ją sami ;)

Sam miałem często taki problem jak opisany powyżej. Nie było wtyczki do MyBB, która spełniałaby wymagane przeze mnie funkcje. Postanowiłem napisać ją sobie samemu, lecz jak tylko zobaczyłem dokumentację MyBB, a właściwie jej brak to ręce mi opadły. Niedawno jednak postanowiłem się przemóc i spróbować. Dobrą metodą poznania zasady działania systemu rozszerzeń w MyBB okazało się otworzenie kodu źródłowego pluginu realizującego podobne zadanie do tego, który sam chciałem napisać i przeanalizowanie linijka po linijce co tam się właściwie dzieje. Jako, że naprawdę ciężko znaleźć w google jakichś sensownych informacji na temat pisania rozszerzeń do tego popularnego skryptu forum postanowiłem napisać ten poradnik i podzielić się z Wami moją wiedzą. Nie ukrywam, że dobrze by było, gdybyście znali przynajmniej podstawy PHP lub umieli programować w jakimś innym języku, aczkolwiek postaram się napisać ten artykuł tak, aby nawet laik zrozumiał w czym rzecz i może nawet zainteresował się programowaniem ;) Zaczynajmy więc!

Na początek…

Aby móc pisać plugin i jakoś go testować wypadałoby postawić sobie jakieś czyste forum na serwerze lub lokalnym komputerze z zainstalowanym np. XAMPPem.

XAMPP to darmowe oprogramowanie pozwalające postawić sobie w szybki i prosty sposób serwer na domowym komputerze. W celu uruchomienia takiego serwera wchodzimy na https://www.apachefriends.org/pl/index.html , a następnie ściągamy paczkę instalacyjną dla naszego systemu operacyjnego. Instalator jest bardzo prosty, konfigurować nic nie trzeba. Po zainstalowaniu uruchamiamy sobie panel kontrolny XAMPPa i uruchamiamy Apache oraz MySQL. Pliki instalacyjne wrzucamy do folderu htdocs znajdującego się tam, gdzie zainstalowaliśmy XAMPPa. Teraz możemy wejść na http://localhost/ i zainstalować sobie MyBB jak na normalnym serwerze www.

Jak już mamy działające forum to wchodzimy do folderu ./inc/plugins/ i w nim tworzymy plik *.php z nazwą naszego pluginu. W moim przypadku będzie to “mojplugin.php”.

Wymagane podstawy

Jedną z pierwszych rzeczy, które musimy zrobić to zabezpieczenie przed bezpośrednim wykonywaniem naszego skryptu przez użytkownika. W tym celu w naszym nowym pustym pliku wpisujemy następujący kod:

Co robi powyższy kod? Otóż w każdym głównym pliku MyBB (np. index.php, showthread.php) zdefiniowana jest stała IN_MYBB. Każdy załączany później plik (np. plugin) ma dostęp do owej stałej. Ten kod sprawdza właśnie, czy stała IN_MYBB jest zdefiniowana w kodzie. Znak ! oznacza negację, tak więc jeśli IN_MYBB jest niezdefiniowane to interpreter zakończy wykonywanie skryptu z napisem “Direct initialization […]”.

Teraz musimy wpisać w plik podstawowe informacje o naszym pluginie oraz funkcje, które MyBB powinno wykonać w celu zainstalowania, odinstalowania, aktywowania lub dezaktywowania naszego pluginu. Służą do tego następujące funkcje:

  • nazwaPluginu_info() – wymagana
  • nazwaPluginu_install() – opcjonalna
  • nazwaPluginu_uninstall() – opcjonalna
  • nazwaPluginu_activate() – opcjonalna
  • nazwaPluginu_deactivate() – opcjonalna

MyBB rozpoznaje również funkcję nazwaPluginu_is_installed(), która sprawdza, czy nasz plugin jest zainstalowany (zwraca wartość logiczną np. prawdę, kiedy znajdzie w bazie danych tabelę, która została stworzona przez nasz plugin przy instalacji).

Oczywiście zamiast nazwaPluginu musimy wpisać nazwę naszego pliku *.php. W moim przypadku będzie to np. mojplugin_info()

Teraz musimy uzupełnić informacje o naszym pluginie. Funkcja nazwaPluginu_info() powinna zwracać tablicę asocjacyjną z następującymi kluczami:

  • name – nazwa pluginu,
  • description – opis pluginu,
  • website – strona www pluginu,
  • author – autor pluginu,
  • authorsite – strona www autora,
  • version – wersja pluginu,
  • guid – ang. Globally Unique Identifiers – Unikalny identyfikator pluginu, który owtrzymasz, jeśli wstawisz swoje dzieło na oficjalną stornę z modami do MyBB. Pozwala to użytkownikom sprawdzać, czy mają najnowszą wersję pluginu. Jeśli nie chcesz wysyłąć pluginu na mods.mybb.com, zostaw w tym polu pusty ciąg.
  • compatibility – kompatybilność naszego pluginu z odpowiednimi wersjami MyBB (np. jeśli wpiszemy tam “16*” to nasz plugin będzie kompatybilny z wszystkimi wersjami MyBB z numerkiem 1.6.x)

Po dopisaniu do naszego kodu funkcji odpowiedzialnej za przekazanie informacji o pluginie powinien on wyglądać tak:

Instalacja / deinstalacja pluginu

Niektóre pluginy mogą działać bez instalacji. Wystarczy je tylko aktywować z panelu admina i plugin już działa. Inne z kolei wymagają instalacji. Z czego to wynika? Załóżmy, że mamy plugin, który do każdego postu w MyBB dokleja na sztywno zdefiniowany ciąg oraz plugin realizujący funkcję czatu. Ten drugi musi wgrać do bazy danych swoje tabele, w których będzie przechowywał dane takie jak wpisy na czacie, lista zbanowanych użytkowników itp. Ten pierwszy zaś nie musi trzymać w bazie żadnych danych. Oddzielenie instalacji/deinstalacji od aktywacji/deaktywacji jest bardzo pomocne w sytuacji, kiedy chcemy np. na jakiś czas wyłączyć czat nie tracąc przez to wszystkich napisanych na nim do tej pory wpisów. Poniżej przedstawię przykładową realizację kodu do instalacji/deinstalacji pluginu.

 

W czym tkwi haczyk?

Nasz plugin potrafi się już przedstawić, zainstalować oraz odinstalować z poziomu ACP. Najwyższa pora, aby zaczął spełniać pewne funkcje. Niech napisany przez nas plugin zacznie pokazywać 10 najnowszych użytkowników na naszym forum. Pierwsze co musimy zrobić to zdefiniować sobie funkcję, która pobierze z bazy 10 najnowszych użytkowników, sformatuje ich nicki, wygeneruje linki, sformatuje datę rejestracji, a następnie zapisze wynik swojej pracy do zmiennej $nowiUzytkownicy. Niech nasza funkcja nazywa się mojplugin_get_new_users(). Jednak skrypt forum wciąż nie wie co z nią zrobić. W MyBB istnieje coś takiego jak system haków (ang. hooks). Pozwala to podczepić samemu napisaną funkcję pod wybrany fragment kodu całego forum, w którym ma się ona wykonać. Pełną listę hooków można zobaczyć tutaj: http://docs.mybb.com/1.8/development/plugins/hooks/

W kolumnie “Params” niektóre hooki mają podaną jakąś zmienną. Jest to zmienna, która jest przekazywana jako argument przez MyBB do naszej funkcji.

Ok, wiemy już co to są hooki, ale jak ich używać? Jest to bardzo proste. Wybieramy sobie w którym miejscu ma wykonywać się nasz kod (np. niech będzie na początku każdej strony w MyBB). W tym celu wybieramy sobie hooka o nazwie “global_start” i podpinamy pod niego naszą funkcję w następujący sposób:

Teraz, żeby nie przeciągać i niepotrzebnie się rozpisywać przedstawie kod funkcji realizującej te zadania z wyczerpującymi komentarzami :)

Pora trochę poustawiać ;)

Byłoby świetnie, gdyby w naszym pluginie dało się zmieniać ustawienia z poziomu ACP. Możemy oddać użytkownikowi możliwość zmiany np. liczby wyświetlanych najnowszych użytkowników z 10 na jakąś inną wartość. W tym celu musimy w funkcjach odpowiedzialnych za instalację, deinstalację oraz sprawdzenie, czy plugin jest zainstalowany umieścić następujący kod:

Następnie musimy odrobinę przerobić kod naszej głównej funkcji. Po pierwsze musimy dodać do zmiennych globalnych funkcji zmienną $mybb:

Po drugie zamieniamy linijkę, w której określamy ilość wyników zwracanych z bazy na:

Właśnie dlatego musieliśmy dodać $mybb do zmiennych globalnych. Obiekt ten zawiera w sobie tablicę ‘settings’, w której znajdują się wszystkie ustawienia.

Cały kod

Po tym wszystkim cały kod naszego pluginu powinien wyglądać tak:

Kilka słów na koniec

Po pierwsze to gratulacje, jeżeli udało Ci się przebrnąć przez cały ten artykuł. Mam nadzieję, że pomoże Ci on w pisaniu własnych modów do MyBB oraz zmotywuje do dalszego rozwijania swoich umiejętności na własną rękę. Jeśli wyrazicie taką chęć w komentarzach, to w przyszłości postaram się napisać drugą część tego poradnika, a w niej zamieścić informacje bardziej zaawansowane takie jak np. obsługa języków, dodawanie własnych zakładek w ACP itp.

Dodam tutaj jeszcze listę ciekawych linków, które są bardzo pomocne przy pisaniu pluginów do MyBB:

Jeśli poznanie systemu pisania pluginów do MyBB nie sprawiło Ci żadnego problemu mimo, że wcześniej nie wiedziałeś jak to robić to polecam w przyszłości zainteresować się również pisaniem pluginów dla WordPressa. Jest to bardzo podobne do pisania dla MyBB z tą różnicą, że WordPress ma lepszą dokumentację ;)

PS. W tym okienku do wyświetlania kodu PHP nie wyświetlają się wcięcia. Mam nadzieję, że nie spowoduje to ogromnego spadku czytelności kodu.

Ocena: 4.39/5 (głosów: 75)

Podobne posty

8 komentarzy do “Piszemy własną wtyczkę do MyBB

  • Dokumentację należy umieć czytać. Dokumentacja nie jest z reguły zbiorem przykładów i opisów działania funkcji.

    MyBB jest raczej CMS’em dla początkujących. Wymagające fora na MyBB długo nie pociągną.

    “Z pewnością część z Was prowadzi, prowadziła lub będzie prowadzić w przyszłości jakieś forum internetowe.” – ee. wróżką jesteś, czy co?

    Odpowiedz
    • Mimo to jakieś minimalne informacje na oficjalnej stronie o liście dostępnych funkcji oraz tym jakie parametry przyjmują by się przydały. Czytałeś dokumentację C++, Pythona lub PHP? Zobacz, że tam to wszystko jest i to jest dobra dokumentacja, bo po co programista ma szukać Bóg wie gdzie przydatnych informacji, jak powinien mieć to na wyciągnięcie ręki w dokumentacji, w końcu po to ona jest. MyBB daje radę też na nieco większych forach (np. http://www.gta-five.pl).

      PS. Tak, jestem wróżką, skąd wiedziałeś?

      Odpowiedz
    • I jeszcze jedno: “MyBB jest raczej CMS’em dla początkujących. Wymagające fora na MyBB długo nie pociągną.” – co Ci się tu nie zgadza z artykułem? Jest napisany dla początkujących, którzy chcą rozszerzyć możliwości MyBB. Ja osobiście uważam MyBB za bardzo dobry CMS.

      Odpowiedz
      • Programista powinien umieć czytać każdą dokumentację.
        Poza tym w dokumentacji mybb jest bardzo ładnie opisane tworzenie własnego pluginu.

        Oczywiście uważam, że początkującym na pewno przyda się twój artykuł. Ale lepszym miejscem dla niego były by fora dla PHP’owców.

        Nie pamiętam czy czytałem oficjalną dokumentację C++ – nie wiem nawet czy takowa istnieje.
        No, ale jeśli programista narzeka na dokumentację zamiast cieszyć się, że w ogóle jakaś jest, to kiepsko. Nie zawsze będziesz miał wszystko podane jak na tacy.

        MyBB jest słabym CMS’em, bardzo kulawo napisanym, chociaż fakt, że ciężko za darmo o coś lepszego.

        Odpowiedz
  • “Z pewnością część z Was prowadzi, prowadziła lub będzie prowadzić w przyszłości jakieś forum internetowe.”

    Też nie jestem pewien czy większość majsterkowiczów poprowadzi kiedykolwiek własne forum ;)

    Odpowiedz

Odpowiedz

anuluj

Masz uwagi?