xxx

manuales, tutoriales, programacion
programming tutorials, programming manuals
Manuales DE PERL Tutoriales de perl codigo fuente en perl recursos perl utilidades perl
perl
xxx RegistrateNewsletter
Untitled Document
zonas:adsl:area-flash:area-php:area-asp:area-vb:area-photoshop:area-Vfox:area-Soft:area.:Mas
+ de 45.000 registrados
Untitled Document
: ManualesPERL- ArticulosPERL- RecursosPERL- ForoPERL- Libros- Herramientas- CodigoPERL
Untitled Document
Programacion: Manuales - DiseñoWeb - Trucos - Software - CodigoFuente - Webmasters -
Untitled Document
Si Haces compras en internet.. si las estas pensando hacer...necesitas ver esto
Untitled Document
PerL

+ InicioPERL
+ ManualesPERL
+ ArticulosPERL
+ RecursosPERL
+ ForosPERL [N]
+ LibrosPERL
+ UtilidadesPERL
+ CodigoPERL

+Newsletter
+InscribeteGratis..

+Manuales
+Programacion
+DiseñoWeb
+Bases de Datos
+Manual.propios
+Cursos-Masters
+Manual de Diseño

+Trucos
+Ver secc.trucos

+Recursos
+ver recursos

+Noticias/RSS
+Ver noticias
+Ver canal RSS

+Codigo Fuente:
+Portada

+Comunidad
+Foros

+Webmasters
+ZonaWebmaster

+Software
+ir a secc. Soft

+AreasExclusivas
+Zona Flash
+Zona PHP
+Zona ASP
+Zona VB
+Zona ADSL
+Zona Photoshop
+Zona MAC

+Agregador Blogs
+Tech-y
+Movilmania
+Mac

+Herramientas
+Herramientas
+Drivers

+Gana Dinero
+Como ganar

+SuperDiVX
+Area Divx

+Articulos
+Ver articulos
+Noticias

+Directorio [New]
+Ver directorio

+Blogs
+Nuestros blogs

+Noticias
+de Tecnologia

+SuperGames
+Juegos/ocio

+Canal Compras
+Canal Compras

manuales tutoriales cursos codigo en perl
Manuales de PERL
Coleccion de manuales de PERL
Colabora mandanos manuales, apuntes, articulos para esta sección. colaborar
Crear un foro en PERL

Listado de los distintos foros

Como verán en el código, las instrucciones que usamos no son para nada complicadas y están a la mano de cualquier programador principiante de perl. De esta manera podrán modificar el código a gusto y entenderán bien ya que tiene comentarios en cada bloque lógico de la función.

sub foros_listar {
print "Listado de Foros<br />\n";
####### Función para listar los foros #######
# Lista los distintos foros con la cantidad de temas y mensajes que tenga.
# El último mensaje y el último usuario que escribió ese mensaje
#############################################

#Abrir el directorio msdb en donde están todas las carpetas de los distintos foros
opendir (DATABASEDIR, "$msdb_foros_url") || &error('abrir','directorio');
my @foros = readdir (DATABASEDIR);
closedir(DATABASEDIR) || &error('cerrar','directorio');
shift(@foros);
shift(@foros);

print qq *<table width="90%" border="2">
<tr>
<td>Foro</td>
<td>Último mensaje:</td>
<td>Temas</td>
<td>Mensajes</td>
</tr>*;
#Por cada directorio, abrir su archivo de contador, para saber la cantidad de temas y mensajes que tiene
#Abrir el archivo ultimo.txt para tener los datos del último mensaje enviado
foreach my $foro (@foros){
my %contador;
open (DATABASE, "<$contador_url/$foro/contador.txt") || &error('abrir','archivo');
flock (DATABASE,1)||&error('lock','file');
($contador{'temas'},$contador{'mensajes'}) = split(/\|\|/,<DATABASE>);
close (DATABASE) || &error('cerrar','archivo');
my %last_post;
open (DATABASE, "<$contador_url/$foro/ultimo.txt") || &error('abrir','archivo');
flock (DATABASE,1)||&error('lock','file');
($last_post{'autor'},$last_post{'titulo'},$last_post{'fecha'},$last_post{'file'}) = split(/\|\|/,<DATABASE>);
close (DATABASE) || &error('cerrar','archivo');

### H A C E R #comparar la fecha de la ultima visita con la del mensaje, para saber si el nuevo o viejo
print qq *
<tr>
<td><a href="index.pl?action=temas_listar&foro=$foro"> $foro </a></td>
<td>Último mensaje: $last_post{'titulo'} <br />\n
Autor: $last_post{'autor'} <br />\n
Fecha: $last_post{'fecha'} <br />\n
</td>
<td>$contador{'temas'} <br />\n</td>
<td>$contador{'mensajes'} <br />\n</td>
</tr>
<br />*;
}
print qq *</table>*;
#############################################

}


Estructura de los archivos

Para almacenar toda la información de los foros vamos a necesitar dos carpetas situadas en nuestro directorio del foro.

Dichas carpetas son msdb y contador. En la primera almacenamos todos los mensajes y en la segunda vamos llevando la cuenta de los posts, las respuestas y el último mensaje que fue posteado en cada uno de los foros.

