Nadawanie instancjom widżetów różnych stylistyk

Ostatnio tworząc widżety natrafiłem na problem nadawania instancjom widżetów różnych stylistyk. Jak w skrócie wyglądały moje wymagania:

  • Widżet musi posiadać kilka stylów w oddzielnych plikach CSS (dla łatwiejszego zarządzania nimi) – każdy styl powiązany jest z unikalną klasą CSS definiowaną w głównym kontenerze widżetu.
  • W zależności od konfiguracji instancji widżetów, wczytywane są tylko potrzebne pliki CSS (jeżeli w przyszłości widżet będzie posiadał 10 różnych dostępnych stylów to bez sensu byłoby wczytywać je wszystkie niezależnie od tego czego potrzebuje użytkownik)

Na czym polegał problem?

Otóż akcja dodawania styli CSS do sekcji <head> witryny (wp_enqueue_style) wykonywana jest wcześniej niż renderowanie widżetów, a co za tym idzie funkcja, która ma wybrać CSS do wczytania, nie ma dostępu do opcji w danej instancji widżetu.

Na szczęście rozwiązanie okazało się być bardzo proste:

Wystarczy wczytać parametry widżetu z tabeli opcji i sprawdzić jakie style CSS są potrzebne do wyświetlenia wszystkich instancji:

$instances = get_option('WIDGET_OPTION_NAME');
$loaded_files = array();
foreach($instances as $instance) {
    if(!in_array($instance['style'], $loaded_files)) {
       wp_register_style( 'WIDGET_PREFIX-' . $instance['style'], home_url() . '/wp-content/plugins/WIDGET_NAME/styles/'. $instance['style'] .'.css', array(), false, 'all');
        wp_enqueue_style('WIDGET_PREFIX-' . $instance['style']);
        array_push($loaded_files, $instance['style']);
    }
}

Jak widać powyższy kod wczytuje zawartość opcji widżetu (parametr style przechowuje nazwę pliku CSS do wczytania) oraz tworzy tablicę wczytanych już raz stylów CSS. Następnie sprawdzane są wszystkie instancje widżetu oraz wczytywane są brakujące pliki. Dzięki temu nie są wykonywane zbędne operacje kolejkowania już raz dodanych plików CSS.

Mała wada

Opisywane rozwiązanie ma jedną małą wadę – jeżeli niektóre instancje widżetu są wyświetlane tylko na określonych podstronach to i tak zostaną wczytane style dla wszystkich wykorzystywanych instancji. Teoretycznie można by to wszystko sprawdzić, przy czym takie sprawdzenie zależałoby od metody wykorzystywanej do wyświetlania widżetów na różnych podstronach. Dodatkowo zawsze nadmiar zapytań HTTP i kodu można zniwelować poprzez cache CSS (oczywiście zakładam tutaj scenariusz w którym użytkownik nie korzysta z wszystkich styli jak popadnie a jedynie z góra kilku wybranych).

WordPressowe Linki #3

Paczki językowe w WordPressie 3.7

Obowiązkowa lektura dla wszystkich developerów wtyczek i motywów dla świeżo wydanego WordPressa 3.7.

Wsparcie dla ekranów wysokiej rozdzielczości w motywie

Krótki poradnik jak zaimplementować wsparcie dla ekranów wysokiej rozdzielczości (retina) w swoim motywie.

Jarvis – WordPressowy asystent w kokpicie

Wtyczka bazująca na świetnym i sprawdzonym pomyśle – miłośnicy Alfreda z pewnością się ucieszą 🙂

AppPresser – czyli WordPress jako baza dla mobilnych aplikacji

Niektórzy tak sobie umiłowali WordPressa, że budowaliby z jego użyciem wszystko co się da – łącznie z aplikacjami na urządzenia mobilne. Cóż, nie jestem pewien czy to dobre podejście, ale warto śledzić tego typy inicjatywy 🙂

WordPress 3.8 i nadchodzący redesign kokpitu

Na koniec zbiór ciekawych linków odnoszących się do prawdopodobnych zmian, jakie zajdą w kokpicie w WordPressie 3.8, którego zgodnie z obietnicami powinniśmy dostać w nasze łapki jeszcze w tym roku:

Najbardziej cieszy fakt, że wszystkie te elementy można przetestować już teraz, do czego gorąco zachęcam. Jak widać pod koniec roku w kokpicie będzie się działo 🙂

Pierwszy WordUp w Łodzi

