yCalendar - plugin dla Wordpressa » yashke.com
Autor: Janu
Tagi: inne — @ 22:30 2006-10-23

Niedawno zaczÄ…Å‚em tworzyć stronÄ™ mojego duszpasterstwa. StwierdziÅ‚em, że nie opÅ‚aca mi siÄ™ programować czegoÅ› zupeÅ‚nie nowego, bo przecież ma być to strona w miarÄ™ prosta, a jedynymi ciekawostkami bÄ™dzie galeria, ksiÄ™ga goÅ›ci i kalendarz wydarzeÅ„ - z tych wÅ‚aÅ›nie powodów wybraÅ‚em mechanizm Wordpressa (alternatywÄ… byÅ‚o użycie engine’u spiffy.content, bÄ…dź kanapy.org). ZnalazÅ‚em odpowiednie narzÄ™dzie do tworzenia galerii, ksiÄ™gÄ™ goÅ›ci chwilowo oparÅ‚em o zwykÅ‚e komentarze (co jest błędem, gdyż wyglÄ…da przez to bardzo “forumowo”). Nie mogÅ‚em jednak wygooglać żadnego pluginu, który tworzyÅ‚by kalendarz wydarzeÅ„. ZapadÅ‚a wiÄ™c szybka decyzja - zrobiÄ™ wÅ‚asny.

Podjąłem tą decyzję w chwili, gdy nie miałem Internetu w mieszkaniu, a do mojej uczelni iść mi się nie chciało (bo duszno w pracowniach). Mając pod ręką jedynie prostą wersję Wordpressa 2.0 + 3 podstawowe pluginy zabrałem się za robotę. Postanowiłem stworzyć najpierw panel administracyjny. Nie wiedziałem, jak stworzyć instalator budujący bazę danych, dlatego napisałem go w czystym SQLu i uruchomiłem z konsoli - rozwiązanie brzydkie, ale w warunkach nieInternetowych optymalne. Potem wziąłem się za lekturę pluginu Akismet, bodajże służącego do ochrony antyspamowej. No i dowiedziałem się, iż:

Warto stworzyć funkcjÄ™ inicjalizujÄ…cÄ… menu administracyjne. Standardem jest chyba nazywanie jej w formie: ‘nazwapluginu_init’, choć tak naprawdÄ™ jest to dowolne, gdyż i tak trzeba poinformować Wordpress’a o tym, jaka funkcja odpowiada za utworzenie menu. SÅ‚uży do tego funkcja add_action, której pierwszym parametrem jest nazwa akcji (przy dodawaniu inicjalizatora menu jest to ‘admin_menu’), a drugim nazwa funkcji odpowiedzialnej za danÄ… akcjÄ™ w pluginie (np. ‘ycalendar_init’). U mnie zatem wyglÄ…da to tak:

add_action('admin_menu', 'ycalendar_init');

Oczywiście warto by było najpierw wcześniej napisać ciało tej funkcji, której nie aplikujemy żadnych argumentów. W ciele tej funkcji budujemy nasze menu administracyjne, tj. tworzymy zakładkę yCalendar wraz z podzakładkami: dodaj wydarzenie i wyświetl listę wydarzeń. Moja funkcja ycalendar_init wygląda tak:

function ycalendar_init() {
if ( function_exists('add_menu_page') && function_exists('add_submenu_page') ) {
add_menu_page(__('yCalendar'), __('yCalendar'), 'edit_posts', __FILE__, 'ycalendar_add_event');
add_submenu_page('ycalendar/ycalendar.php', __('Dodaj zdarzenie'), __('Dodaj zdarzenie'), 6, __FILE__, 'ycalendar_add_event');
add_submenu_page('ycalendar/ycalendar.php', __('Przejrzyj zdarzenia'), __('Przejrzyj zdarzenia'), 6, 'ycalendar/admin_view_events.php', 'ycalendar_view_events');
}
}

Jak Å‚atwo siÄ™ domyÅ›lić add_menu_page tworzy nam zakÅ‚adkÄ™ yCalendar (dlaczego sÄ… dwa takie same argumenty na poczÄ…tku to nie pytajcie, bo nie wiem ;)), którÄ… obsÅ‚ugiwać mogÄ… ludzie z uprawnieniami ‘edit_posts’, czyli bodajże 6 (później używam wartoÅ›ci liczbowych), nastÄ™pnie podajemy skrypt odpowiedzialny za obsÅ‚ugÄ™ tej zakÅ‚adki oraz akcjÄ™ w tej zakÅ‚adce. Natomiast add_submenu_page tworzy podzakÅ‚adki. Parametry: skrypt-matka, nazwa zakÅ‚adki (patrz wyżej), uprawnienia, skrypt i akcja. W drugim wywoÅ‚aniu add_submenu_page jako skrypt obsÅ‚ugujÄ…cy wpisany jest admin_view_events.php (Å›cieżkowanie jest od katalogu plugins), jednak jest to drobne oszustwo, które pomoże w przetwarzaniu formularzy - tak naprawdÄ™ za wszystko odpowiedzialny jest jeden plik.

