drupaldrupal-templatesdrupal-nodesdrupal-content-types

How can I customize a specific node in Drupal 6 WHEN a custom template has already been applied to the node's content type?


[For Drupal 6] Let's say I've created a content type called "my_content_type". I can override the default template for that entire content-type by creating "page-node-my_content_type.tpl.php". But, what would be the best way to then further customize a single node of that content type (e.g., node 5555)?

I tried the following, but none worked:

None of these work. They all continue to use my original content-type template.


Solution

  • Drupal's page templates work on a suggestion system. Based on the current URL, an array of possible template files is created. It loops through the array (in reverse order) looking for template files that exists. The first one it finds, it will use.

    drupal's theme system provides a hook for you to modify the template suggestions.. open up your template.php and find

    function phptemplate_preprocess_page(&$vars) {
    

    the $vars variable is what contains the suggestions, specifically $vars['template_files']

    By default the only page suggestions that are available are

    As far as im aware, page-node-[node_type].tpl.php does not work by default, so its likely you have already modified the preprocess_page template to added in this functionality.

    However if you want to add more specific templates you could do something like this...

    function phptemplate_preprocess_page(&$variables) {
      if ($variables['node']->type != "") {
        $variables['template_files'][] = "page-node-" . $variables['node']->type;
        $variables['template_files'][] = "page-node-" . $variables['node']->type . "-" . $variables['node']->nid;
      }
    }
    

    this will allow the following hierarchy of template suggestions