Customizing the login, registration and request password full page layout
Last modified: August 26, 2009 - 02:51
description
This snippet allows you to load a custom layout file and override the login, request password and registration page.
usage
Useful if you want to have a stand alone login page, for example.
Step 1 of 2
- make a copy of your page.tpl.php file and rename it to be page-login.tpl.php.
- Using a text editor like notepad.exe or equivalent, modify the layout of page-login.tpl.php file to suit your desires
- Upload your new page-login.tpl.php layout file to your active theme folder
Step 2 of 2
- Using a text editor like notepad.exe or equivalent, open your template.php file.
- If do not already have a
_phptemplate_variablesfuction in this file you can paste snippet version #1 into your file directly. If you already have a_phptemplate_variablesfunction you will have to paste snippet version #2 into the function_phptemplate_variables. - Upload your edited template.php file to your active theme folder and your new layouts will take effect automatically
Snippet version #1
<?php
/**
* This snippet loads a custom page-login.tpl.php layout file when
* users click through to the login, request password or register pages
*/
function _phptemplate_variables($hook, $variables = array()) {
switch ($hook) {
case 'page':
global $user;
if (arg(0) == 'user'){
if (!$user->uid) { //check to see if the user is logged in. If not display the special login page layout
$variables['template_file'] = 'page-login';
}
elseif (arg(1) == 'login' || arg(1) == 'register' || arg(1) == 'password' ) {
$variables['template_file'] = 'page-login';
}
}
break;
}
return $variables;
}
?>Snippet version #2
This version of the snippet goes inside an existing _phptemplate_variables function that already has a return $variables statement.
<?php
global $user;
if (arg(0) == 'user'){
if (!$user->uid) { //check to see if the user is logged in. If not display the special login page layout
$variables['template_file'] = 'page-login';
}
elseif (arg(1) == 'login' || arg(1) == 'register' || arg(1) == 'password' ) {
$variables['template_file'] = 'page-login';
}
}
?>
It does not work. Login form
It does not work. Login form still the same. I have created a file page-login.tpl.php, added there just a single text for example "asdad", then added a function _phptemplate_variables and login form still default.
Mess with the best - die like the rest
I think this is because
I think this is because phptemplate isnt used in D6. I can find ways of using nodes for user registration, but I too want to replace the whole page. Is there a new method of doing this?
Drupal 6
I called my login file "page-user.tpl.php" instead of "page-login.tpl.php" and it works perfectly fine:)
If i want to separate login, register and password pages, i create three new copies of the original "page.tpl.php" file in my theme folder. In my case the zen-classic theme. I call them "page-user.tpl.php" (login), "page-user-register.tpl.php" (register) and "page-user-password.tpl.php" (new password). Inside each of the files i remove the following peace of code:
<?php endif; ?><?php if (!empty($tabs)): ?>
<div class="tabs"><?php print $tabs; ?></div>
<?php endif; ?>
This stops Drupal from showing the typical tabs in the "Login, Register and Password" section.
Hope that helps someone. Took me a while to figure it out:)
It's all happening for a reason . . .