Jesteś tutaj

Kurs tworzenia drupalowych modułów

Od pewnego (dłuższego czasu) chciałam wykonać kurs omawiający podstawy tworzenia modułów w Drupalu. Oczywiście istnieje kilka tego typu kursów, natomiast uważam, że im więcej, tym lepiej. Każdy z piszących ma inne podejście i im więcej wiedzy dostarczy się użytkownikom tym lepiej.

Forma jest mocno niedopracowana, zapewne wkradło się wele chochlików. Będę poprawiać. Obiecuję.
Kurs jeszcze nie jest skończony, natomiast pewne zagadnienia już porusza. Będzie w miarę możliwości aktualizowany. Niestety przez ogrom wiedzy albo należałoby czekać (pewnie miesiącami) na gotowe dzieło, albo częściowy kurs opublikować już teraz, uzupełniając go z czasem o dalsze elementy.

W każdym bądź razie zapraszam do kursu tworzenia modułów dla Drupala 7.

ps. Wszelkie uwagi mile widziane.

Kilka informacji o Viewsach, których możecie nie znać

Moduł drupalowy Views jest na tyle rozbudowany, że pomimo częstej pracy z nim od czasu do czasu potrafi zaskoczyć mnie swoimi możliwościami. Zwłaszcza wersja dla 7 kryje w sobie wiele niespodzianek, z których pewnie niejedna nie została przeze mnie jeszcze odkryta. Chciałabym zebrać wszystkie ciekawe rzeczy, o których wiem, być może komuś z Was się przydadzą.

Wykluczenie aktualnie przeglądanej treści

Niekiedy istnieje konieczność wykonania widoku prezentującego nody powiązane, najnowsze w tej samej kategorii czy użytkowników o tej samej randze na stronie użytkownika. Z pomocą oczywiście przychodzą Contextual filters (Filtry kontekstowe). Problem pojawia się w momencie, gdy chcemy pokazać wpisy za wyjątkiem aktualnie przeglądanego elementu.

Moja niewiedza do niedawna powodowała, że albo używałam filtrów php, albo problem pomijałam. Rozwiązanie okazało się jednak banalnie proste.

Rozwiązanie

Analizując powiązane nody z tej samej kategorii, aby osiągnąć listing wpisów należy dodać dwa filtry kontekstowe. W moim przypadku jest to Zawartość: Kategoria oraz... Zawartość: ID Węzła.


Wybrane kontekstowe filtry.

Pierwszy filtr powinien automatycznie przechwytywać wartość z node'a dzięki możliwości „Dostarcz domyślną wartość”.


Dostarczenie domyślnej wartości typu ID taxonomy z adresu URL oraz zaznaczenie Wczytaj domyślny filtr ze strony węzła.

Drugi filtr natomiast to filtr wykluczający. Również dostarczamy wartość domyślną, tj. nid na podstawie adresu URL, natomiast w sekcji więcej należy wybrać opcję „Wyklucz”.


Wykluczenie artumentu.

Całość bardzo prosta, a jakże przyjemna!

Czemu views nie pokazuje zajawek z treści dostępnej tylko po zalogowaniu?

Widok przy generowaniu elementów „sięga” do tabeli {node_access}, czyli upewnia się, że użytkownik posiada dostęp do konkretnych elementów. Nie zawsze jest to rozwiązanie preferowane, wyobraźmy sobie sytuację, gdy treść jest dostępna tylko dla zarejestrowanych użytkowników, ale listing z zajawkami chcemy pokazać również anonimowym, aby zachęcić ich do rejestracji.

Rozwiązanie

Na szczęście i o tym pomyślano.
Wystarczy kliknąć w Ustawienia kwerendy, a następnie wybrać Wyłącz przepisywanie SQL. I to wszystko.


Umiejscowienie elementu „Ustawienia kwerendy” w sekcji „Inne”

”Odnośnik: więcej” z sekcji stronicowanie nie przenosi mnie tam, gdzie chcę

Odnośnik ten samodzielnie generuje link do pełnej treści. Przydaje się to zwłaszcza w przypadku niestronicowanych bloków wyświetlających zaledwie kilka elementów.
Moduł Views w przypadku wybrania tej opcji automatycznie kieruje użytkowników do pierwszego formatu wyświetlania typu „strona” w tym samym widoku (2.)

Rozwiązanie

Jeśli taki wybór nas nie satysfakcjonuje można to zmienić z poziomu samego Viewsa nie zmieniając kolejności ani nie dodając nowego formatu wyświetlania.
Wystarczy skorzystać z ustawień Format powiązany w sekcji Inne (3.)


