|
|
Hacks : Un sistema que revoluciona la presentación de banners en Xoops
|
| Enviado por Joni el 4/3/2008 12:10:00 (4699 Lecturas) |
|
Traducción de la noticia sobre el hack publicada por su autor, Stefano Silvestrini (www.stefanosilvestrini.com)
He creado 2 funciones para colocar sus BANNERS allá donde quiera y elegir cuál de ellos se mostrará. Es muy sencillo. Tiene 3 posibilidades para colocar sus BANNERS en bloques: - Sin especificar banners: vista aleatoria de banners.
- Seleccionando banner: vista del banner especificado.
- Selección de cliente: vista de banners del cliente especificado.
Qué necesita para conseguirlo:Por favor, vaya a su directorio_root/include/ y abra el archivo functions.php. (N. de T.: Recuerde, utilice un editor en modo texto plano)
Vaya al final del archivo functions.php y justo antes de la etiqueta ?> inserte este código:
function getbanner_from_id_banner($banner_id)
{
###### Hack by www.stefanosilvestrini.com ######
global $xoopsConfig;
$db =& Database::getInstance();
$bresult = $db->query("SELECT COUNT(*) FROM ".$db->prefix("banner")." WHERE bid = ". $banner_id);
list ($numrows) = $db->fetchRow($bresult);
if ( $numrows > 1 ) {
$numrows = $numrows-1;
mt_srand((double)microtime()*1000000);
$bannum = mt_rand(0, $numrows);
} else {
$bannum = 0;
}
if ( $numrows > 0 ) {
$bresult = $db->query("SELECT * FROM ".$db->prefix("banner")." WHERE bid = ". $banner_id, 1, $bannum);
list ($bid, $cid, $imptotal, $impmade, $clicks, $imageurl, $clickurl, $date, $htmlbanner, $htmlcode) = $db->fetchRow($bresult);
if ($xoopsConfig['my_ip'] == xoops_getenv('REMOTE_ADDR')) {
// EMPTY
} else {
$db->queryF(sprintf("UPDATE %s SET impmade = impmade+1 WHERE bid = %u", $db->prefix("banner"), $bid));
}
/* Check if this impression is the last one and print the banner */
if ( $imptotal == $impmade ) {
$newid = $db->genId($db->prefix("bannerfinish")."_bid_seq");
$sql = sprintf("INSERT INTO %s (bid, cid, impressions, clicks, datestart, dateend) VALUES (%u, %u, %u, %u, %u, %u)", $db->prefix("bannerfinish"), $newid, $cid, $impmade, $clicks, $date, time());
$db->queryF($sql);
$db->queryF(sprintf("DELETE FROM %s WHERE bid = %u", $db->prefix("banner"), $bid));
}
if ($htmlbanner){
$bannerobject = $htmlcode;
}else{
$bannerobject = '<div align="center"><a href="'.XOOPS_URL.'/banners.php?op=click&bid='.$bid.'" target="_blank">';
if (stristr($imageurl, '.swf')) {
$bannerobject = $bannerobject
.'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="468" height="60">'
.'<param name="movie" value="'.$imageurl.'"></param>'
.'<param name="quality" value="high"></param>'
.'<embed src="'.$imageurl.'" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="468" height="60">'
.'</embed>'
.'</object>';
} else {
$bannerobject = $bannerobject.'<img src="'.$imageurl.'" alt="" />';
}
$bannerobject = $bannerobject.'</a></div>';
}
return $bannerobject;
}
}
function getbanner_from_id_client($client_id)
{
###### Hack by www.stefanosilvestrini.com ######
global $xoopsConfig;
$db =& Database::getInstance();
$bresult = $db->query("SELECT COUNT(*) FROM ".$db->prefix("banner")." WHERE cid = ". $client_id);
list ($numrows) = $db->fetchRow($bresult);
if ( $numrows > 1 ) {
$numrows = $numrows-1;
mt_srand((double)microtime()*1000000);
$bannum = mt_rand(0, $numrows);
} else {
$bannum = 0;
}
if ( $numrows > 0 ) {
$bresult = $db->query("SELECT * FROM ".$db->prefix("banner")." WHERE cid = ". $client_id ." ORDER BY rand()", 1, $bannum);
list ($bid, $cid, $imptotal, $impmade, $clicks, $imageurl, $clickurl, $date, $htmlbanner, $htmlcode) = $db->fetchRow($bresult);
if ($xoopsConfig['my_ip'] == xoops_getenv('REMOTE_ADDR')) {
// EMPTY
} else {
$db->queryF(sprintf("UPDATE %s SET impmade = impmade+1 WHERE bid = %u", $db->prefix("banner"), $bid));
}
/* Check if this impression is the last one and print the banner */
if ( $imptotal == $impmade ) {
$newid = $db->genId($db->prefix("bannerfinish")."_bid_seq");
$sql = sprintf("INSERT INTO %s (bid, cid, impressions, clicks, datestart, dateend) VALUES (%u, %u, %u, %u, %u, %u)", $db->prefix("bannerfinish"), $newid, $cid, $impmade, $clicks, $date, time());
$db->queryF($sql);
$db->queryF(sprintf("DELETE FROM %s WHERE bid = %u", $db->prefix("banner"), $bid));
}
if ($htmlbanner){
$bannerobject = $htmlcode;
}else{
$bannerobject = '<div align="center"><a href="'.XOOPS_URL.'/banners.php?op=click&bid='.$bid.'" target="_blank">';
if (stristr($imageurl, '.swf')) {
$bannerobject = $bannerobject
.'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" width="468" height="60">'
.'<param name="movie" value="'.$imageurl.'"></param>'
.'<param name="quality" value="high"></param>'
.'<embed src="'.$imageurl.'" quality="high" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" type="application/x-shockwave-flash" width="468" height="60">'
.'</embed>'
.'</object>';
} else {
$bannerobject = $bannerobject.'<img src="'.$imageurl.'" alt="" />';
}
$bannerobject = $bannerobject.'</a></div>';
}
return $bannerobject;
}
}
GUARDELO y CIERRELO. Cómo crear sus bloques de bannersAhora puede crear sus bloques de banners de 3 maneras muy simples: 1ª Forma:Coloque sus banners en sus bloques (no hay limitación para el número de bloques) allá donde quiera. Los banners se mostrarán aleatoriamente.Añada un nuevo bloque personalizado a su Xoops, en modo de bloque PHP, e inserte este código:
echo xoops_getbanner();
2ª Forma:Coloque sus banners en sus bloques (no hay limitación para el número de bloques) allá donde quiera. Los banners se mostrarán según ID_BANNER y, de esta manera, usted podrá seleccionar un banner especificado dentro de un bloque determinado, por ejemplo.Añada un nuevo bloque personalizado a su Xoops, en modo de bloque PHP, e inserte este código:
echo getbanner_from_id_banner(ID_BANNER);
donde ID_BANNER = ID del BANNER que se MOSTRARÁ (puede comprobar el ID que corresponde a cada BANNER en la página de administración de banners --> ID del Banner en 'Banners Actualmente Activos')3ª Forma:Coloque sus banners en sus bloques (no hay limitación para el número de bloques) allá donde quiera. Los BANNERS se mostrarán según ID_CLIENT y, de esta manera, si un cliente tiene 10 banners, por ejemplo, se mostrará aleatoriamente un BANNER entre los que correspondean a ese cliente.Añada un nuevo bloque personalizado a su Xoops, en modo de bloque PHP, e inserte este código:
echo getbanner_from_id_client(ID_CLIENT);
donde ID_CLIENT = ID de un CLIENTE de BANNERS a MOSTRAR (puede comprobar ese ID en la página de administración de banners --> ID del Banner en Clientes)Eso es todo. Si le gusta mi trabajo, por favor, considere la posibilidad de hacer una pequeña donación para ayudarme en mis trabajos e investigaciones para Xoops. Gracias.
Traducción de la noticia sobre el hack publicada por su autor, Stefano Silvestrini (www.stefanosilvestrini.com)
|
|
Los usuarios son responsables de sus propios comentarios.
| Autor |
Hilo |
| riosoft |
Enviado: 4/3/2008 20:46 Actualizado: 4/3/2008 20:46 |
Administrador   Conectado: 15/9/2003 Desde: Envíos: 1406 |
 Re: Un sistema que revoluciona la presentación de banners... Gracias Joni. Realmente bueno. Estoy seguro de que este código va a dar sus frutos en futuros "reusos". 
