I've added a new theme to my site and I've added a new content type called code_excerpt. Now, I've created a new template called code_excerpt.tpl.php and added it to my theme folder but when I created a new page using the newly created code_excerpt as content type it appears that the template used is still page.tpl.php as opposed to code_excerpt.tpl.php. As I'm pretty new to drupal, is there anything else that I need to do in order to get my content type to utilize that template? Any suggestion would be much appreciated.


I believe it needs to be node--code-excerpt.tpl.php

don't forget to clear the cache.

Copy node.tpl.php to node--code-excerpt.tpl.php then modify code as necessary.

Here is my node.tpl.php file

 * @file
 * Default theme implementation to display a node.
 * Available variables:
 * - $title: the (sanitized) title of the node.
 * - $content: An array of node items. Use render($content) to print them all, or
 *   print a subset such as render($content['field_example']). Use
 *   hide($content['field_example']) to temporarily suppress the printing of a
 *   given element.
 * - $user_picture: The node author's picture from user-picture.tpl.php.
 * - $date: Formatted creation date. Preprocess functions can reformat it by
 *   calling format_date() with the desired parameters on the $created variable.
 * - $name: Themed username of node author output from theme_username().
 * - $node_url: Direct url of the current node.
 * - $terms: the themed list of taxonomy term links output from theme_links().
 * - $display_submitted: whether submission information should be displayed.
 * - $classes: String of classes that can be used to style contextually through
 *   CSS. It can be manipulated through the variable $classes_array from
 *   preprocess functions. The default values can be one or more of the following:
 *   - node: The current template type, i.e., "theming hook".
 *   - node-[type]: The current node type. For example, if the node is a
 *     "Blog entry" it would result in "node-blog". Note that the machine
 *     name will often be in a short form of the human readable label.
 *   - node-teaser: Nodes in teaser form.
 *   - node-preview: Nodes in preview mode.
 *   The following are controlled through the node publishing options.
 *   - node-promoted: Nodes promoted to the front page.
 *   - node-sticky: Nodes ordered above other non-sticky nodes in teaser listings.
 *   - node-unpublished: Unpublished nodes visible only to administrators.
 * - $title_prefix (array): An array containing additional output populated by
 *   modules, intended to be displayed in front of the main title tag that
 *   appears in the template.
 * - $title_suffix (array): An array containing additional output populated by
 *   modules, intended to be displayed after the main title tag that appears in
 *   the template.
 * Other variables:
 * - $node: Full node object. Contains data that may not be safe.
 * - $type: Node type, i.e. story, page, blog, etc.
 * - $comment_count: Number of comments attached to the node.
 * - $uid: User ID of the node author.
 * - $created: Time the node was published formatted in Unix timestamp.
 * - $classes_array: Array of html class attribute values. It is flattened
 *   into a string within the variable $classes.
 * - $zebra: Outputs either "even" or "odd". Useful for zebra striping in
 *   teaser listings.
 * - $id: Position of the node. Increments each time it's output.
 * Node status variables:
 * - $view_mode: View mode, e.g. 'full', 'teaser'...
 * - $teaser: Flag for the teaser state (shortcut for $view_mode == 'teaser').
 * - $page: Flag for the full page state.
 * - $promote: Flag for front page promotion state.
 * - $sticky: Flags for sticky post setting.
 * - $status: Flag for published status.
 * - $comment: State of comment settings for the node.
 * - $readmore: Flags true if the teaser content of the node cannot hold the
 *   main body content.
 * - $is_front: Flags true when presented in the front page.
 * - $logged_in: Flags true when the current user is a logged-in member.
 * - $is_admin: Flags true when the current user is an administrator.
 * Field variables: for each field instance attached to the node a corresponding
 * variable is defined, e.g. $node->body becomes $body. When needing to access
 * a field's raw values, developers/themers are strongly encouraged to use these
 * variables. Otherwise they will have to explicitly specify the desired field
 * language, e.g. $node->body['en'], thus overriding any language negotiation
 * rule that was previously applied.
 * @see template_preprocess()
 * @see template_preprocess_node()
 * @see template_process()
<?php if (!$page): ?>
  <article id="node-<?php print $node->nid; ?>" class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
<?php endif; ?>
    <?php if (!$page): ?>
    <?php endif; ?>
      <?php print render($title_prefix); ?>
      <?php if (!$page): ?>
      <h2 class="title" <?php print $title_attributes; ?>><a href="<?php print $node_url; ?>"><?php print $title; ?></a></h2>
      <?php endif; ?>
      <?php print render($title_suffix); ?>

      <?php if ($display_submitted): ?>
        <span class="submitted"><?php print $submitted; ?></span>
      <?php endif; ?>

    <?php if (!$page): ?>
  <?php endif; ?>

  <div class="content"<?php print $content_attributes; ?>>
      // Hide comments, tags, and links now so that we can render them later.
      print render($content);

  <?php if (!empty($content['links'])): ?>
      <?php print render($content['links']); ?>
  <?php endif; ?>

  <?php print render($content['comments']); ?>
<?php if (!$page): ?>
  </article> <!-- /.node -->
<?php endif; ?>
| improve this answer | |
  • Thanks, @No Sssweat I tried and renamed my file node--code-excerpt.tpl.php (and clear the cache) but now I get a lot of errors, not only on the page itself but even on the Home » Administration » Configuration » Development page in drupal code Warning: Cannot use a scalar value as an array in include() (line 8 of C:\wamp\www\drupal-7.41\sites\all\themes\theme_test\node--code_excerpt.tpl.php).code Can't paste the whole thing as it is too long – jazzo Feb 3 '16 at 10:25
  • @jazzo what did you put inside the file? – No Sssweat Feb 3 '16 at 10:28
  • for now, I literally copied what was inside page.tpl.php (so html + php tags) and I added a var_dump($directory);, nothing else – jazzo Feb 3 '16 at 10:29
  • also you need to put inside your theme's templates folder sites/all/themes/custom_theme/templates – No Sssweat Feb 3 '16 at 10:31
  • 1
    Additionaly you should use the content of node.tpl.php as default content for your custom template. – sgoelz Feb 3 '16 at 10:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.