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"
Väl inne i Views så väljer vi att skapa en ny genom att klicka på "Add new 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".
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.
Sök efter Taxonomiterm och välj fältet "Taxonomiterm: Termens ID" i listan, fortsätt genom att trycka på "Apply (all displays)".
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.
Under "Mer" bockar vi i "Allow multiple values". Avsluta med "Apply (all displays)".
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".
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.
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 ..."
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".
Sök upp och bocka i "Innehåll: NID".
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.
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 ...".
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.
Aktivera och klicka på "Apply ...".
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".
Sök upp och 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".
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.
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.
Bocka i "Exclude from display".
Klicka på "Aggregation settings".
Ändra till "Antal" och spara genom att trycka på "Apply".
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".
Sök upp och välj "Innehåll: Publicerad".
Välj "Group results together" som aggregtions metod"
Välj "Ja" under publicerad" ochj spara genom att klicka på "Apply ...".
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.
Sök upp och välj "Taxanomiterm: Namn".
Välj "Antal" som aggregationsmetod.
välj att sortera fallande (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.
Längst ner i listan finns vårat nya block. Klicka på "konfigurera".
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.
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.
Klicka sedan på "Töm all cache". Allting som finns i cachen rensas nu och du kan direkt se resultatet på din hemsida.
Om du har gjort allt rätt så kommer resultatet att se ut ungefär som nedanstående bild.