Fecha: 6 de Marzo 2005
Actualizado: 8 de Marzo 2005
Comprobado: phpBB 2.0.13
Nivel: Avanzado
Basado en: Este Articulo y este otro Articulo.
Introducción
Muchos usuarios nos preguntan, cómo poner un login en la index de su página, fuera del foro. Antes había un MOD que permitía hacer eso, ahora es mucho más fácil. Para hacerlo tenemos que:
a) Mantener las sesiones fuera de phpBB
b) Averiguar cual es el avatar del usuario y si tiene mensajes privados
c) Mostrarle sus datos si está logueado o la caja de login si no lo está
a) Cómo mantener al usuario logueado en tu sitio fuera de phpBB
Para mantener al usuario logueado tenemos que inicializar las sesiones de phpBB e incluir algunas funciones necesarias para reconocer al usuario y tener sus datos a mano.
Código: Seleccionar todo
define('IN_PHPBB',true);
$site_root_path = '/home/TUPATH/'; // Absoloute SITE PATH Path
$phpbb_root_path = 'phpBB/'; // Forum Path
$root = '..'; // Root Dir of Site
$privvar = ' /home/TUPATH/phpBB/privmsg.php';
$phpbb_root_path = $site_root_path . $phpbb_root_path;
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.php');
include_once ($phpbb_root_path . 'includes/bbcode.'.$phpEx);
include_once ($phpbb_root_path . 'includes/functions.'.$phpEx);
//
// lets make a little check if your root_path is correct ;-)
//
if (!file_exists($phpbb_root_path . 'extension.inc'))
{
echo $phpbb_root_path;
die ('<tt><strong>El pach está mal:</strong>
$phpbb_root_path está mal y no apunta a tu foro.</tt>');
}
//
// now we include (integrate) some files which we need
//
//
//
//
//
// Start session management
//
if (!$userdata)
{
//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
}
b) Averiguar cual es el avatar del usuario y si tiene mensajes privados
Si nuestro usuario está logueado vamos a saludarlo con su nombre y su avatar y decirle si tiene algún mensaje. ASí que lo primero que tenemos que averiguar es cuál es su avatar y si tiene mensajes, para eso utilizamos este código, que ponemos inmediatamente después de:
Código: Seleccionar todo
// End session management
//
}
Código: Seleccionar todo
$avatar = '';
if ( $userdata['user_avatar_type'] && $userdata['username'] != ANONYMOUS && $userdata['user_allowavatar'] )
{
switch( $userdata['user_avatar_type'] )
{
case USER_AVATAR_UPLOAD:
$avatar = ( $board_config['allow_avatar_upload'] ) ? '<img src="foros/' . $board_config['avatar_path'] . '/' . $userdata['user_avatar'] . '" alt="" border="0" />' : '';
break;
case USER_AVATAR_REMOTE:
$avatar = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $userdata['user_avatar'] . '" alt="" border="0" />' : '';
break;
case USER_AVATAR_GALLERY:
$avatar = ( $board_config['allow_avatar_local'] ) ? '<img src="foros/' . $board_config['avatar_gallery_path'] . '/' . $userdata['user_avatar'] . '" alt="" border="0" />' : '';
break;
}
}
if ( $userdata['user_new_privmsg'] )//private messages
{
$l_message_new = ( $userdata['user_new_privmsg'] == 1 ) ? $lang['New_pm'] : $lang['New_pms'];
$l_privmsgs_text = sprintf($l_message_new, $userdata['user_new_privmsg']);
if ( $userdata['user_last_privmsg'] > $userdata['user_lastvisit'] )
{
$sql = "UPDATE " . USERS_TABLE . "
SET user_last_privmsg = " . $userdata['user_lastvisit'] . "
WHERE user_id = " . $userdata['user_id'];
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, 'Could not update private message new/read time for user', '', __LINE__, __FILE__, $sql);
}
$s_privmsg_new = 1;
$icon_pm = $images['pm_new_msg'];
}
else
{
$s_privmsg_new = 0;
$icon_pm = $images['pm_no_new_msg'];
}
}
else
{
$l_privmsgs_text = $lang['No_new_pm'];
$s_privmsg_new = 0;
$icon_pm = $images['pm_no_new_msg'];
}
if ( $userdata['user_unread_privmsg'] )
{
$l_message_unread = ( $userdata['user_unread_privmsg'] == 1 ) ? $lang['Unread_pm'] : $lang['Unread_pms'];
$l_privmsgs_text_unread = sprintf($l_message_unread, $userdata['user_unread_privmsg']);
}
else
{
$l_privmsgs_text_unread = $lang['No_unread_pm'];
}
NOTA: Sustituye www.TUDOMINIO.COM/phpBB/ por la URL real de tu foro
Sustituye ../TUPAGINA.php por el path y el nombre reales de la página dónde estás haciendo el login.
Código: Seleccionar todo
if ($userdata['session_logged_in']) {
echo "<h2> Hola ".$userdata['username'] ." </h2>\n";
echo $avatar;?>
<ul>
<li><a href="http://www.TUDOMINIO.COM/phpBB/profile.php?mode=editprofile" title="modifica tu perfil">Modifica tu perfil</a> </li>
<li><a href="http://www.TUDOMINIO.COM/phpBB/privmsg.php?folder=inbox" title="mensajes"><?php echo $l_privmsgs_text ?></a></li>
<li><a href="http://www.TUDOMINIO.COM/phpBB/login.php?logout=true&sid=<? print $userdata['session_id']; ?>&redirect=../TUPAGINA.php&outside=1" class="out" title="salir">SALIR</a></li>
<?php
} else {
?>
<h2>Entrar</h2>
<form action="http://www.TUDOMINIO.COM/phpBB/login.php" method="post">
<input type="text" name="username" size="17" maxlength="40" value=""><br />
<input type="password" name="password" size="17" maxlength="32" ><br />
<input type="checkbox" name="autologin" value="ON" /> Autologin
<input type="hidden" name="redirect" value="../TUPAGINA.php">
<ul>
<li class="nuestros"><a href="http://www.TUDOMINIO.COM/phpBB/profile.php?mode=register" title="Léete las condiciones y decide si quieres pertenecer a esta comunidad.">Soy nuevo</a></li>
<li class="nuestros"> <a href="http://www.TUDOMINIO.COM/phpBB/profile.php?mode=sendpassword" title="¿Un despiste? Danos tu nombre de usuario y tu correo electrónico y te mandamos una nueva">Recordar contraseña</a></li></ul>
<input type="submit" value=" Entrar " name="login">
</form>
<?php }