Customizing and Overriding User Login page, Register, and Password Reset in Drupal 6 and 7
2014-05-16 09:42
204 查看
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.
Step 1.
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
For D6:
Notes about that code:
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
For D7:
Notes about the D7 version:
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.
Note: As it is the case for D6, it's
Step 3.
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:
Notes about that code:
Change the function name by replacing "yourtheme" with the name of your theme
The line
The second line renders the form and adds that code to the
For D7:
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.
The above preprocess functions simply add a variable into the $vars array that is then displayed in the .tpl.php file. Much more complex manipulation of the content of the render array is possible.
Please note, that the preprocess functions should go into the template.php file.
Step 4.
Create template files to match the
For D6
We need the following template files (make sure to use a dash, not an underscore) :
For D7
As for D6 but with
Step 5.
Paste the following into user-login.tpl.php. Modify as necessary for
For D6:
For D7:
Note the change to the syntax for causing Drupal to render the form. Also, the D7 sample uses a different class for the div, but that's just a matter of preference.
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.
preprocessing to set variables
registration of functions in the theme registry
creation of one or more theme templates.
Step 1.
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), ), ); } ?>
Notes about that code:
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_passnot
user_password
For D7:
<?php function 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' ), ); $items['user_pass'] = array( 'render element' => 'form', 'path' => drupal_get_path('theme', 'yourtheme') . '/templates', 'template' => 'user-pass', 'preprocess functions' => array( 'yourtheme_preprocess_user_pass' ), ); return $items; } ?>
Notes about the D7 version:
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.
Note: As it is the case for D6, it's
user_passnot
user_password
Step 3.
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:
<?php function 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']); } ?>
Notes about that code:
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
$variablesarray, which gets passed to the template as
$intro_text
The second line renders the form and adds that code to the
$variablesarray, which gets passed to the template as
$rendered
For D7:
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.
<?php function 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'); } function yourtheme_preprocess_user_pass(&$vars) { $vars['intro_text'] = t('This is my super awesome request new password form'); } ?>
The above preprocess functions simply add a variable into the $vars array that is then displayed in the .tpl.php file. Much more complex manipulation of the content of the render array is possible.
Please note, that the preprocess functions should go into the template.php file.
Step 4.
Create template files to match the
'template'values defined above.
For D6
We need the following template files (make sure to use a dash, not an underscore) :
user-login.tpl.php
user-register.tpl.php
user-pass.tpl.php
For D7
As for D6 but with
user-register-form.tpl.phpfor the register form.
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>
For D7:
<p><?php print render($intro_text); ?></p> <div class="yourtheme-user-login-form-wrapper"> <?php print drupal_render_children($form) ?> </div>
Note the change to the syntax for causing Drupal to render the form. Also, the D7 sample uses a different class for the div, but that's just a matter of preference.
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.
相关文章推荐
- BI Java 补丁错误处理 :Cannot login to the SAP J2EE Engine using user and password as provided in the Filesystem Secure Store. Enter va
- [Ubuntu] Simple method to login SSH without insert user name and password via expect in linux
- SSH login expect shell script to supply username and password
- 无法连接 MKS: Login(username/password)incorrect
- Disable to auto complete fill in user name and password
- 无法连接 MKS: Login(username/password)incorrect
- Drupal 登录提示Unrecognized Username and Password. 【已解决】
- 无法连接 MKS: Login(username/password)incorrect
- Event in Master Page, Content Page and User Control
- t_user is not mapped [from t_user as u where u.loginname = :loginname and u.password =:password]
- How to Reset Forgotten Root Password in RHEL/CentOS and Fedora
- Login to Symantec Endpoint Protection Manager using your Active Directory User name and password
- android Login sava user and password
- Build Google IG like Ajax Start Page in 7 days using ASP.NET Ajax and .NET 3.0(转)
- Tapestry学习七:关于组件(二)TextField, PasswordField and PageLink
- Function Inheritance and Overriding and Function Overloading In D
- Transfer arguments between modal page and invoker page in asp.net 1.1
- Build Google IG like Ajax Start Page in 7 days using ASP.NET Ajax and .NET 3.0
- Troubleshooting the Personal Home Page Login Problems in 11.5.x
- Mai-a-hee mai-a-hu. I got the first place and the second place in goole page ranking.