Skoro utworzyliśmy menu, warto by było dodać pierwszą stronę administracji naszego pluginu. Wg inicjalizatora za stronę odpowiedzialna jest akcja ycalendar_add_event, zatem tworzymy funkcję ycalendar_add_event. Nie będę tu przytaczał treści funkcji, szczególnie, że nie ma tak żadnych ciekawostek technologicznych. Jedyne o czym warto pamiętać, to że administracja Wordpressowa ma własny styl i najlepiej by było się do niego dostosować, tj. komunikaty wyświetlać w divie o id message i klasie updated fade, treści w divie z klasą wrap (choć to pewnie niekoniecznie), a tytuły akcji jako h2. Do tego warto przejrzeć pod względem kodu chociaż jedną stronę z formularzem i jedną z wylistowaniem. Prawie bym zapomniał - do obsługi bazy danych służy obiekt o nazwie wpdb - klasa umieszczona jest w pliku wp-includes/wp-db.php. Z tego co zdążyłem zauważyć większość funkcji używa jej poprzez instrukcję global, a nie przez zmienną _GLOBAL.

Większość formularzy, jeśli nie wszystkie, jako adres skryptu przetwarzającego dane wstawia samego siebie. Warto się dostosować do tego zwyczaju, bo czyni to kod bardziej czytelnym dla innych osób programujących pluginy dla Wordpress, a pewnie i oszczędza linii kodu.

Na samym końcu pozostaje nam stworzyć skrypt do wyświetlania kalendarza. Właściwie to ciekawszego zagadnienia w tym nie ma - ja co prawda spędziłem nad tym sporo czasu, ale tylko i wyłącznie dlatego, że chciałem wygenerować wszystkie pola kalendarza jak najładniejszym kodem. Niestety wyszło wszystko jak zwykle - niezbyt ładnie, choć mam nadzieję czytelnie.

Na koniec chciałbym zachęcić do modyfikowania, ew. rozwijania tego skryptu według własnych potrzeb, oraz, na czym bardziej mi zależy, do komentowania mojego sposobu wykonania tegoż pluginu - co warto zmienić, co się mija z celem. Całość skryptu dostępna jest na licencji CC by-sa 2.5

ÅšciÄ…gnij ycalendar - plugin dla Wordpressa

Tagi: 
Chcesz być na bieżąco? Dodaj yashke.com do swoich RRSów


Komentarze (1)

  1. […] PisaÅ‚em już raz na ten temat, jednak wtedy moje podejÅ›cie do tworzenia pluginu wordpressowego byÅ‚o ekstremalne - jako źródÅ‚o informacji, jak tworzyć wordpressowe pluginy, braÅ‚em źródÅ‚a standardowych pluginów. BiorÄ…c siÄ™ za pisanie yGigs, czyli naszego dziaÅ‚u praca, stwierdziÅ‚em, że skoro już mam swobodny dostÄ™p do internetu, to najpierw poczytam dokumentacjÄ™, a dopiero potem wezmÄ™ siÄ™ za robotÄ™. Tak też zrobiÅ‚em - zaczÄ…Å‚em od pobieżnej lektury strony Writing a Plugin. ZnalazÅ‚em tam informacje, których już wczeÅ›niej siÄ™ domyÅ›laÅ‚em - istnieje API wordpressowe, o caÅ‚kiem sporych możliwoÅ›ciach, którego należy używać przy pisaniu pluginów. Na poczÄ…tek warto zapoznać siÄ™ z możliwoÅ›ciami klasy WPDB odpowiedzialnej za połączenie z bazÄ… danych. Obiekt odpowiedzialny za bazÄ™ danych jest zdefiniowany globalnie - jest to zmienna $wpdb. NormÄ… w pisaniu aplikacji z Wordpress jest używanie zmiennych globalnych wypisanych na poczÄ…tku przy użyciu instrukcji global. Obiekt ten posiada nastÄ™pujÄ…ce metody (piszÄ™ o tych rzeczywiÅ›cie istotnych): […]

    Pingback - yashke.com » Pisanie pluginu do Wordpressa — 2007-03-17 @ 20:39

rss komentarzy

Dodaj komentarz





Trackback


yashke.com

to blog o Internecie. Poczytasz tu o tym co ciekawego i nowego dzieje siÄ™ w kraju (w tym plotki i przecieki ;)) i zagranicÄ….
Znajdziesz tu też fajne oferty pracy dla ludzi z branży IT.

Bloga tworzy i prowadzi firma Netguru

LINKUJMY! - akcja hipertextowa
Spotkasz nas na Barcamp Poznań

Ostatnie komentarze

  • Ojacie: Sorry, coÅ› mi siÄ™ wkleiÅ‚o do okienka :) ChciaÅ‚em powiedzieć, że parÄ™ lat temu zrob
  • Ojacie: http://cywinska.pl/blog
  • Lordnever: Czy istnieje możliwość podlinkowania dwóch kont z blip - a?
  • mikowhy: no to plus dla agory. W sumie jak siÄ™ oglÄ…da ich siedzibÄ™ to aż siÄ™ prosi coby wpadaÄ
  • ;): szczerze to jakos tak ... nieczytelnie to wyszlo, niby ladnie a jednak odpycha, te bloki n
  • PaweÅ‚: Na szczęście nie pogrzebali przy forum i skrypt: http://blog.pawelsobczak.pl/2007/pokaz-
  • Stempniaked: sÄ… gdzieÅ› prezentacje z democamp? chÄ™tnie zobaczyÅ‚bym enterprise 2.0