Managed ad

Skapa ett block för relaterat innehåll i Drupal 7 med Views

Av Pontus, 19 november, 2013

På alla mina sidor vill jag ha länkar till relaterade artiklar. Alltså andra artiklar som har en eller flera taxonomi termer gemensamt med den vi tittar på. Det finns en rätt metod och en felaktig, jag ska förklar den felaktiga och varför den inte fungerar samt gå igenom den rätta metoden.

Den metoden som de flesta sidor visar så skapar man en View baserad på titeln, skapar en relation med termerna och filtrerar bort den aktuella sidan. Problemet med den metoden är att den även inkluderar sidor som inte är publicerade. Vilket betyder att det finns länkar till sidor som besökarna inte har rättigheter att se. Inte riktigt vad man vill ha. Istället skapar man en View baserad på taxanomi termerna.

Först måste man självklart ha installerat modulen Views så om du inte redan har gjort det så är det dags nu. När den är installerad kan du fortsätta här. 

Gå till "Struktur" -> "Views"

Image
Starta views

Väl inne i Views så väljer vi att skapa en ny genom att klicka på "Add new view"

Image
Skapa en ny view

Vi döper våran view till något som vi kommer ihåg i fältet under "View name", här har jag döpt den till Relaterat innehåll Teknikbloggen. Den texten kommer inte besökarna att se. Efter "Visa" väljer vi "Taxanomitermer" i rullisten, "of type" väljer vi den termen som vi använder på den här innehållstypen där vi ska använda det här blocket.

Bocka ur "Create a page" och bocka istället i "Create a block". Skriv i Blocktiteln vad du vill att det skall stå ovanför länkarna. Välj antal som ska synas och välj att inte använda pager. Display format skall vara "Unformatted list".

Image
Skapa ett block baserat på termer

Skapa kontextuellafilter

Nu är det dags att börja skapa. Vi börjar med att lägga till ett Contextual filter. Du hittar den till höger under Advanced.

Image
Lägg till ett contextual filter

Sök efter Taxonomiterm och välj fältet "Taxonomiterm: Termens ID" i listan, fortsätt genom att trycka på "Apply (all displays)".

Image
Välj att använda taxonomi termens id

Här väljer vi nu att ange ett standard filter som skall användas genom att bocka i "Provide default value", under "Typ" väljer vi "Taxonomy term ID from URL". Om du använder flera olika vokabulärer så väljer du den som används på de noder där du vill att blocket skall synas. Jag har här valt "Teknikbloggen. 

Se till att övriga bockar är enligt bilden. Klicka sen på "Mer" längst ner.

Image
Välj att använda nodens termer som standard värde

Under "Mer" bockar vi i "Allow multiple values". Avsluta med "Apply (all displays)".

Image
Under Mer tillåt filtret att returnera multipla värden

Skapa relationer

Nu skapar vi en relation till alla sidor som innehåller samma termer. Klicka på "Lägg till" till höger om "Relationsships som även den finns under "Advanced".  

Image
Klicka på lägg till relation

Sök efter Taxonomiterm och i listan bockar du i "Taxonomiterm: Innehåll using XYZ", "XYZ" är namnet på fältet för innehållstypen. Jag har döpt den till Kategorier i både Teknikbloggen och Hundbloggen vilket betyder att jag har två likadana här och får chansa på att jag tar rätt. Därför måste jag testa blocket redan nu för att kunna se om jag har tagit rätt, om du har samma problem så kan du titta i slutet av artikeln hur du lägger till blocket till sidan.

Image
Välj fältet Taxonomiterm: Innehåll using ... för relationen

Relationen döper vi till något lämpligt och bockar i "Require this relationsship". Vi vill ju bara ha med noder som innehåller samma termer. Därefter sparar vi relationen med "Apply ..."

Image
aGe relationen ett namn samt bocka i att den krävs

Ta bort den aktuella sidan från resultatet

Vi vill ju inte att sidan som vi är inne på ska finnas med i listan, därför behöver vi skapa ett nytt contextual filter som tar bort den aktuella sidan. Klicka återigen på "Lägg till" till höger om "Contextual filters".

Image
Klicka på lägg till contextual filter

Sök upp och bocka i "Innehåll: NID".

Image
Välj Innehåll: NID i listan

Bocka i "Provide default value" och välj "Content ID from URL". Vi säger nu att vi vill använda den aktuella sidans id som värde. Klicka sedan på "Mer" längst ner.

Image
Ange Content ID from URl som standard värde

Under "Mer" bocka i "Exclude". Vi har nu sagt att den aktuella sidan ej skall finnas med i sökresultatet. Spara genom att klicka på "Apply ...".

Image
Under Mer tillåt filtret att returnera multipla värden

