Skip to main content
Working from scratch, following simplicity

Related Content in Drupal 7 using Views

After some boring tests and three different types of tutorial that have never been able to work on my site, finally I have found the best compromise for me: a related content based on the taxonomy and placed as a block above the comments field. Here is my Views settings and how to insert the resulting block directly in the node.tpl.php template file.

In my opinion Similar/Relevant content is an appropriate manner for highlighting and linking the own posts. At the same time is a trick for increasing the permanence of visitors in my site!

As usual I started my research from the existent modules for Drupal 7.x and I have found an eloquent answer reading the Comparison of Similar / Relevant content block modules page. However their features didn't satisfied me, because every module doesn't have all the characteristics I need: multilingual support, caching and term base. Actually I would have liked to create a new Views!

An example of Similar/Relevant content
An example

Even in this case there are many tutorials that explain how to create a view block for this purpose, I put the three different types and my notes:

I have followed the third one and at the first attempt I have obtained that I needed. Therefore I have changed some aspects to fit my expectations, below there is my configuration.

Related Content view settings

  • From my_site/admin/structure/views create a new view block (I have selected Table in the Display format sub menu, because its pagination is easier):
    Create a new view block

  • Add Contextual filter -> Content: Nid -> Provide default value -> Content ID from URL
    Add in Contextual filter the Content: Nid item
  • Add Relationship -> Content: Taxonomy terms on node -> specify the appropriate vocabulary
    Add in Relationship the Content: Taxonomy terms on node item

  • Add 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

  • Turn yes Use aggregation
    Look the arrow in the picture
  • If you need to show an image and a title like me, add the proper field and remember to Check off Require this relationship
    Add Image Field
    Add Title field

  • Add Sort Criteria -> Content: Nid. In aggregation settings, select Count. Use relationship as described above and sort descending
    Add in Sort Criteria the Content: Nid item

  • Add Contextual filter -> Content: Nid -> Use the same value of relationship -> Provide default value -> Content ID from URL -> Scroll down and expand "More" then check "Exclude" to remove current node from the view
    Add in Contextual filter the Content: Nid item
  • Add Filter Criteria -> Content: Language if you have a multilingual site -> Use the same value of relationship
    Add in Filter Criteria the Content: Language item
  • Finally fix the Style options for the table
    Style options for the table
  • Click on the Save button in the upper right side and you will have a new view block ready to be placed where you want.
    The final settings overview

Placing the View Block

You have two choice:

  1. If you want just put it in a block region go in the Block menu (my_site/admin/structure/block) and follow the classical instructions.
  2. If you want Placing the contents of a block in any location, discover the "block_delta" name of your block. How? You can determine what this is by visiting the block administration page and editing the block. For example: my_site/admin/structure/block/manage/views/related_content-block/configure

    And overwrite the node template file of your custom theme (node.tpl.php). In my case I created my theme from Bartik and I put the following code above the comments:

    [... original file ...]
    <?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 "";
    ?>
    [... original file ...]
    <?php print render($content['comments']); ?>

(13/06/2013) I have added "isset($block)" in order to check if $block is not empty, otherwise the title "Contenuti correlati" is present everywhere in the Italian section.

Add new comment

The content of this field is kept private and will not be shown publicly.

Plain text

  • No HTML tags allowed.
  • Web page addresses and email addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Sponsored Links
PubblicitĂ 

Nicola Rainiero

A civil geotechnical engineer with the ambition to facilitate own work with free software for a knowledge and collective sharing. Also, I deal with green energy and in particular shallow geothermal energy. I have always been involved in web design and 3D modelling.