8. Listopada będziemy mieli okazję spotkać się na pierwszym WordUpie w Łodzi.

Dla niewtajemniczonych – WordUpy to nieformalne spotkania lokalnych społeczności WordPressa. Choć „lokalność” imprezy jest umowna – na przykład ja chętnie jeżdżę na WordUpy do Wrocławia 😉

Ja również się pojawię i przedstawię prelekcję pod tytułem „Widżet GK News Show Pro na 10 sposobów” – czyli praktyczne aspekty wykorzystania naszego najnowszego widżetu. Będzie to swego rodzaju rozwinięcie mojej prelekcji z WordCampa we Wrocławu gdyż zgłębimy detale konfiguracji widżetu oraz pokażę jak można w bardzo ciekawy sposób wykorzystać jego możliwości na swoich stronach opartych o WordPressa.

Dodatkowo zabieram ze sobą trochę firmowych gadżetów dla najaktywniejszych uczestników spotkania 😉

Mam nadzieję, że spotkamy się w licznym gronie (nie tylko łódzkim ;)).

Do zobaczenia!

WordPressowe Linki #2

Kolejna dawka przydatnych narzędzi i informacji.

Generator plików Readme dla pluginów

Kolejne bardzo przydatne narzędzie od GenerateWP – dzięki prostemu formularzowi można wygenerować cały plik Readme dla pluginu, wymagany na stronie WordPress.org.

Markdown w WordPressie

Artykuł dla tych, którzy po premierze Ghosta zapragnęli mieć edytor Markdown u siebie w WordPressie. Zawiera analizę dostępnych wtyczek oraz praktyczne uwagi odnośnie ich ograniczeń.

Podgląd wpisów na różnych podstronach

Bardzo przydatna wtyczka made in Poland 🙂 Pozwala na podejrzenie wyglądu przygotowywanego wpisu na stronie głównej czy stronie kategorii – idealne rozwiązanie dla tych, którzy bardzo ostrożnie i z uwagą dobierają wygląd skróconej treści wpisu.

WordUP Łódź #1

8. Listopada odbędzie się pierwszy WordUp w Łodzi – zapraszam już teraz, będę i ja – razem z krótką prelekcją oraz gadżetami 😉 Szczegóły odnośnie mojej prelekcji pojawią się w przyszłym tygodniu.

Jak odinstalować WordPress MultiSite

Dla tych, którzy nagle stwierdzili, że jednak MultiSite jest im niepotrzebny 🙂

CleverRules – przepisywanie adresów w inny sposób

Dla tych, którzy potrzebują alternatywy dla WP_Rewrite 🙂

 

Ghost – konkurencja dla WordPressa?

Wczoraj udostępniony został publicznie kod źródłowy projektu Ghost. Jako, że jestem mocno zainteresowany tego typu inicjatywami to od razu zabrałem się do testowania. I cóż… za wiele do testowania nie było. W zasadzie dłużej zajęło mi czekanie na zainstalowanie wszystkich potrzebnych modułów node.js + rozwiązanie problemu z modułem sqlite3 niż przejrzenie całego panelu Ghosta.

Pierwsza myśl? Przypomniały mi się studenckie czasy i oglądanie oddawanych na zaliczeniu aplikacji zawierających góra połowę zakładanych na początku funkcjonalności – w sumie cóż innego mogłem sobie pomyśleć, jeżeli przy logowaniu się do panelu administracyjnego ujrzałem komunikat o tym by ostrożnie dobierać hasło, gdyż funkcja resetowania hasła jest jeszcze niedostępna.

Przyznam, że trochę komicznie to wygląda zarówno z punktu widzenia developera jak i zwykłego użytkownika.

Kolejna sprawa – jedną z najbardziej interesujących mnie rzeczy w Ghost była zakładka „Dashboard”, która miała wyświetlać użyteczne informacje. Niestety w pobranej wersji nie znalazłem jej – bardzo mnie to zawiodło.

Wiem, że to wersja 0.3.* ale przy takim stylu to najlepszy marketing Ghostowi nie pomoże. Lepiej byłoby się wstrzymać kilka tygodni i wydać publicznie dostępną, bardziej dopracowaną wersję, zwłaszcza, że autorzy dysponują bardzo dużym zapleczem (~6000) testerów z Kickstartera.

Trochę pozytywów

