How do you remove the default title and body fields in a CCK generated Drupal content-type?

StackOverflow https://stackoverflow.com/questions/89672

  •  01-07-2019
  •  | 
  •  

Question

When you create a new content type in Drupal using the Content Creation Kit, you automatically get Title and Body fields in the generated form. Is there a way to remove them?

Was it helpful?

Solution

If you're not a developer (or you want to shortcut the development process), another possible solution is to utilize the auto_nodetitle module. Auto nodetitle will let you create rules for generating the title of the node. These can be programmatic rules, tokens that are replaced, or simply static text. Worth a look if nothing else.

OTHER TIPS

To remove the body edit the type, expand "Submission form settings" and put in blank for body field label. For title you can rename it to another text field. If you really have no need for any text fields you can create a custom module, say called foo, and create function foo_form_alter() which replaces $form['title'] with a #value when $form['type']['#value'] is your node type.

No need to install anything:
when editing the content type, press "Edit"
(on the menu of Edit | Manage fields | Display fields )
click on the Submission form settings

on the Body field label:
Leave it blank, it would remove the Body field.

If you're not a developer (or you want to shortcut the development process), another possible solution is to utilize the auto_nodetitle module. Auto nodetitle will let you create rules for generating the title of the node. These can be programmatic rules, tokens that are replaced, or simply static text. Worth a look if nothing else.

And to add on to William OConnor's solution...

The module is poorly documented unfortunately. It's really only effective if you use PHP with it in my opinion. Check off the "Evaluate PHP in Pattern" and type into the "Pattern for the title" field something like:

<?php echo $node->field_staff_email[0]['email']; ?>

or:

<?php echo $node->field_staff_name[0]['value'] . '-' . gmdate('YmdHis'); ?>

...where I had a field with an internal name of "field_staff_email" and was using the CCK Email module -- thus the 'email' type was used. Or, I had a field with an internal name of "field_staff_name" and was just an ordinary text field -- thus the 'value' type was used. The gmdate() call on the end is to ensure uniqueness because you may have two or more staff members named the same thing.

The way I discovered all this was by first experimenting with:

<?php print_r($node); ?>

...which of course gave crazy results, but at least I was able to parse the output and figure out how to use the $node object properly here.

Just note if you use either of these PHP routines, then you end up with the Content list in Drupal Admin showing entries exactly as you coded the PHP. This is why I didn't just use gmdate() alone because then it might be hard to find my record for editing.

Note also you might be able to use Base-36 conversion on gmdate() in order to reduce the size of the output because gmdate('YmdHis') is fairly long.

The initial answers are all good. Just as another idea for the title part... how about creating a custom template file for the cck node type. You would copy node.tpl.php to node-TYPE.tpl.php, and then edit the new file and remove where the title is rendered. (Dont forget to clear your cache).

Doing it this way means that every node still has a title, so for content management you aren't left with blank titles or anything like that.

HTH!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top