Contenuti correlati in Drupal 7 con Views

Pubblicato da Nicola Rainiero il 16-05-2013 (aggiornato il 08-06-2015)

Dopo alcuni test e aver provato tre diversi tipi di tutorial che non non ne volevano sapere di funzionare a dovere, ho finalmente trovato il miglior compromesso per il mio sito e cioè contenuti correlati in base alla tassonomia e collocati come blocco sopra il campo dei commenti. Ecco le mie impostazioni in Views e come inserire il blocco risultante direttamente nel template node.tpl.php del tema predefinito.

Poter mostrare i contenuti simili o correlati all'articolo che si sta leggendo è un modo molto appropriato per evidenziare e collegare i post. Allo stesso tempo può essere visto com un trucco per aumentare le pagine viste e la durata delle visite del proprio sito.

Come sempre sono partito dai moduli per Drupal 7.x e ho trovato in Comparison of Similar / Relevant content block modules un valido confronto tra quelli esistenti. Tuttavia le loro caratteristiche non mi hanno soddisfatto appieno, perché nessuno possedeva allo stesso tempo: il supporto multilingua, la memorizzazione della cache e la tassonomia. In effetti morivo dalla voglia di creare una nuova Views!

An example of Similar/Relevant content
Un esempio

Anche in questo caso ci sono molti tutorial che spiegano come creare un blocco con Views per questo scopo, ne elenco i tre tipi principali e alcune note:

Ho utilizzato chiaramente il terzo e al primo tentativo ho ottenuto quello che mi serviva. A seguire posto la mia configurazione.

Views per i Contenuti correlati

  • Da mio_sito/admin/structure/views si crea un nuovo blocco Vista (ho scelto di visualizzarlo come Tabella nel sotto menu Display format, perché la resa finale non richiede ulteriori modifiche al foglio di stile):
    Create a new view block
  • Si clicca su Add del Contextual filter -> Content: Nid -> Provide default value -> Content ID from URL
    Add in Contextual filter the Content: Nid item
  • Si clicca su Add di Relationship -> Content: Taxonomy terms on node -> specify the appropriate vocabulary
    Add in Relationship the Content: Taxonomy terms on node item
  • Si clicca su Add di Relationship -> Taxonomy term: Content using vocabulary as specified above -> Check off Require this relationship
    Add in Relationship the Taxonomy term: Content using the proper vocabulary
  • Si mette yes su Use aggregation
    Look the arrow in the picture
  • Se si necessita di visualizzare un'immagine ed un titolo per ogni nodo come ne mio caso, si aggiungono i rispettivi campi ricordandosi di mettere su off Require this relationship
    Add Image Field
    Add Title field
  • Si clicca su Add del Sort Criteria -> Content: Nid. In aggregation settings, select Count. La relationship va settata come descritto in precedenza e si seleziona sort descending
    Add in Sort Criteria the Content: Nid item
  • Si clicca su Add del Contextual filter -> Content: Nid -> Stesso valore di relationship -> Provide default value -> Content ID from URL -> Si va in fondo alla finestra e si espande "More" poi si spunta "Exclude" per rimuovere il nodo corrente dalla vista
    Add in Contextual filter the Content: Nid item
  • Si clicca su Add di Filter Criteria -> Content: Language se si ha un sito multi lingua -> Solito valore di relationship
    Add in Filter Criteria the Content: Language item
  • Finalmente si possono sistemare le opzioni per la tabella
    Style options for the table
  • Ricordarsi di cliccare su Save in alto a destra e il nuovo blocco sarà pronto per l'inserimento nel proprio sito.
    The final settings overview

Come piazzare il blocco

Si hanno due possibilità:

  1. La via classica è quella di andare in Blocchi (mio_sito/admin/structure/block) e seguire le istruzioni a video scegliendo in quale regione di blocchi piazzarlo.
  2. Se invece lo si vuole sistemare in modo più preciso si può seguire questa fantastica guida: Placing the contents of a block in any location, basta ricavare il nome del "block_delta" del proprio blocco. Come? Visitando sempre la pagina dei Blocchi e cliccando sul blocco in questione, nel link risultante c'è la soluzione. Nel mio caso: mio_sito/admin/structure/block/manage/views/related_content-block/configure

    Ricavata questa variabile basta aggiungere alcune righe al template del nodo (node.tpl.php) del proprio tema personalizzato (mai sovrascrivere i temi originali!). Se utilizzate un tema derivato da Bartik basta aggiungere un codice simile a questo, sopra i commenti (se ovviamente volete il vostro blocco in questa posizione):

    [... file originale ...]
    <?php
    global $language;
    $block = module_invoke('views', 'block_view', 'related_content-block');
    if (($language->language == 'it') && isset($block)) {
    echo "<div style='font-size:20px; font-weight:900;'>Contenuti correlati</div>";
    }
    else {
    echo "<div style='font-size:20px; font-weight:900;'>";
    print render($block['subject']);
    echo "</div>";
    }
    print render($block['content']);
    echo "";
    echo "";
    ?>
    [... file originale ...]
    <?php print render($content['comments']); ?>

(13/06/2013) Ho aggiunto "isset($block)" per controllare se la variabile $block non è vuota, in caso contrario il titolo "Contenuti correlati" verrebbe visualizzato ovunque nelle pagine in italiano.




Potrebbero interessarti anche:

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.