Note: I've updated this tutorial for Drupal 6 in this post on the Geeks and God website.

This example "mysite" module demonstrates hook_form_alter. There is a lot of good info out there about hook_form_alter, but I found very few examples that put all of the pieces of custom module creation together in such a simple way as this.

The also function adds an example "form_array" element that displays everything in a form using print_r. Installing the Devel Module is probably a better way to get this same information. You wouldn't want to leave this hunk of code on a production site, but it is pretty nice for seeing what form elements are available to manipulate.

Uncomment print $form_id; to show the name of every form on your site as you navigate.

mysite.info

name = mysite
description = Customizations and tweaks for my site.
package = Other

mysite.module

<?php
// $Id: mysite.module,v 0.1 2008/06/07 18:16:00 micah Exp $
/**
  * See http://cvs.drupal.org/viewvc.py/drupal/contributions/modules/drupalorg/
  * for additional examples.
  */
/**
  * Implementation of hook_form_alter().
  */
function mysite_form_alter($form_id, &$form) {
  // print $form_id;
  switch ($form_id) {
    case 'story_node_form':
      // Place your form altering code here.
      unset($form['menu']);
      unset($form['author']);
      unset($form['log']);
      $form['form_array'] = array(
        '#value' => '<pre style="color: #000; background: #cba; border: 1px solid brown;" >'.
          print_r($form, 1) .'</pre>',
        '#weight' => '5',
      );
      break;
    case 'story_node_form':
      unset($form['log']);
      break;
    case 'user_login':
      $form['name']['#description'] = t('Enter your username, if you can remember it.');
      $form['pass']['#description'] = t('You probably forgot this. Just use password reset again.');
      break;
     /* might want to do similar thing for user_login_block */
  }
}
Topics: