Drupal 6 - Lista powiązanych treści pod wpisem

Wstęp

Poniższy poradnik traktuje o tym jak stworzyć prostą strukturę powiązanych ze sobą treści, w której do wpisów jednego typu (np. "książka") użytkownicy mogą łatwo podłączyć treść innego typu (np. klikając w link "dołącz biografię autora" albo "dodaj recenzję tej książki"). Funkcja taka jest często spotykana na portalach gromadzących różnego typu treści zebrane wokół jakiegoś centralnego wpisu.

Przykłady? Serwis Filmweb na każdej stronie z filmem ma szereg powiązanych stron - recenzje, zdjęcia, zapowiedzi, video, cytaty i tak dalej. Istotne jest to, że każda z tych powiązanych treści to osobna podstrona zawierająca różne pola i elementy (w drupalowym sensie jest to więc osobny typ zawartości).

Przykładowy rysunek ze strony Filmweb.pl prezentuje proces dodawania treści do istniejącego wpisu o filmie filmu "Czekając na Joe":

My postaramy się zbudować nieco mniej zaawansowaną strukturę, a jako przykład posłuży nam serwis elimu.pl, w którym zbudowałem prosty mechanizm dodawania wpisów w blogu *typ zawartości "blog"), które odnoszą się do rozwijanego przez nas projektu (nowy na elimu.pl typ zawartości "Projekt").

Na elimu.pl stworzyłem właśnie rodzaj zawartości typu "Projekt". Jego przeznaczeniem jest umieszczanie opisów stron, projektów, witryn i wdrożeń, jakie przeprowadzili użytkownicy serwisu Elimu. Ma to byc taki katalog wdrożeń stron opartych o silniki typu Joomla, Drupal i podobne. Powstaje z myślą o dzieleniu się doświadczeniem z innymi.

Chcę jednak powiązać projekty z blogami, tak aby w każdym "projekcie" był widoczny link pod (roboczym) tytułem "dodaj wpis w blogu dotyczący tego projektu". Chodzi o to, aby użytkownicy mogli blogować o rozwoju danego projektu.

Oczywiście po dodaniu wpisu w blogu ma on być widoczny pod projektem w jakiejś tabelce typu "wpisy w blogu traktujące o tym projekcie".

Poradnik oparłem o świetny pokaz na mustardseed, który bardzo fajnie prezentuje jak się zabrać do tego dość zawiłego tematu.

Dlaczego zawiłego? Otóż w drupalowym module CCK istnieje co prawda pole typu Node Reference, jednak powiązać wpisy ze sobą możemy tylko z poziomu edycji wpisu, co nie jest zbyt eleganckie. Poniżej pokażę jak wykonać nieco lepsze rozwiązanie, gdzie pod wpisem typu "projekt" będzie specjalny link, za pomocą którego stworzymy nowy wpis w blogu, powiązany z danym projektem.

Do dzieła zatem.

Część 1 - tworzymy powiązanie i link

1) pobieramy, instalujemy, włączamy "Views Attach" oraz "Node reference URL widget",

2) w rodzaju zawartości "blog" (czyli tym, który będziemy chcieli podpinać pod "projekt") tworzymy pole typu Node Reference, a sposób jego prezentacji ustawiamy na "Reference from Url"

3) Wybieramy jak ma brzmieć tekst linku, który pojawi się pod wpisem typu "projekt", oraz decydujemy czy ma się pojawić w skrócie i/lub pełnej wersji

4) wybieramy co ma się stac po dodaniu powiązanego wpisu - mamy do wyboru:

- The new node (no redirect) - czyli po dodaniu wpisu zostaniemy w nim i nic się nie dzieje,
- The referenced node - czyli po dodaniu wpisu wracamy do wpisu z nim powiązanego,
- The previous page - wracamy do poprzedniej strony (pewnie jest jakiś przypadek użycia tej opcji ale ja jeszcze nie wpadłem na żaden),

5) Ustawiamy pole tak, aby można było powiązać w nim treść typu "Projekt",

6) po zapisaniu pola zobaczymy odpowiedni link w linkach pod dowolnym wpisem typu "projekt":

Część 2 - jak wyświetlić pod projektem listę wpisów w blogu, które się do niego odnoszą?

1) najpierw utworzymy widok, który pokaże nam wpisy powiązane z jednym konkretnym wpisem. Przechodzimy na .../admin/build/views/add, nazywamy jakoś nasz widok, wybieramy "Segment" jako jego typ:

2) jako pierwszą opcję dodajemy mu argument:

wybieramy z listy dostępnych elementów odpowiednie pole, w naszym wypadku "Zawartość: Wpis powiązany z Projektem (field_blog_witryna_ref)"

3) nasz widok chcemy dołączyć do wpisu, zatem musimy stworzyć specjalną instancję tego widoku, nazwaną "Node content". Dostarcza ją moduł "Views Attach". Wybieramy taki typ i dodajemy:

4) w opcjach, które się pojawiły na dole ("Node content settings", pod basic options), ustawiamy:

do jakich typów zawartości dodawać ów widok (Node types):

w jakich sytuacjach widok ma się podłączać do wpisu (tzn w jakich trybach wyświetlania, domyślnie tylko w trakcie oglądania pełnej wersji, ale można go dodać do np. wpisu pokazywanego w rss czy w wynikach wyszukiwania), czyli "Build modes":

5) ustawiamy jakiś nagłówek, żeby wiadomo było o co chodzi

6) ustawiamy sposób wyświetlania wpisów (np. tabela z tytułem i datą wpisu)

7) zapisujemy i testujemy, dodając ze dwa przykładowe wpisy w blogu, co daje nam poniższy efekt (do obejrzenia "na żywo" tutaj: http://elimu.pl/node/73):

Podsumowanie

Efekt powyższych działań można oczywiście na różne sposoby dopasować do swoich potrzeb, możemy na przykład tabelę z powiązaną treścią przesunąć (za pomocą tabeli "manage fields" w danym rodzaju zawartości), możemy inaczej skonfigurować widok (na przykład jako skróty wpisów) i tak dalej. Nie ma też żadnych przeciwwskazań, aby potworzyć więcej takich powiązanych tabel i linków. W jednym z wdrożeń użyłem nawet tego sposobu do wiązania ze sobą segmentów tego samego typu (powstał z tego prosty katalog usług).

Mam nadzieję, że nie zmarnowałem Waszego czasu. Powodzenia!

Część Kursu: 
Drupal - Przepisy
3.666665
Twoja ocena: None Średnia: 3.7 (3 votes)