A la vez de cada post, llevamos la cuenta de las visitas, las respuestas, el primer y último mensaje y contabilizamos todos los usuarios que participaron en ese post, así cuando un usuario lo visita, el sistema le indica que ya ha participado en esa discusión

Archivo contabilizador de un post:

1||5
Elpiedra||hola||2004-09-03 11:12:20
monoswim||re: hola||2004-09-03 11:12:20
kidd ||monoswim
(Mensajes || Visitas -- 1º post -- último post -- usuarios que participaron)
Archivo contabilizador de un foro:
3||8
(cantidad de temas||cantidad de mensajes)
Archivo almacenando el último post:
monoswim||zx||2004-09-03 11:12:20||2||basura

Como verán la estructura es sumamente sencilla y no presenta mayores dificultades. Cabe destacar que esta misma estructura se puede migrar a cualquier motor de base de datos para hacerla más robusta

Listado de los temas de un foro

sub temas_listar { print "Listado de Temas del foro: $input_data{'foro'}<br /><br />"; ####### Función que lista los temas de un foro # Lista los 25 temas más actuales del foro, teniendo en cuenta si hay temas nuevos o no # comparando la fecha del último mensaje y la de la última visita del usuario

print qq *<table width="90%" border="2">
<tr>
<td>Tema / Autor</td>
<td>Último mensaje</td>
<td>Respuestas</td>
<td>Visitas</td>
</tr>*;

# Abrimos la carpeta del foro y vemos todos los temas que tiene
opendir (DATABASEDIR, "$msdb_foros_url/$input_data{'foro'}") || &error('abrir','directorio');
my @temas = readdir (DATABASEDIR);
closedir(DATABASEDIR) || &error('cerrar','directorio');

shift(@temas);
shift(@temas);
#print @temas;
#exit;


# Dejamos solamente los primeros 25 mensajes más actuales
my %temas_time;
foreach my $tema (@temas) {
my $file = "$msdb_foros_url/$input_data{'foro'}/$tema";
$temas_time{-M $file} = $tema || &error('verificar','fechas');
}
# Imprimimos todos los mensajes en orden
foreach my $key (sort (keys %temas_time)){
my (%contador,%msg,%last_msg);
open (DATABASE, "<$contador_url/$input_data{'foro'}/$temas_time{$key}") || &error('abrir','archivo');
flock (DATABASE,1)||&error('lock','file');
($contador{'mensajes'},$contador{'visitas'}) = split(/\|\|/,<DATABASE>);
($msg{'autor'},$msg{'titulo'},$msg{'fecha'}) = split(/\|\|/,<DATABASE>);
($last_msg{'autor'},$last_msg{'titulo'},$last_msg{'fecha'}) = split(/\|\|/,<DATABASE>);
my @users_posted = split(/\|\|/,<DATABASE>);
close (DATABASE) || &error('cerrar','archivo');

#si participó en este tema lo ponemos en negrita
foreach my $user_poster (@users_posted){
if ($user_poster eq $logger_data{'user_name'}){
$msg{'titulo'} = "<b>$msg{'titulo'}</b>";
last;
}
}

#separamos el nombre del resto
my ($tema_id,$basura) = split(/\./, $temas_time{$key});

print qq*
<tr>
<td><a href="index.pl?action=mensajes_listar&foro=$input_data{'foro'}&tema=$tema_id"> $msg{'titulo'} </a><br /> Enviado por: $msg{'autor'} el $msg{'fecha'}</td>
<td>$last_msg{'autor'} el día $last_msg{'fecha'}</td>
<td> $contador{'mensajes'} </td>
<td> $contador{'visitas'} </td>
</tr>*;
}
print qq*
</table><br />Nuevo Tema: <a href="index.pl?action=form_new_tema&foro=$input_data{'foro'}">clickeame</a>
*;
}

Esta función tampoco trae ningún código raro difícil de entender. Simplemente lista los 25 mensajes más actuales de cada uno de los foros.

Ahí les dejo la pelota picando del lado de ustedes para que modifiquen esa parte y hagan que pueda listar de a 25 en 25, por si hay más temas en ese foro.

Igualmente si no lo pueden hacer en el script final que colocaremos estará todo completo, pero es un muy buen ejercicio para agilizar la lógica.

 

Untitled Document
links programacion
Registrate gratuitamente a nuestra NEWSLETTER y estate al tanto de todas las novedades
Programacion : LWPI Solorecursos I programacion I abcdatos I TrucosTecnicos I servicios gratisI ofertas de ADSLI pueblos 2.0 I
Areas exclusivas: tutoriales I cursos I ofertas I adsl I reproductores dvd I Formación Iwebtutoriales
Otros: SMSarea I tutoriales I DIVXarea I tutoriales I trucos de windows Igooglemania Iofertas I programatium.net I canal compras I
site programatium.com : site1 - site2 - site3 - site4 - site5 - site6 - site7 - site8
manuales Sugiere un manual para esta seccion
who's online
Linkanos
www.programatium.com© 1999 - web esta optimizada para Microsoft explorer 6.0
tutoriales

xxx