Página 1 de 1

Cómo poner un login fuera del Foro

Publicado: 04 Jun 2007, 23:25
por ThE KuKa
Autor: t0m|ta
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
	//
}
NOTA: El path puede ser relativo, pero años de pegarme con él, me han enseñado que más vale ponerlo completo si no quieres volverte completamente loco.

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
	//
}
El código para saber el avatar y si tiene mensajes privados

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'];
   }
Ahora veamos cómo mostrar cosas diferentes si el usuario está logueado y si no lo está:

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&oacute;nico y te mandamos una nueva">Recordar contraseña</a></li></ul>
								<input type="submit" value=" Entrar " name="login">
								</form>
								<?php }
Tema original en tomatoma.WS