|
|
|
| joninzar |
Enviado: 5/3/2008 0:58 Actualizado: 5/3/2008 0:59 |
Administrador   Conectado: 20/9/2006 Desde: Bilbao (Euskadi - España) Envíos: 437 |
 Re: Un sistema que revoluciona la presentación de banners... Bueno, se agredece, pero el mérito no es mío  Y la donación menos es para mí  El mérito es de Stefano que es el que se lo ha currado  Lo mío han sido dos correos y 30 minutos de traducción y edición. Seguro que a él le ha costado más...
|
|
|
| DonCurioso |
Enviado: 9/3/2008 21:46 Actualizado: 9/3/2008 21:46 |
Supremo   Conectado: 24/9/2007 Desde: Envíos: 752 |
 Re: Un sistema que revoluciona la presentación de banners... Pregunta millonaria:
Tengo más de un sitio... puedo reemplazar el mismo functions.php para todos o he de hacerlo uno a uno ?
Gracias.
|
|
|
| joninzar |
Enviado: 10/3/2008 15:39 Actualizado: 10/3/2008 15:39 |
Administrador   Conectado: 20/9/2006 Desde: Bilbao (Euskadi - España) Envíos: 437 |
 Re: Un sistema que revoluciona la presentación de banners... Pues no he probado, pero por lógica... Tendrás que sustituir en cada sitio. Ahora, otra posibilidad (que se me ocurre, no probado, pero debiera funcionar) sería crear otro php en uno de los sitios incluyendo ese hack. Imagina que tienes 3 sitios: http://misitio1.es/http://misitio2.es/http://misitio3.es/Cada uno, lógicamente tiene su functions.php En el misitio1 creas un php que contenga el código que dice para incluir en functions.php. Le llamas hack_banners.php por ejemplo, le das permisos de lectura para otros y lo guardas en el sitio raíz de misitio1, con lo que la ruta del archivo es http://misitio1.es/hack_banners.phpAhora, en los distintos functions.php, incluyes entre el código la siguiente sentencia: include_once (" http://misitio1.es/hack_banners.php"); Creo que eso debiera funcionar. Y por supuesto, creas los bloques que sean en cada sitio. De todas formas, más cosas sobre esto, mejor que en comentarios, sería en el foro. Es más fácil de seguir. Un saludo.
|
|
|
| bprado |
Enviado: 12/9/2008 6:23 Actualizado: 12/9/2008 6:23 |
Normal   Conectado: 4/8/2008 Desde: Envíos: 86 |
 Re: Un sistema que revoluciona la presentación de banners... Alguien sabe cuando se aplica este hack, como controlar el top banner que viene con xoops, los banners de este hacks los puedo controlar usando el client_id, asi se muestran solo los banners que estan bajo ese client_id, pero en el top banner me esta mostrando todos!
Se que una solucion es quitar el top banner, pero yo quiero usar ese top banner para mostrar publicidad.
Saludos
|
|
|
|
|