Umiejscowienie elementu „Format powiązany” w sekcji Inne.

Chciałbym zrobić słowniczek (glossary) dotyczący node'ów, kategorii, użytkowników...

Od razu uprzedzę – taki słowniczek już istnieje i warto mu się bliżej przyjrzeć. Jest on na liście widoków domyślnie wyłączony, natomiast może być świetnym polem nauki.
Glossary (słowniczek) przedstawiam na poniższym screenie.

Rozwiązanie

Aby wykonać coś takiego w Drupalu należy skorzystać znowu z filtrów kontekstowych.
W domyślnych filtrach należy wybrać opcję Wyświetl podsumowanie i na dobrą sprawę czytać uważnie wszystkie informacje poniżej.
I tylko tyle.



Interaktywność w HTML5

Przyglądanie się dokumentacji html5 w moim przypadku jest dużo bardziej owocne niż czytanie stron/blogów "branżowych". I tak jak o tagach details i summary mówiło się już jakiś czas temu (z podawaniem przykładów), tak mnie udało się natknąć dopiero niedawno.
Jak widać twórcy standardu udostępniają możliwość tworzenia elementów interaktywnych bez potrzeby używania ni grama js (oczywiście tylko w teorii, bo w praktyce implementacja tych elementów jest mniej niż uboga). Jak zwykle pojawia się tutaj pytanie o celowość wprowadzania tego typu elementów, niemniej jest to niejako ukłon w stronę front-endowców kodujących do tej pory takie rzeczy ręcznie (tudzież za pomocą bibliotek).

Ale do rzeczy.

Draft specyfikacji wprowadza sekcję tzw. interaktywnych elementów i właśnie z nich wywodzą się details i summary. Oba te elementy dają możliwość ukrycia treści znajdującej się w elemencie details. Zawsze widoczny jest tylko element summary po kliknięciu w niego automatycznie pojawia się reszta tekstu, po ponownym kliknięciu tekst się chowa. Proste accoridion w wersji "pure html".

W przypadku, gdy nie umieścimy tagu summary przeglądarka umieści tam własny tekst. W przypadku polskiej wersji Chrome jest to napis "Szczegóły".

Bardzo ważnym atrybutem dla details jest atrybut open. Określa on nic innego, jak to, czy treść ma być pokazana, czy schowana. Tutaj przypomnienie - HTML 5 zaakceptuje chętnie kod

i automatycznie otworzy taką sekcję przy wejściu na stronę.
Tutaj moja uwaga - po kliknięciu atrybut open ustawia się sam, dzięki czemu można dowolnie stylować otwarte elementy.

Details w praktyce

<section id="window">
  <header>
    <h1>Jan Kochanowski</h1>
    <h2>Fraszki</h2>
  </header>
  <details>
    <summary>Na niesłowną</summary>
    <div>
      Miałem nadzieję, że mi zyścić miano,
      <br>
      Tak jako było z chucią obiecano;
      <br>
      Ale co komu rzecze białagłowa,
      <br>
      Pisz jej na wietrze i na wodzie słowa.
    </div>
  </details>
  [...]
</section>

Kod HTML jest prosty. To przeglądarka ma za zadanie określić jaki element należy schować. My musimy tylko i wyłącznie umieścić treść do chowania w tagu details.

section details[open] summary {
  font-weight: bold;
}

Dzięki automatycznemu nadawaniu atrybutu open jestem w stanie bezproblemowo odróżnić od siebie elementy zamknięte i otwarte.

Wsparcie przez przeglądarki

Aktualnie sytuacja wygląda tak jak pred kilkoma miesiącami.
Jedyną wspierającą przeglądarką jest Chrome.
Safari i Firefoks renderują wygląd bardzo podobnie, stosując się do zasady graceful degradation. Opera i IE w wersji 9 (a więc również z niższych) zachowują się i renderują wszystko najgorzej. Natomiast cała treść jest w pełni dostępna.

Jeśli więc ukrywanie tekstu nie jest funkcjonalnością kluczową, a pewnego rodzaju featurem może warto się zastanowić nad natywnym wsparciem w Chrome. Wszak podobno im szybciej pewne elementy zacznie się stosować tym szybciej zostaną one zaimplementowane przez twórców przeglądarek.

Details w praktyce - do obejrzenia w przeglądarce Chrome.

Dodatkowa wyszukiwarka w Drupalu