Poza wspomnianymi wadami są oczywiście też zalety:

  • wbudowany edytor oparty o Markdown – uwielbiam Markdown więc każda jego implementacja w aplikacjach mnie cieszy – w Ghost jest ona moim zdaniem udana, dzięki zastosowaniu wyświetlania bezpośredniego podglądu kodu wynikowego obok edytora,
  • prostota – Ghost ma być platformą blogową i niczym ponad to, stąd panel jest banalny w obsłudze (choć braku dashboardu nie mogę przeżyć 😉 )
  • Licencja MIT – jedna z moich ulubionych – za to duży plus 🙂

Jeszcze trochę wad i braków

  • Brak kategorii – nie wiem czy jest planowane dodanie kategorii w przyszłości jako części Ghosta, ale mam dziwne przeczucie, że będzie to spora wada. Zwłaszcza w sytuacji, kiedy ktoś będzie miał więcej wpisów na blogu – wtedy poruszanie się po nich i szukanie ich w zakładce „Content” będzie moim zdaniem boleć.
  • Node.js zamiast PHP – technologicznie jest to moim zdaniem dobry wybór, ale pod względem popularności i świadomości użytkowników mam pewne obawy. Myślę, że w tym wypadku wielką rolę odegra gotowa platforma podobna do wordpress.com – wtedy technologia dla szarego użytkownika nie będzie stanowić problemu.
  • Brak wbudowanego systemu komentarzy – wiem, że są i będą pojawiać się różnej maści wtyczki związane z tym tematem, ale mimo wszystko – jeżeli instaluję system typowo blogowy to powinien on mieć wbudowany jakiś system komentarzy od razu.
  • Brak zarządzania rozszerzeniami – cóż, to mnie trochę dziwi, gdyż jeżeli coś ma być do bólu proste w obsłudze to powinno być chociaż jedno wielkie pole „drag’n’drop” do instalacji rozszerzeń

Podsumowanie

Ghost cierpi jeszcze z powodu niedostatków wieku niemowlęcego – koncepcja jest ciekawa, ale będzie wymagała mocnego dopracowania. Być może za rok lub dwa lata zrodzi się z tego ciekawa platforma, na tą chwilę niestety brakuje wielu kluczowych funkcjonalności i Ghost może stanowić jedynie bardzo egzotyczną ciekawostkę, która nadaje się na mocno uproszczony notatnik.

Odpowiadając na tytułowe pytanie – WordPress na razie może spać spokojnie 🙂 A nawet gdy już Ghost dorośnie to prawdopodobnie WordPress nie będzie już w ogóle traktowany jako platforma blogowa więc i tak nie będzie musiał konkurować z Ghost.

WordPressowe Linki #1

Ponieważ nie każdy śledzi mój zbiór linków na zebymniezapomnial.tumblr.com, postanowiłem regularnie publikować tutaj najciekawsze zasoby związane z WordPressem wraz z krótką notką ode mnie.

WP Test

Dla tych którym nie wystarczają dane testowe z Codex Theme Unit Test. Moim zdaniem bardzo przydatne narzędzie, gdyż uwzglednia różne dziwne przypadki z życia wzięte – np. wiele poziomów submenu w menu głównym. Warto rzucić okiem na demo.

10 wartych uwagi prelekcji z WordCamp Europe

Ciekawa kolekcja prelekcji poruszajacych ważne tematy z zakresu bezpieczeństwa, internacjonalizacji, konfiguracji, unit testów itp.

Linkowanie z tytułu wpisu do zewnętrznego URL-a

Krótki opis jak podlinkować tytuły wpisów do zewnętrznych stron WWW. Przydatne gdy ktoś prowadzi blog podobny do mojego „żebym nie zapomniał” 😉

Darmowy motyw dokumentacji oparty o BuddyPress

Kolejny ciekawy sposób na wykorzystanie możliwości BuddyPressa. Tym ciekawszy, że motyw dostępny jest za darmo.

40 przydatnych wtyczek od shortcode-ów dla WordPressa

Przydatna kolekcja dla wszystkich miłośników jednego z najbardziej przydatnych mechanizmów wbudowanych w WordPressa.

Dodawanie animowanej favikony do WordPressa

Jeżeli Wasza witryna prezentuje dane w dynamiczny sposób i lubicie poprawiać UX Waszej witryny w przeglądarce to z pewnością ten artykuł jest dla Was.

Wtyczki do zdobywania informacji zwrotnej od użytkownika

Kolekcja wtyczek wyświetlających w rozmaity sposób formularze proszące o wyrażenie opinii użytkownika o danej podstronie, treściach etc. Przydatne szczególnie w obszarach e-commerce.

