Customizing the user login, register, and password reset pages is fairly simple, and uses the following concepts:
- preprocessing to set variables
- registration of functions in the theme registry
- creation of one or more theme templates.
In the site theme directory, create or edit your template.php file.
Step 2.
The first step is to implement hook_theme for your theme. In the template.php file for your theme, look for a function named
yourtheme_theme()
and modify it to add these return values. If the function doesn't exist, add the following:For D6:
<?php/**
* Registers overrides for various functions.
*
* In this case, overrides three user functions
*/function yourtheme_theme() {
return array(
'user_login' => array(
'template' => 'user-login',
'arguments' => array('form' => NULL),
),
'user_register' => array(
'template' => 'user-register',
'arguments' => array('form' => NULL),
),
'user_pass' => array(
'template' => 'user-pass',
'arguments' => array('form' => NULL),
),
);
}?>
- Change the function name by replacing "yourtheme" with the name of your theme
- The template can be the same for all three. The example above uses a different template for each case: user-login, user-register, and user-pass
- The template names must use a dash, not an underscore
- Note: It's
user_pass
notuser_password
<?phpfunction yourtheme_theme() {
$items = array();
$items['user_login'] = array(
'render element' => 'form',
'path' => drupal_get_path('theme', 'yourtheme') . '/templates',
'template' => 'user-login',
'preprocess functions' => array(
'yourtheme_preprocess_user_login'
),
);
$items['user_register_form'] = array(
'render element' => 'form',
'path' => drupal_get_path('theme', 'yourtheme') . '/templates',
'template' => 'user-register-form',
'preprocess functions' => array(
'yourtheme_preprocess_user_register_form'
),
);
return $items;
}?>
- The override for the User Password form is omitted for brevity.
- The 'path' lines tell Drupal where to find the .tpl.php files. This is optional, and in the code above, 'path' tells Drupal to find the files in the templates subdirectory of the theme's base directory.
- Note the "_form" added to the user_register element.
Now you implement three preprocess functions. There may be more concise ways to code this, but this works very well and is easy to read, so here we go!
For D6:
<?phpfunction yourtheme_preprocess_user_login(&$variables) {
$variables['intro_text'] = t('This is my awesome login form');
$variables['rendered'] = drupal_render($variables['form']);
}
function yourtheme_preprocess_user_register(&$variables) {
$variables['intro_text'] = t('This is my super awesome reg form');
$variables['rendered'] = drupal_render($variables['form']);
}
function yourtheme_preprocess_user_pass(&$variables) {
$variables['intro_text'] = t('This is my super awesome insane password form');
$variables['rendered'] = drupal_render($variables['form']);
} ?>
- Change the function name by replacing "yourtheme" with the name of your theme
- The line
$variables['intro_text']
adds the text that follows to the$variables
array, which gets passed to the template as$intro_text
- The second line renders the form and adds that code to the
$variables
array, which gets passed to the template as$rendered
The code is even simpler for D7 because we don't need to pass a variable containing the form content we want rendered. The variable exists already in the $vars array and can be rendered in the .tpl.php file.
<?phpfunction yourtheme_preprocess_user_login(&$vars) {
$vars['intro_text'] = t('This is my awesome login form');
}
function yourtheme_preprocess_user_register_form(&$vars) {
$vars['intro_text'] = t('This is my super awesome reg form');
}?>
Step 4.
Create template files to match the
'template'
values defined above. In this case, we only need two: user-login.tpl.php
and for D6, user-register.tpl.php
(make sure to use a dash, not an underscore) but for D7, user-register-form.tpl.php
.Step 5.
Paste the following into user-login.tpl.php. Modify as necessary for
user-register.tpl.php
(D6) and user-register-form.tpl.php
(D7):For D6:
<p><?php print $intro_text; ?></p>
<div class="my-form-wrapper">
<?php print $rendered; ?>
</div>
<p><?php print render($intro_text); ?></p>
<div class="yourtheme-user-login-form-wrapper">
<?php print drupal_render_children($form) ?>
</div>
Step 6.
Save your template.php file to the theme's main directory. Save your .tpl.php files in the same place for the D6 examples, or, in the case of the D7 examples, to the directory you specify in the 'path' element of the $items array.
Step 7.
Rebuild the cache. Go to Administration > Performance and click on "Rebuild Cache" on the bottom of the page.
Now, the user login page will contain the new text from the preprocess function, and the tpl.php file(s) can be modified to suit the site's needs.
No comments:
Post a Comment