W poprzednim wpisie z tego cyklu omawialiśmy CCK. Dziś drugi z modułów, który tak jak CCK jest traktowany jako niezbędny na każdej drupalowej witrynie, której administrator potrzebuje pokazać listę – wpisów, obrazków, tematów na forum, użytkowników, czegokolwiek – ale chce to zrobić po swojemu a nie tak jak narzucają mu to twórcy modułów.
Standardowo drupal potrafi wyświetlić listy na kilka sposobów. Na przykład moduł taxonomy, potrafi pokazać listę wpisów należących do danej kategorii. Moduł forum przedstawia wpisy należące do kategorii (tablic forum) w nieco inny sposób. Moduł blog pokazuje wszystkie wpisy typu blog dodane przez konkretnego użytkownika, i tak dalej.
Co jednak, jeśli utworzymy własny rodzaj zawartości i chcemy pokazać ją w odmienny sposób? Na przykład marzy nam się galeria miniaturek z zadanej kategorii w układzie siatki 5×5 miniatur? Albo chcemy pokazać wszystkie wpisy nieopublikowane, ale tylko moderatorom, w celu przejrzenia ich i dopuszczenia do publikacji? Albo tabelę z użytkownikami, ale tylko tymi, którzy mają wypełnione pole 'województwo’, a obok tabeli chcemy pokazać filtr (rozwijane menu) z listą województw, który zawęzi pokazywanych użytkowników do jednego z nich. No i żeby w tabelce pokazał się avatarek, nazwa użytkownika, żeby miejscowości (inne pole z profilu) były zgrupowane w nagłówkach, a sortowanie było po ostatniej dacie logowania do serwisu?
Wydaje się nieprawdopodobne, ale wszystko to wyklikamy korzystając z views (jedno zastrzeżenie – musi to być wersja 2, czyli obecnie wpsierana do drupala 6), bez pisania nawet linii kodu php!
Możliwości tego modułu są zdumiewające i polegają w skrócie na tym, że dostajemy do rąk potężny generator kwerend, który daje nam do dyspozycji kilka widoków wynikowych (lista, tabela, siatka, oraz w postaci strony lub bloku), a na wynik mogą wpłynąć filtry (np. tylko treść dodana później niż rok temu), sortowania (np. po ilości komentarzy do wpisów), argumenty (np. id lub rola użytkownika może zdecydować jaki wynik zobaczy) .
Bardzo ważny jest fakt, że praktycznie wszystkie moduły (i to już od drupala 5) integrują się z views. Daje to niesamowite możliwości rozbudowy naszej strony o niemal dowolne widoki. Przykładowo instalując na stronie system ocen do wpisów, możemy być pewni, że zbudujemy widok w którym będziemy mogli użyć pól, filtrów czy sortowania związanego z ocenami (najwyżej ocenione wpisy, tylko wpisy ocenione powyżej 3 gwiazdek i tak dalej). Inny przykład to flag – moduł pozwalający dowolnie flagować zawartość, np. zgłaszać wpisy do moderatorów. Zbudowanie widoku dla moderatorów ze zgłoszonymi wpisami zajmuje nastepnie kilka minut, łącznie z udostępnieniem go w formie bloku, który zobaczą tylko moderatorzy i to tylko na wybranej podstronie lub podstronach serwisu.
Co jeszcze ciekawsze widoki możemy wyposażyć w dodatkową funkcję masowej aktualizacji prezentowanych wpisów. Przykładowo budujemy widok treści oznaczonej przez moduł flag jako niewłaściwa (np. spam). Użytkownicy flagując taką treść (za pomocą wspominanego modułu flag) mogą doprowadzić do wycofania jej ze strony (ustawienie statusu opublikowane po zadanej liczbie flag – tutaj musimy jeszcze użyć modułów wykonujących akcje pod pewnymi warunkami – np. trigger). Wtedy wpis trafia do kolejkki moderatorskiej. Jeśli takich wpisów nazbiera się kilka(dzieiąt, set) możemy do widoku takich wpisów dodać (z pomocą modułu views bulk operations) specjalną kolumnę z polami typu checkbox, a nad widokiem udostępnić (dla wybranych ról) guziki bądź listę zawierającą akcje – przykładowo usuń, opublikuj, wyślij mail do autora, zdjemij flagę, i tak dalej. W ten sposób zbudujemy niemal dowolny interfejs administracyjny do zarządzania treścią, użytkownikami, komentarzami.
Przykład z życia – po awarii serwera mojej strony http://basoofka.net, utraciłem sporo danych. Kopię zapasową bazy miałem w miarę świeżą, ale niestety katalog z plikami do galerii odzyskałem sprzed kilku miesięcy. Miałem więc na odratowanej stronie około 500 wpisów zawierających zdjęcia, ale bez plików. Zostały same opisy i komentarze. Nie chcąc kasować wpisów, postanowiłem zbudować 2 widoki. Pierwszy posłużył mi do znalezienia i odpublikowania wpisów z brakującymi zdjęciami. Za pomocą Views Bulk Operations zajęło to kilkanaście minut a nie kilka dni. Następnie zbudowałem widok, w którym użytkownicy widzieli swoje wpisy oznaczone jako 'uszkodzone’. Dzięki temu każdy użytkownik może taki wpis wyedytować i uzupełnić brakujące pliki.
Mam nadzieję, że podając tak różnorodne przykłady zachęciłem Was do dokładnego przyjrzenia się temu modułowi. Naprawdę warto, nawet jeśli z początku będziecie zdezorientowani ogromem opcji to wkrótce uzależnicie się od niego :). Warto zainstalować sobie moduł Advanced Help, który zawiera rozbudowaną pomoc do modułu. Bez instalacji można ją obejrzeć na http://views-help.doc.logrus.com/.
Wspominane moduły:
dla mnie to czarna magia