Po WordCampie we Wrocławiu

WordCamp we Wrocławiu był bardzo udaną imprezą. W tym roku niestety udało mi się wysłuchać jedynie około połowy prelekcji, gdyż rozmowy kuluarowe przeciągały mi się w nieskończoność – wiele się dzięki nim dowiedziałem, a wszystko dzięki wysokiej frekwencji – WordCamp we Wrocławiu zgromadził około 120 osób – stąd było z kim rozmawiać 🙂

Jeżeli miałbym wybrać dwie najlepsze prelekcje (po jednej z każdego dnia) to z tych które widziałem:

  • Prelekcja Agnieszki Bury o wielojęzyczności w WordPressie – Agnieszka przeprowadziła dogłębny research, stąd też i duża wartość merytoryczna przeprowadzonej przez nią prezentacji (nieoficjalnie dowiedziałem się, że oryginał miał ponad 100 slajdów!). Jeżeli szukacie dobrego prelegenta na swój WordUp, który rzetelnie opracuje Wam temat to Agnieszkę można polecić w ciemno.
  • Prelekcja na temat przygotowania umów – lubię na konferencjach tematy, które tylko pośrednio wiążą się z IT, pozwalają oderwać się od tematycznej rutyny i skupić uwagę na tematach w których większość uczestników się nie specjalizuje, a powinna mieć szersze pojęcie.

Cała otoczka konferencji, biorąc pod uwagę koszt biletu (70zł), była moim zdaniem zorganizowana na bardzo dobrym poziomie. W sumie mieliśmy 4 imprezy: before party, kolację dla sponsorów i prelegentów (menu było boskie!), middle party i after party. Najbardziej zapadło mi oczywiście w pamięć middle party – bardzo udane i tylko fakt, że musiałem złapać choć trochę snu sprawił, że z żalem wróciłem z niego koło 3 w nocy. I nie można zapomnieć o boskich bajglach z Central Cafe na śniadanie drugiego dnia konferencji, które towarzyszyły mi także podczas powrotu do Łodzi 😉

Rzut oka w przyszłość

Jak wieść gminna niesie, następny WordCamp odbędzie się w Bydgoszczy. Co można zasugerować jej organizatorom? Przede wszystkim skorzystanie z doświadczeń ekipy z Wrocławia 😉 A tak poza tym warto byłoby znów znaleźć kogoś kto poprowadzi temat z pogranicza prawa i informatyki, dodatkowo może warto większy nacisk położyć na studium różnych dziwnych przypadków? Np. 2h i 6-8 ciekawych przypadków po 15-20 min każdy. Ewentualnie w ramach propagowania WordPressa jakieś warsztaty jako impreza towarzysząca? Myślę, że warto rozważyć różne pomysły by każdy kolejny WordCamp był jeszcze ciekawszy. Choć Wrocław zawiesił poprzeczkę moim zdaniem bardzo wysoko.

Na koniec

Gratulacje dla organizatorów – dzięki Waszej ciężkiej pracy polska społeczność WordPressa dostała solidny zastrzyk pozytywnej energii. Można spodziewać się wysypu WordUpów 🙂 Czekam najbardziej na dwa – w Łodzi i we Wrocławiu jeszcze w tym roku. Z wielką chęcią znów wrócę do Wrocławia.

Na koniec podziękowania dla wybranych 😉

Dla Kasi – za ogarnięcie całości wyzwania jakim była organizacja imprezy oraz nie poddawanie się pomimo przeciwności losu.

Dla Wojtka – za świetne zdjęcia z całej imprezy i pozytywną energię jaką emanował przez całą konferencję

Dla Robina – za piękną oprawę wizualną imprezy oraz za to, że dał radę pojechać do Kalisza na wesele i wrócić do nas (jak wytrzymał do after party to nie wiem) 🙂

Specjalny przekaz do Grzegorza – cały czas czekam na pierwszą bardziej marketingową prezentację uigena 😉

Dla wszystkich uczestników konferencji – jesteście zwycięzcami, a trudności pokonacie suwakami (ok, to było hermetyczne).

P.S. Dla tych, których ominęły ciasteczka z before party – Marianna za jakiś czas opublikuje przepis na swoim blogu, tylko musimy się odkopać ze spraw bieżących, gdyż w piątek zaczynamy kolejną konferencję – JoomlaDay w Łodzi 😉