Views contextual filters, relationships - argumenti i odnosi (veze)
U ovom času posvećujem posebnu pažnju radu sa argumentima u Views. Argumenti su delovi URL-a, na primer:
node/15 Prvi argument je node, drugi 15. taxonomy/term/10 Prvi argument taxonomy, drugi term, treći 10. user/67 Prvi argument user, drugi 67
Mislím da su ovi primeri jasni i ne zahtevaju dodatna objašnjenja.
Argumente možete dobiti pomoću funkcije arg()
<?php print arg(0) . '<br />'; print arg(1); ?>
Ako je URL bio node/15, biće prikazano:
node 15
Numeracija argumenata u funkciji arg počinje od 0. Sada pogledajmo koja su gotova rešenja u modulu Views.
Prikaz čvorova korisnika
Recimo da se nalazimo na stranici user/1 i treba da prikažemo blok čvorova korisnika sa uid = 1. Za to ćemo koristiti argument iz URL-a.
Dodajemo novi prikaz (view). Prikazujemo blok, u poljima navodimo naslov čvora, prikazujemo samo objavljene čvorove, sortiramo po datumu objave.
Naslov
Naslov: user_nodes
Format
Format: Unformatted list | Podešavanja
Prikaži: Fields | Podešavanja
Polja
Sadržaj: Naslov
Filter kriterijumi
Sadržaj: Objavljeno (Da)
Sort kriterijumi
Sadržaj: Datum objave (opadajuće)
Pager
Koristi pager: Prikaži određeni broj stavki | 15 stavki
Više link: Ne
Sada kliknemo da dodamo u Contextual filters (argumenti, kontekstualni filteri). Biramo:
Sadržaj: Autor uid
Zatim biramo:
When the filter value is NOT available Provide default value User ID from URL Provide default value
Sačuvamo prikaz. Postavimo blok u željeni region i odemo na stranicu user/1 gde će u našem bloku biti prikazani svi čvorovi korisnika sa uid = 1.
Prikaz povezanih čvorova
Sada ćemo složeniji primer. Recimo da želimo da povežemo jedan čvor sa nekoliko drugih. Za to se koriste polja node reference. Da bismo koristili ta polja veza, potreban nam je modul References i njegov podmodul node references.
http://drupal.org/project/references
Polja veza u Drupalu 7 omogućavaju da se jednom čvoru prikažu više korisnika i više čvorova istovremeno. Realizuje se to preko polja tipa node reference. Pošto se u Drupalu 7 polja mogu dodavati bilo kojoj entiteti, moguće je povezivati bilo koje entitete.
Na mom sajtu postoje 4 vesti i želim da povežem drugu vest sa prvom i trećom, recimo da su te vesti slične tematike.
Idemo u upravljanje poljima za tip sadržaja vesti i dodajemo polje node reference sa opcijom automatskog popunjavanja. Nazvaću polje "slične vesti". Zatim biramo koji tipovi sadržaja mogu imati veze sa čvorom, i postavljamo koliko čvorova se može izabrati za to polje. Izabrao sam samo vesti. Sačuvaj polje. Sada idemo u izmenu drugog čvora. Tamo je polje node reference slične vesti.
Vesti će se naravno prikazivati kao lista povezanih sa tim čvorom. Ali naš zadatak je da podesimo view.
Dodajemo novi view, opet u obliku bloka.
Naslov:
similar_news
Format:
Unformatted list | Podešavanja
Prikaži: Fields | Podešavanja
Polja
Sadržaj: Naslov
Filter kriterijumi
Sadržaj: Objavljeno (Da)
Sadržaj: Tip (= Vest)
Sort kriterijumi
Sadržaj: Datum objave (opadajuće)
Pager
Koristi pager: Prikaži određeni broj stavki | 5 stavki
Dodajemo argument (contextual filter) Sadržaj: Nid. Ali ovoga puta biramo
When the filter value is NOT available Provide default value Content ID from URL
U Relationships (odnosi, veze) dodajemo novu vezu Sadržaj: Slične vesti (field_similar) (ako Vaše polje ima drugačiji naziv, izaberite njegovo ime). Obratite pažnju da postoji isto polje ali sa oznakom reverse. To znači da je to obrnuta veza, tj. ako smo na stranici vesti 3, u bloku će se prikazati vest 2 (iako smo u vesti 2 izabrali veze sa vestima 1 i 3).
Rezultat će imati sledeća polja:
Contextual filters
Sadržaj: Nid
Relationships
Sadržaj: Slične vesti
Sada u polju Sadržaj treba da postavimo relaciju, umesto Do not use a relationship izaberite ime naše veze.
Polja
(field_similar) Sadržaj: Naslov
Sačuvamo view i blok postavimo u željeni region.
Sada na stranici vesti 2, u posebnom bloku biće prikazane slične vesti Vest 1 i Vest 3.