Aquí de nuevo
He modificado el script y he hecho algunas mejoras:
- He corregido un bug por el cual en navegadores Netscape/Mozilla el ancho de la marquesina es un poco mayor. Ahora se verá igual de ancho en cualquier navegador.
- He optimizado las consultas mysql dando como resultado que ahora el script tarda en ejecutarse menos de la mitad de tiempo que lo hacía antes.
- He arreglado un bug en el corte de caracteres para mensajes largos.
Por ejemplo antes para mostrar 12 mensajes en el foro eran necesarias 37 consultas a la base de datos. Ahora con 13 basta.
Bien, espero que les sirva
Código PHP:
<?
// Últimos mensajes publicados en foros phpBB2.
// Creado por XeRGio
// www.xergio.net
//
// Modificado por Ferny
// www.mundodivx.com
//
// Edita lo que viene a continuación. Cambia solo lo que hay entre comillas "":
$directorio = "public/foros"; //Carpeta donde esta situado el foro. No empieces ni acabes con /
$mostrar = "12"; //Número de mensajes a mostrar.
$caracteres = "22"; //Caracteres que se mostrarán de cada línea.
// Lo que viene ahora no lo toques para nada!!! a no ser que sepas de qué va el tema...
include("$directorio/config.php");
unset($total);
$conexion = mysql_connect($dbhost,$dbuser,$dbpasswd);
mysql_select_db($dbname,$conexion);
//Si tienes un foro oculto o restringido, sólo añade WHERE forum_id!=X delante de ORDER BY y sustituyendo la X por el nº del foro
$consulta = "SELECT * FROM ".$table_prefix."posts ORDER BY post_time DESC LIMIT $mostrar";
$result = mysql_query($consulta);
while ($row = mysql_fetch_array($result)) {
$consulta = "SELECT
".$table_prefix."forums.forum_id,
".$table_prefix."forums.forum_name,
".$table_prefix."users.username,
".$table_prefix."topics.topic_id,
".$table_prefix."topics.topic_title
FROM ".$table_prefix."forums, ".$table_prefix."users, ".$table_prefix."topics
WHERE ".$table_prefix."forums.forum_id='$row[forum_id]' AND ".$table_prefix."users.user_id='$row[poster_id]' AND ".$table_prefix."topics.topic_id='$row[topic_id]'";
$result2 = mysql_query ($consulta);
$res = mysql_fetch_row($result2);
$nombreentero = $res[4];
// Si el título del mensaje es muy largo, lo cortamos
if (strlen($res[4]) > $caracteres) {
$res[4] = substr($res[4],0,$caracteres-3)."...";
}
// Construimos
$total.=" <font size=\"1\" face=\"arial\"><a href=\"".$server.$directorio."/viewtopic.php?t=$row[topic_id]#$row[post_id]\" title=\"$nombreentero\"><font color=\"#000099\">$res[4]</font></a><br> En <a href=\"".$server.$directorio."/viewforum.php?f=$res[0]\"><font color=\"#000099\">$res[1]</font></a><br> Por <font color=\"#ff0000\">$res[2]</font></font><hr noshade size=\"1\" color=\"#000000\" width=\"100\">";
}
// Liberamos recursos y cerramos conexión
mysql_free_result($result);
mysql_free_result($result2);
mysql_close($conexion);
?>
<script language="JavaScript1.2">
/*
Cross browser Marquee II- © Dynamic Drive (www.dynamicdrive.com)
For full source code, 100's more DHTML scripts, and TOS, visit http://www.dynamicdrive.com
Credit MUST stay intact
*/
/*
NOTA: con lo siguiente se soluciona el bug del ancho de borde bajo navegadores Netscape y Mozilla.
En ellos el borde NO pertenece a las dimensiones de la capa, pero en Opera y Explorer SI pertenece,
lo cual hace que en Netscape/Mozilla se vea un poco más grande. Por ello reducimos el ancho en
estos 2 últimos navegadores
*/
//Specify the marquee's width (in pixels)
var marqueewidth = 125; // Ancho de la marquesina
var anchoborde = 1; // Ancho del borde de la marquesina, en pixeles (debe ser igual al borde de la capa, especificado abajo del todo)
//Corregimos el bug anteriormente citado...
if (navigator.appName=="Netscape") {
marqueewidth = marqueewidth - 2*anchoborde;
}
//Specify the marquee's height
var marqueeheight=200
//Specify the marquee's marquee speed (larger is faster 1-10)
var marqueespeed=1
//Pause marquee onMousever (0=no. 1=yes)?
var pauseit=1
//Specify the marquee's content
//Keep all content on ONE line, and backslash any single quotations (ie: that\'s great):
var marqueecontent='<? echo addslashes($total); ?>' // ¡¡¡NO TOCAR!!!
////NO NEED TO EDIT BELOW THIS LINE////////////
marqueespeed=(document.all)? marqueespeed : Math.max(1, marqueespeed-1) //slow speed down by 1 for NS
var copyspeed=marqueespeed
var pausespeed=(pauseit==0)? copyspeed: 0
var iedom=document.all||document.getElementById
var actualheight=''
var cross_marquee, ns_marquee
function populate(){
if (iedom){
cross_marquee=document.getElementById? document.getElementById("iemarquee") : document.all.iemarquee
cross_marquee.style.top=marqueeheight+8
cross_marquee.innerHTML=marqueecontent
actualheight=cross_marquee.offsetHeight
}
else if (document.layers){
ns_marquee=document.ns_marquee.document.ns_marquee2
ns_marquee.top=marqueeheight+8
ns_marquee.document.write(marqueecontent)
ns_marquee.document.close()
actualheight=ns_marquee.document.height
}
lefttime=setInterval("scrollmarquee()",40)
}
function scrollmarquee(){
if (iedom){
if (parseInt(cross_marquee.style.top)>(actualheight*(-1)+8))
cross_marquee.style.top=parseInt(cross_marquee.style.top)-copyspeed
else
cross_marquee.style.top=marqueeheight+8
}
else if (document.layers){
if (ns_marquee.top>(actualheight*(-1)+8))
ns_marquee.top-=copyspeed
else
ns_marquee.top=marqueeheight+8
}
}
if (iedom||document.layers){
with (document){
if (iedom){
write('<div style="position:relative; border: 1px solid #000000; width:'+marqueewidth+'; height:'+marqueeheight+'; overflow:hidden; background:#ccccff;" onMouseover="copyspeed=pausespeed" onMouseout="copyspeed=marqueespeed">')
write('<div id="iemarquee" style="position:absolute; left:0; top:0; width:'+marqueewidth+'">')
write('</div></div>')
}
else if (document.layers){
write('<ilayer width='+marqueewidth+' height='+marqueeheight+' name="ns_marquee">')
write('<layer name="ns_marquee2" width='+marqueewidth+' height='+marqueeheight+' left=0 top=0 onMouseover="copyspeed=pausespeed" onMouseout="copyspeed=marqueespeed"></layer>')
write('</ilayer>')
}
}
}
</script>