Drupal sam w sobie dostarcza podstawowe mechanizmy wyszukiwania treści. Przy każdym wywołaniu cron'a (lub pseudo-crona, odpalanego przy odwiedzinach użytkowników, jeśli Wasz hosting nie ma dostępu do cron taba) Drupal indeksuje dodane treści. Następnie po użyciu wyszukiwarki sprawdzane są dodane treści pod kątem występowania wpisanych fraz. Cały mechanizm nie jest zbyt skomplikowany - przykład działania podstawowego wyszukiwania.

Bywa jednak, że podstawowe mechanizmy wyszukiwania nie odpowiadają konkretnym zapotrzebowaniom. Może się to dziać z kilku powodów, podstawowymi są wydajność lub brak możliwości filtrowania. Chciałabym zaprezentować zatem rozszerzenie mechanizmu filtrowania wpisów. Za pomocą nieśmiertelnego modułu Views.

Oczywiście ze względów wydajnościowych sam moduł Views nie poradzi sobie na dużych witrynach. Z tego też względu wymyślono inne mechanizmy poprawiające nieco możliwości drupalowych systemów.

Definiowanie podstawowego widoku

Odnosząc się do mojego poprzedniego wpisu przedstawiającego podstawy Viewsów należy stworzyć widok typu "Zawartość" z wybranych "Typów zawartości" oraz dodać typ wyświetlania "Strona" w postaci "Listy niesformatowanej" stworzonej z "Zajawek".
Następnie należy zapisać widok korzystając z opcji "Kontynuuj edycję" ("Save and edit").

Dodatkowa konfiguracja - pierwszy filtr

Aby stworzyć viewsową wyszukiwarkę należy skorzystać z Filtrów.

Najogólniej każdy filtr ma za zadanie zawężać wyniki prezentowane przez widok do konkretnych dopasowań. Przyjmując, że Viewsy są sposobem zapytań do drupalowej bazy danych ("niewielkie" uproszczenie), to filtry obrazują warunki WHERE. To co ważne, to fakt, że pomiędzy warunkami mamy operator AND - zostaną wyświetlone tylko te treści, które spełniają wszystkie warunki.

Aby edytować istniejący już filtr należy kliknąć na jego nazwę.


Podstawowy widok edycji Viewsów.

Widok edycji filtra.

Jak widać filtry nie tylko pozwalają ograniczyć zestaw wyników do wartości z góry zadeklarowanych, dają również opcję udostępniania filtra użytkownikom, pozwalając im własnoręcznie zmieniać filtrowanie zawężając wyniki wyszukiwania prezentowane przez widok.


Widok edycji filtra.

W przypadku filtra dotyczącego rodzajów zawartości warto omówić trzy opcje.

Element 2. na obrazku prezentuje trzy checkboksy:

  1. Dozwolone wybieranie wielu opcji
  2. Pamiętanie ostatniego wyboru - przetrzymywanie w sesji ostatniego wyboru użytkownika; bez tego oczywiście wszystkie filtry po ponownym wejściu na stronę wyszukiwarki zostaną zresetowane
  3. Ograniczenie listy do wybranych elementów - domyślnie użytkownicy mogą wybierać z całej puli dostępnych typów zawartości; w momencie, gdy wybierzemy opcję ograniczenia należy pamiętać, aby w okienku 1. zaznaczyć typy, które użytkownicy mogą wybierac

Filtrowanie po tytule

Z tego względu, że jeden filtr nie wygląda zachęcająco dodajmy drugi, który wprowadza więcej opcji znanych z wyszukiwarek.
Tym elementem będzie możliwość zawężania wyników wyszukiwania ze względu na słowa występujące w tytule wpisów.


Aby dodać nowy filtr wystarczy skorzystać ze sporo mówiącego przycisku "Dodaj".

Ze wszystkich dostępnych filtrów wybieram "Zawartość: Tytuł".

Następnie wystarczy udostępnić użytkownikom możliwość zmiany filtra, dokładnie jak poprzednio.

Filtr dotyczący elementów niepredefiniowanych (tych, które nie mają skończonej, wcześniej zdefiniowanej liczby elementów i nie można ich wyświetlić za pomocą np. selecta) ma nieco więcej opcji dotyczących operatorów.

O ile na zrzucie poniżej wybrany jest operator zawiera (co oczywiście wyświetli każdą treść mającą w tytule wpisaną przez nas frazę), o tyle bogactwo jest o wiele większe. Wartość wpisana przez nas w drugim oknie ustawi się jako domyślny tekst, po którym filtrowany będzie Views.
Gwoli ścisłości - filtry "zawieralności" są oczywiście o wiele mniej wydajne niż ścisłych dopasowań.