Aktivera aggregation och lägg till titel fältet

Som vi har ställt upp sökfrågan nu så kommer varje sida att synas lika många gånger i resultatet som den har termer. För att lösa det så aktiverar vi aggregation, för er som pratar SQL så är aggregation samma sak som "group by" i SQL. Istället för taxonomitermens värde så grupperas resultatet ihop och vi kan få antal-värden, max-värde, min-värde osv.

Längst ner under "Advanced" finns "Other" i den listan finns "Use aggregation". Klicka på "Nej" för att aktivera.

Image
Klicka på Use aggregation under Other som finns under Advanced

Aktivera och klicka på "Apply ...".

Image
Aktivera aggregation och spara

Om vi nu testar vårat block så kommer vi bara att få en lista med termer, inte vad vi önskar. Vi måste därför lägga till fältet för titeln. Klicka på "lägg till" til höger om "Fields".

Image
Lägg till ett fält

Sök upp och välj fältet "Innehåll: Titel".

Image
Välj fältet Innehåll: titel

I nästa skärm ska vi välja aggregations metod. Vi väljer då "Group results together".

Image
Välj Group by som aggregations metod

I tredje skärmen bockar vi ur "Create a label" och så bockar vi i "Link this field to the original piece of content" så att man kan klicka på rubriken för att komma till sidan.

Image
Ta bort bocken för create a label och bock i Link this field ...

Ta bort termerna i listan

Nu har ett block som visar rubriker samt termerna. VI måste då ta bort termerna för de vill vi inte ha med samt att vi ska ändra så att vi får fram antalet termer för att kunna sortera listan efter relevans.

Först ta vi bort synligheten för termerna genom att klicka på "Taxonomiterm: Namn" fältet.

Image
Klicka på Taxonomiterm: namn

Bocka i "Exclude from display".

Image
Välj att exkludera termerna från resultatet

Klicka på "Aggregation settings".

Image
Klicka för att ändra aggregation inställningarna

Ändra till "Antal" och spara genom att trycka på "Apply".

Image
Ändra till att räkna antal

Sortera bort ej publicerade noder

Vi vill ju inte att noder som vi inte har publicerat skall finnas med i listan. Därför måste vi nu lägga till ett filter för att filtrera bort ej publicerat material.

Klicka på "Lägg till" till höger om "Filter criteria".

Image
Lägg till filter

Sök upp och välj "Innehåll: Publicerad". 

Image
Sök och välj fält Innehåll: Publicerad

Välj "Group results together" som aggregtions metod" 

Image
Välj group by som aggregationsmetod för publicerad

Välj "Ja" under publicerad" ochj spara genom att klicka på "Apply ...". 

Image
Välj att bara ta med publicerade noder

I listan vill vi ha noden med högst relevans längst upp och ju mindre antal termer som de har gemensamt desto längre ner ska de finnas. Så nu lägger vi till en sortering. 

Image
Lägg till sortering

Sök upp och välj "Taxanomiterm: Namn". 

Image
Sök upp och välj Taxonomiterm: Namn

Välj "Antal" som aggregationsmetod. 

Image
Välj antal som aggregations metod

välj att sortera fallande (descending). 

Image
Välj sortering Descending

Lägg till blocket på hemsidan

Nu är vi klara inne i Views, därför klickar vi nu på "Spara" längst upp till höger. Därefter är det dags att lägga till blocket någonstans på hemsidan.

Gå till Struktur -> Block.

Image
Gå till struktur -> block

Längst ner i listan finns vårat nya block. Klicka på "konfigurera".

Image
Klicka på konfigurerar för blocket

Väj placering för ditt tema. Eftersom att min sida är uppdelad efter olika innehållstyper och de olika innehållstyperna har olika termer så måste jag även välja att endast visa blocket på rätt typ av innehåll. Om den visas på fel typ så kommer den inte att visa något resultat. Därför måste jag skapa ett till block för de andra termerna. Klicka slutligen på spara och därefter spara i nästa rutan igen.

Image
Välj placering för blocket

Rensa cachen för att se resultatet direkt

Om inte resultatet syns direkt så kan det bero på att du har Boost aktiverat eller någon annan cachningsmekanism. Då kommer resultatet att synas först när cachen är för gammal. Om du är tålmodig så går du till Konfiguration -> Prestanda. 

Image
Gå till konfiguration -> prestanda

Klicka sedan på "Töm all cache". Allting som finns i cachen rensas nu och du kan direkt se resultatet på din hemsida.

Image
Klicka på töm cache

Om du har gjort allt rätt så kommer resultatet att se ut ungefär som nedanstående bild.

Image
Resultatet
Kategorier

Managed ad