ADDING A REGION TO THE NODE TEMPLATE

Categories:
Difficulty:

Typically, regions are returned in a theme's page.tpl.php file. This works for almost everything, but as we found recently, there are situations where a region might need to be made available to the node.tpl.php file for the purpose of more specifically control a block's location within a node. A good example of this is a node that has comments enabled. The node content and its comments will appear one after the other, both being returned by the value $content in the page.tpl.php. How to add a block between them?

First, we want to prepare the theme to accept our node-based region. This will involve defining a new region, overriding the default node.tpl.php file, and creating a theme override. Then, it's just an issue of modifying the node template to print the region correctly.

Define the region

In your theme, you should find a .info file. This file exists to identify the theme to Drupal, as well as to provide you a way of globally including any regions, css or javascript. The top of the file should look something like this:

name = My Theme
description = A description of my theme.
screenshot = images/screenshot.png
core = 6.x
engine = phptemplate

Just below this, add the following:

; Regions
regions[node_bottom] = Node Bottom

... and save the file.

Override the default node template

Navigate inside your Drupal directory, and copy /modules/node/node.tpl.php into your theme directory.

Copy the node.tpl.php from the core modules directory into your theme

Make the region available to the node template

Regions, by default, can only be returned from the page.tpl.php. This is easy enough to fix. Open your theme's template.php file (create it if it doesn't exist), and add this to it:

function YOURTHEME_preprocess_node(&$vars) {
 $vars['content_footer'] = theme('blocks', 'content_footer');
}

Rebuild the theme registry

Most of the changes you've made so far will not be automatically recognized by Drupal. You'll have to rebuild the theme registry. To do this, log into your Drupal environment as an administrator and go to the Themes page (Administer > Site Building > Themes), and click the Save button. This will force Drupal to rescan your theme, picking up any new files (node.tpl and template.php), as well as including the new region being defined from the .info file.

Theme Configuration page

Add the new region to the node template

Everything you've done so far has been to support this final step, which is to actually return the region in the template. Open your theme's node.tpl.php, and paste this wherever you like (hint: Just below $content):

<?php if($node_bottom): ?>
  <div class="node-bottom">
    <?php print $node_bottom; ?>
  </div>
<?php endif; ?>

Add blocks to your new region

Everything's done! All you need to do now is add a block or two to this region (Administer > Site Building > Blocks).

Comments

Add your two cents

The content of this field is kept private and will not be shown publicly.
1 + 8 =
Solve this simple math problem and enter the result. E.g. for 1+3, enter 4.