Ze względu na możliwość przetestowania innych operatorów udostępniłam takową opcję. Zachęcam do przeklikania i sprawdzenia, jak zachowuje się dany operator.

Przykład wyszukiwarki

Podsumowanie

W ten sposób za pomocą kilku kliknięć została stworzona strona prezentująca dostępną w serwisie treść, pozwalającą jednocześnie na filtrowanie jej przez użytkowników. Filtrów tych można tworzyć oczywiście o wiele więcej, tak, aby dostosować funkcjonalność do własnych zapotrzebowań.

Natomiast szybkość wykonania takiej dodatkowej wyszukiwarki jest niewątpliwie jej największym plusem. Dzięki temu możemy prezentować najróżniejszą treść zgromadzoną w serwisie praktycznie bez doświadczenia programistycznego.

Dla bardziej dociekliwych - mechanizmy autopodpowiadania również istnieją. Jak i parę innych ciekawych cegiełek, które można dołożyć, aby jeszcze bardziej uatrakcyjnić takie widoki.

Świat wyszukiwarek - zmiany (na gorsze)

Być może niektórzy z Was zauważyli w swoich raportach naturalnych wyników wyszukiwania frazy w stylu (not provided)? Ostatnimi czasy głośno było o posunięciu giganta z Mountain View polegającego na wprowadzeniu bezpiecznych stron dla zalogowanych użytkowników. Google tłumaczył i tłumaczy swoją decyzję względami o bezpieczeństwie, z czym w ogólności się zgadzam. Nie zgadzam się natomiast z panującymi powszechnie opiniami, że Analytics Premium będzie te słowa pokazywał, spiskowe teorie bez żadnych merytorycznych argumentów i podstaw technicznych nigdy do mnie nie przemawiały.

Zapewne jednak nie jestem jedyną osobą, która monitoruje wejścia z wyszukiwarek na swoją stronę.

Ale od początku.

Ogłoszenie Google

18 października gigant wydał na swoim blogu oświadczenie o wprowadzeniu SSL'a na swoją wyszukiwarkę dla zalogowanych użytkowników.

Pociąga to za sobą, oprócz deklarowanego zwiększonego bezpieczeństwa, wycinanie przez przeglądarki referrera przy przejściu z protokołu https na http. Innymi słowy wycina również fragment ?q=szukany+tekst, co uniemożliwia sprawdzenie po naszej stronie, że użytkownik wszedł do nas z frazy szukany tekst. Zmiana nie dotyczy natomiast adWords, ponieważ w tym przypadku parametr ?gclid jest przekazywany na naszą stronę w linku - systemy statystyczne rozpoznają to jako przejście z płatnych wyników wyszukiwania i wszystko jest OK.

Na blogu Google Analyticsa pozwolono sobie również zaestymować, że zalogowanych użytkowników jest około 10%, więc nie ma się o co bać. Poza tym zawsze zostają Narzędzia dla webmasterów...
Dodatkowo w Polsce nie ma jeszcze automatycznego przekierowania na https, więc podobno nie ma się o co martwić.

Yahoo! - gdzie się podział Site Explorer

21 listopada Yahoo! przeniosło swojego Site Explorera do Bing Webmaster Tools. Tym samym zniknęło narzędzie, z którego korzystało wiele osób do sprawdzania stron linkujących do ich strony (oraz do konkurencji, jeśli chodzi o ogólne SEO). Cóż, pośrednio uderzyło to również we mnie, udało mi się znaleźć linkujące do mnie strony, z których nie przechodzili żadni użytkownicy. Pozwalało to analizować przyczyny takiego zachowania (zazwyczaj linkowanie do strony głównej bloga na mało popularnych witrynach) i podejmować kroki zapobiegające zdobywaniu takich linków w przyszłości.
Zdaję sobie sprawę, że teraz badanie backlinków jest mi również dostępne i zapewne dalej będzie działać szybciej niż analogiczne narzędzie Google, natomiast szkoda mi prostego podglądania polskiej konkurencji (w tym wyszukiwania czasem ciekawych witryn). Inne podobne narzędzia do tej pory nie spełniły moich wymagań, być może przez brak wersji na polski rynek i marną obsługę "lokalnych" witryn.

Obserwowane dzisiaj

