
Posted on 12 Feb
I've been working on a project in Drupal 6 Commons which involves theming the user page, which is kind've a rats nest of information and options. The client wanted something with much less.
The first thing I wanted to do was remove a bunch of stuff and change the text on labels. This is a Drupal 6 project so I needed to use hook_theme() in template.php so Drupal would use my form hook.
/** * Implementation of hook_theme. */ function mytheme_theme() { return array( 'user_profile_form' => array( 'arguments' => array('form' => NULL), ), ); }

The form uses the "value" of user-profile-form which I found using firebug at the bottom of the form. That's what you need to use in hook_theme() and elsewhere.
Now I could use the following form hook to unset much of the excess and change text.
/** * Theme override for user page */ function mytheme_user_profile_form($form) { unset($form['account']['mail']['#description']); unset($form['account']['name']['#description']); unset($form['account']['pass']['#prefix']); $form['submit']['#value'] = 't(Save All Changes)'; $form['account']['pass']['pass1']['#title'] = t('Reset your password'); $form['account']['pass']['pass2']['#title'] = t('Confirm new password'); //dpm($form); //uncomment to look at contents of form return (drupal_render($form)); }
This is a quick way of just removing elements that are already there and working with what's left. If I wanted though I could rebuild the form in a template file.
/** * Implementation of hook_theme. */ function mytheme_theme() { return array( 'user_profile_form' => array( 'arguments' => array('form' => NULL), 'path' => drupal_get_path('theme','mytheme') . '/templates', 'template' => 'user-profile-form', ), ); }
This implementation of hook_theme() tells Drupal to look for the template file 'user-profile-form.tpl.php' inside /templates in my theme folder. From there I could use a preprocess function to rebuild the form using drupal_render().
function mytheme_preprocess_user_profile_form(&$vars) { $vars['name'] = drupal_render($vars['form']['account']['name']); $vars['mail'] = drupal_render($vars['form']['account']['mail']); $vars['pass'] = drupal_render($vars['form']['account']['pass']); }
Then inside user-profile-form.tpl.php I could print the following;
<?php print $name; print $mail; print $pass; //print drupal_render($form); uncomment to load rest of form ?>
If this were a Drupal 7 project I could use hook_form_alter() inside template.php.
/** * Implementation of hook_form_FORM_ID_alter(). */ function hook_form_user_profile_form_alter(&$form, &$form_state, $form_id) { //dpm($form); }
hook_form_alter() in Drupal 6
In Drupal 6 if there are required fields you won't be able to just unset them, you'll need to use hook_form_alter() which needs to be inside a module. You would create a file like so called maybe, "themeforms.info" and put this inside it,
name = themeforms description = themeforms implements hook_form_alter to theme tha forms core = 6.x package = "themeforms"
And a file called, "themeforms.module"