10

I want to theme the template for edit or add a node for a specific content type.
For example, to theme all the content type forms I use the file page-node-{add|edit}.tpl.php (depending what I need to do add or edit).

But I didn't found the template name for a custom node type, for example Products.

I need to theme only for Products, but not for the other content types.

I've tried with page-node-edit-product.tpl.php and page-node-product-edit.tpl.php but no luck.

googletorp
  • 33,075
  • 15
  • 67
  • 82
Leandro Ardissone
  • 3,009
  • 6
  • 32
  • 31

6 Answers6

16

Hmm. There may be a better way but what about a preprocess function.

I'm still really new to Drupal, so I would maybe try something like this [code may not work]:

<?php
function themeName_preprocess_page(&$vars, $hook) {
  if ((arg(0) == 'node') && (arg(1) == 'add' && arg(2) == 'product')) {
    $vars['template_files'][] =  'page-node-add-product';
  }
}
?>

Be sure to clear cache and theme registry after making new preprocess functions.

hanleyhansen
  • 6,304
  • 8
  • 37
  • 73
easement
  • 6,119
  • 3
  • 29
  • 36
1

This is what I think is the 'proper' way to do it.

From the node module:

$form['#theme'] = array($node->type .'_node_form', 'node_form');

So Drupal will try to theme 'product_node_form'

so you can create a module which implements this.

You will need to implement [hook_theme][1], and provide a function or template.

You may find that it is easier to use [hook_form_alter][2] to add some classes and normal CSS to change the appearance.

Jeremy French
  • 11,707
  • 6
  • 46
  • 71
  • Ah, but I want to use a complete different template rather than theme the form only. – Leandro Ardissone Oct 08 '09 at 17:37
  • Though you can do as you have posted, I'm not sure this is what the OP wants. This will only change the template for the actual form (which currently doesn't use any), this will not change the page template that's being used. From his examples is seems like this is what he wants. – googletorp Oct 09 '09 at 09:35
1
function themename_preprocess_page(&$vars) { 
  // Add per content type pages
  if (isset($vars['node'])) {
    // Add template naming suggestion. It should alway use hyphens.
    // If node type is "custom_news", it will pickup "page-custom-news.tpl.php".
    $vars['template_files'][] = 'page-'. str_replace('_', '-', $vars['node']->type);
  }
}

Add the above code in template.php

Then create couple of tpl files

1) page-contenttype.tpl.php

used when displaying and editing the content

2) page-node-add-contenttype.tpl.php

used when adding that content type.

Works with drupal 6.

Alauddin
  • 11
  • 2
0

I'm a drupal noob myself, but would something (might need a little more) like this work?

function phptemplate_node_form($form)
{
  switch ($form['#node']->type) {
    case 'product':
    return theme_render_template(path_to_theme().'/node-edit-product.tpl.php', array('form' => $form));
    default:
     return theme_node_form($form);
}
}
Detect
  • 2,049
  • 1
  • 12
  • 21
0

For me the same problem. Prompt where to insert a code:

<?php
function themeName_preprocess_page(&$vars, $hook) {
  if ((arg(0) == 'node') && (arg(1) == 'add' || arg(2) == 'product')) {
    $vars['template_files'][] =  'page-node-add-product';
  }
}
?>

It is entered in template.php or in page-node - {add|edit}-example.tpl.php?

0

I put this in my template.php file in my theme's directory:

function MYTHEMENAME_theme($existing, $type, $theme, $path) {
  return array(
    // tell Drupal what template to use for the edit form
    family_individual_node_form' => array(
        'arguments' => array('form' => NULL),
        'template' => 'node-family_individual-edit'
    )
  );
Ram kiran Pachigolla
  • 20,897
  • 15
  • 57
  • 78
Julie
  • 1