Przerzuciłam się na korzystanie z Narzędzi dla Webmasterów, aby sprawdzać witryny do mnie linkujące. Kilka już się znalazło, ostatnio, tj. gdzieś w okolicach 1 grudnia zalinkował do mojego wpisu Kacper z CSS3, jednej z ważniejszych moim zdaniem stron w polskim internecie na ten temat. Po dwóch tygodniach w Narzędziach ani widu, ani słychu o tym wydarzeniu.

W mniej więcej tym samym momencie zaczęło w moich statystykach pojawiać się (not provided). Na razie dotyczy to tylko około 3% wszystkich wejść. Czy dobrze? Niekoniecznie.

  • Google nadal nie wprowadziło przekierowania w polskiej wersji wyszukiwarki, więc odsetek jest zadziwiająco duży
  • Jestem powoli odcinana od informacji o tym, czym zainteresowani są czytelnicy
  • Jest to ruch tzw. wysokiej jakości - użytkownicy spędzający na stronie dużo czasu i przeglądający wiele stron; nie jestem w stanie z powodu braku słów kluczowych stwierdzić czy przeglądają te wiele stron, ponieważ treść mogła ich zaciekawić, czy może nie są w stanie znaleźć tego, po co przyszli i krążą zagubieni

3% to globalnie owszem niewiele, natomiast ciekawi mnie ile faktycznie osób jest stale zalogowanych. I jaka będzie to część użytkowników po wprowadzeniu przekierowania.

Narzędzia dla webmasterów - remedium na wszystko?

Jako że wielkimi krokami nadchodzą zmiany zdecydowałam się korzystać nieco z Narzędzi, w tym i z dostarczanego raportu odnośnie słów kluczowych, stwierdzając, że opóźnienie danych w postaci dwóch dni jest spokojnie do przełknięcia w moim przypadku.

Nie do przełknięcia natomiast były kompletnie nietrafione statystyki. O ile wyświetleń mojego bloga na daną frazę (a więc i wskaźnik CTR) nie mam za bardzo jak sprawdzić o tyle słowa kluczowe zdecydowanie nie zaspokajają moich wymagań!
Wszystko przez to, że ruch na bloga pochodzi z tzw. długiego ogona. Dla niezorientowanych znaczy to, że nie przyciągam ruchu na css3, natomiast dłuższe frazy, jak i tak powstała nowa drupalowa witryna czy css3 blog pl są znacznie częściej wybierane przez użytkowników.

Tych fraz w ogóle nie widać w Centrum dla webmasterów. Zamiast tego mam raportowane m.in. jak należy zacząć i jak zakończyć list, brief.pl czy potencjały standardowe tabela.

Również przechodząc na raport Najpopularniejszych stron czy monitorując pozycję słów wiele rzeczy się nie zgadza (nawet pamiętając o zmianie przedziału czasowego w raportach).

Podsumowanie

Raczej nie kieruję wpisów na blogu do osób szukających wiedzy bardzo ogólnej i zupełnie niezorientowanych w temacie. Staram się odpowiadać na określone problemy, na które natknęłam się niegdyś sama lub prezentować pewne idee, w tym i takie, których moi czytelnicy mogą oczekiwać.
Powoduje to, że nie będę (i nie planuję mieć) wejść na słowa ogólne, które raportuje Webmaster Tools. Raczej oczekuję fraz długoogonowych wpisanych przez świadomych użytkowników. Którzy jak się okazuje korzystają również nader często z bezpiecznych stron Google.

Z jednej strony rozumiem ideę bezpiecznych aplikacji oraz fakt, że od darmowych rzeczy (vide wyszukiwarka) nie ma co oczekiwać naginania wszystkiego dla użytkowników. Z drugiej jednak wolałabym nie tracić informacji o żadnym z użytkowników. Taka kobieca fanaberia.

Strony

Mini Blog

  • Problem z geshifilter 09.03.12

    Zauważyłam, że moduł drupalowy Geshifilter nie bardzo lubi się z Share This. Przez to kod jest ciężki do skopiowania. Postaram się jak najszybciej to poprawić lub wprowadzić rozwiązanie zastępcze. Za niedogodności przepraszam.

  • HTML 5 13.12.11

    Pisanie aplikacji w HTML'u jest dla mnie aktualnie bardziej zabawne niż WinAPI czy Swing. Zwłaszcza, że do kompilacji użyto silnika WebKit.

  • Generator menu 02.09.11

    kolejnym projektem, nad którym pracuję jest generator menu. jest to faza przedwstępna, jednak można już obejrzeć mój zamysł. Działanie może być jak najbardziej niestabilne.

Copyright © 2011 - 2012 Milena Szałacka. Wszystkie prawa zastrzeżone.
Subskrybuj Subskrybuj