• Domingo 22 de Diciembre de 2024, 22:58

Autor Tema:  Mostrar Ofertas Aleatoriamente Cada X Tiempo  (Leído 3212 veces)

saiory

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Mostrar Ofertas Aleatoriamente Cada X Tiempo
« en: Martes 4 de Diciembre de 2007, 08:53 »
0
Hola, necesito mostrar un listado de ofertas que tengo guardada en mi DB mysql y que vayan cambiando cada 30segundos sin necesidad de refrescar la página.

Me han sugerido hacer lo siguiente:

Select campo1, campo2, campoN from tabla1WHERE 1
-->ORDER BY RAND() LIMIT 1 <--

pero de esta manera se cambiaría la oferta sólo al refrescar la página.

Gracias

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #1 en: Martes 4 de Diciembre de 2007, 13:17 »
0
Sin refrescar la página es difícil, yo lo pensaria más bien con un flash o con AJAX.

Lo malo es que no sé utilizar ninguna de las 2 :( 'tons no te podría dar un tip.
El pasado son solo recuerdos, el futuro son solo sueños

Mollense

  • Miembro de PLATA
  • *****
  • Mensajes: 1755
  • Nacionalidad: ar
    • Ver Perfil
    • http://solocodigo.com/
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #2 en: Martes 4 de Diciembre de 2007, 13:37 »
0
Cita de: "RadicalEd"
Sin refrescar la página es difícil, yo lo pensaria más bien con un flash o con AJAX.

Lo malo es que no sé utilizar ninguna de las 2 :( 'tons no te podría dar un tip.
Si, opino que en este caso AJAX es muy buena opción.

saiory, usa el buscador del foro, me parece que hay algunos ejemplos sobre el tema.

Un saludo.
"Los que renuncian son más numerosos que los que fracasan" H.F.
"No se cómo sería la III Guerra Mundial, pero la cuarta sería con piedras" A.E.
"Quién no fía no es de fiar..."


...no te quedes mirando.

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #3 en: Jueves 6 de Diciembre de 2007, 09:08 »
0
Con las siguientes funciones podrás utilizar AJAX:

Código: Text
  1. function nuevoAjax(){
  2.   var xmlhttp=false;
  3.   try {
  4.     xmlhttp = new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);
  5.   } catch (e) {
  6.     try {
  7.       xmlhttp = new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
  8.     } catch (E) {
  9.       xmlhttp = false;
  10.     }
  11.   }
  12.  
  13.   if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  14.     xmlhttp = new XMLHttpRequest();
  15.   }
  16.   return xmlhttp;
  17. }
  18. function llamar(id,pagina,datos){
  19.   contenedor = document.getElementById(id);
  20.   ajax=nuevoAjax();
  21.   ajax.open(&#34;POST&#34;, pagina,true);
  22.   ajax.onreadystatechange=function() {
  23.     if (ajax.readyState==4) {
  24.       contenedor.innerHTML = ajax.responseText
  25.     }
  26.   }
  27.   ajax.setRequestHeader(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);
  28.   ajax.send(datos);
  29. }
  30.  

Para implementarlo, puedes usar un DIV para especificar la zona que se va a refrescar... por ejemplo:

Código: Text
  1. &#60;div id=&#34;div_publicidad&#34;&#62;&#60;/div&#62;
  2.  

y luego la llamada a AJAX la haces de la siguiente forma:

Código: Text
  1. llamar('div_publicidad','archivo_publicidad.php','');
  2.  

el primer argumento de la función llamar es el CONTENEDOR donde piensas hacer la actualización asíncrona... en este caso es un DIV, y lo especificas a través de su ID.  El segundo argumento es el nombre del archivo que va a realizar las operaciones, y que va a imprimir la nueva publicidad. El tercer argumento es opcional, es para enviar valores por POST, y se implementa como el GET... extraño no? pero funciona.... Es decir, si quiero pasar un dato, seria:

Código: Text
  1. llamar('div_publicidad','archivo_publicidad.php','id='+id+'&nom='+nombre);
  2.  

y para recibir los datos en archivo_publicidad.php seria:

Código: Text
  1. &#036;id=&#036;_POST['id'];
  2. &#036;nom=&#036;_POST['nom'];
  3.  

En tu caso, como necesitas que la publicidad se actualize cada 30 segundos, por decir algo, puedes usar SETINTERVAL de javascript, que permite q una función se ejecute cada cierta cantidad de milisegundos:

Código: Text
  1. &#60;script language=&#34;javascript&#34;&#62;
  2. setinterval(&#34;act_public()&#34;,3000) //se ejecutara act_public() cada 3 segundos
  3. function act_public()
  4. {    llamar('div_publicidad','archivo_publicidad.php','')
  5. }
  6. &#60;/script&#62;
  7.  

Espero te sirva, a mi me ha servido bastante... Saludos!
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

saiory

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #4 en: Lunes 10 de Diciembre de 2007, 10:55 »
0
Gracias por tu ayuda pero no consigo que me refresque la página.

Lo he puesto de la siguiente manera:

En el archivo index.php al comienzo de la página:


<script language="javascript">
setinterval("act_public()",3000) //se ejecutara act_public() cada 3 segundos
function act_public()
{    
     llamar('div_publicidad','_PanelIzq.php','')
}
</script>

En la zona donde quiero que me haga el refresco en el archivo index.php:

<div id="div_publicidad">
   <?php include("_PanelIzq.php"); ?>
</div>


y en el archivo _PanelIzq.php

<script language="javascript">
function nuevoAjax(){
  var xmlhttp=false;
  try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
      xmlhttp = false;
    }
  }

  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
    xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
}
function llamar(id,pagina,datos){
  contenedor = document.getElementById(id);
  ajax=nuevoAjax();
  ajax.open("POST", pagina,true);
  ajax.onreadystatechange=function() {
    if (ajax.readyState==4) {
      contenedor.innerHTML = ajax.responseText
    }
  }
  ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  ajax.send(datos);
}
</script>

<?php
aquí el código php con las sentencias sql para que muestre las ofertas que se encuentran en la bd mysql
?>


------------------------

Hecho esto, no funciona el refresco y no se por dónde empezar a corregirlo.

Gracias.

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #5 en: Lunes 10 de Diciembre de 2007, 13:08 »
0
El código javascript debe ir en el INDEX.PHP o en otro caso, debes colocarlo en un archivo js externo.

ajax.js
Código: Text
  1. &#60;script language=&#34;javascript&#34;&#62;
  2. function nuevoAjax(){
  3. var xmlhttp=false;
  4. try {
  5. xmlhttp = new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);
  6. } catch (e) {
  7. try {
  8. xmlhttp = new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
  9. } catch (E) {
  10. xmlhttp = false;
  11. }
  12. }
  13.  
  14. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  15. xmlhttp = new XMLHttpRequest();
  16. }
  17. return xmlhttp;
  18. }
  19. function llamar(id,pagina,datos){
  20. contenedor = document.getElementById(id);
  21. ajax=nuevoAjax();
  22. ajax.open(&#34;POST&#34;, pagina,true);
  23. ajax.onreadystatechange=function() {
  24. if (ajax.readyState==4) {
  25. contenedor.innerHTML = ajax.responseText
  26. }
  27. }
  28. ajax.setRequestHeader(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);
  29. ajax.send(datos);
  30. }
  31. &#60;/script&#62;
  32.  

y luego lo incluyes con un <script src="ajax.js"></script>.

El archivo _PanelIzq.php solo debe tener el código php que va a hacer la consulta a mysql.

En vez de hacer en el index:
Código: Text
  1. &#60;div id=&#34;div_publicidad&#34;&#62;
  2. &#60;?php include(&#34;_PanelIzq.php&#34;); ?&#62;
  3. &#60;/div&#62;
  4.  

Deberías hacer:
Código: Text
  1. &#60;script&#62;
  2. llamar('div_publicidad','_PanelIzq.php','');
  3. &#60;/script&#62;
  4.  
  5.  

Así consigues que se actualice la publicidad tan pronto cargue la página, y el resto del tiempo lo hará SERINTERVAL().

Obviamente deberás crear el div para la actualización...
Código: Text
  1. &#60;div id=&#34;div_publicidad&#34;&#62;
  2. &#60;/div&#62;
  3.  

creo que así deberia funcionarte... Avísame como te va!
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

saiory

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #6 en: Martes 11 de Diciembre de 2007, 09:45 »
0
En el index.php lo tengo de esta manera:

<script language="javascript">
function nuevoAjax(){
var xmlhttp=false;
try {
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (E) {
xmlhttp = false;
}
}

if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;
}
function llamar(id,pagina,datos){
contenedor = document.getElementById(id);
ajax=nuevoAjax();
ajax.open("POST", pagina,true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
contenedor.innerHTML = ajax.responseText
}
}
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
ajax.send(datos);
}
</script>


<script language="javascript">
setinterval("act_public()",3000) //se ejecutara act_public() cada 3 segundos
function act_public()
{  
 llamar('div_publicidad','_PanelIzq.php','')
}
</script>

Y en la zona donde tengo las ofertas en el mismo index.php, me comentas que en vez de

<?php include("_PanelIzq.php"); ?>

ponga

<script>
            llamar('div_publicidad','_PanelIzq.php','');
</script>


pero de esta manera, no lo puedo hacer porque no me muestra las ofertas puesto que en el archivo _PanelIzq.php tengo como un módulo donde tengo programado en php cómo quiero que me muestre las ofertas y a mi entender necesito el include para que se pueda ver.

Si lo pongo como me dices tú, no me las muestra y además me sale un error de javascript.

No lo veo claro, me podrías ayudar.

Gracias

JrcsDev

  • Miembro MUY activo
  • ***
  • Mensajes: 245
  • Nacionalidad: ve
    • Ver Perfil
    • http://codigo7.wordpress.com/
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #7 en: Martes 11 de Diciembre de 2007, 14:03 »
0
ok, vamos a darle por orden... en el index.php, ubica en el lugar donde va tu publicidad el siguiente código:

Código: Text
  1. &#60;div id=&#34;div_publicidad&#34;&#62;
  2. &#60;/div&#62;
  3.  

Luego al final de todo el index.php, coloca el javascript completo:

Código: Text
  1. &#60;script language=&#34;javascript&#34;&#62;
  2. function nuevoAjax(){
  3. var xmlhttp=false;
  4. try {
  5. xmlhttp = new ActiveXObject(&#34;Msxml2.XMLHTTP&#34;);
  6. } catch (e) {
  7. try {
  8. xmlhttp = new ActiveXObject(&#34;Microsoft.XMLHTTP&#34;);
  9. } catch (E) {
  10. xmlhttp = false;
  11. }
  12. }
  13.  
  14. if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
  15. xmlhttp = new XMLHttpRequest();
  16. }
  17. return xmlhttp;
  18. }
  19. function llamar(id,pagina,datos){
  20. contenedor = document.getElementById(id);
  21. ajax=nuevoAjax();
  22. ajax.open(&#34;POST&#34;, pagina,true);
  23. ajax.onreadystatechange=function() {
  24. if (ajax.readyState==4) {
  25. contenedor.innerHTML = ajax.responseText
  26. }
  27. }
  28. ajax.setRequestHeader(&#34;Content-Type&#34;, &#34;application/x-www-form-urlencoded&#34;);
  29. ajax.send(datos);
  30. }
  31.  
  32. //
  33. function act_public()     //Esta funcion es para la actualizacion
  34. {     llamar('div_publicidad','_PanelIzq.php','')
  35. }
  36.  
  37. llamar('div_publicidad','_PanelIzq.php',''); //esto se ejecuta al abrir la pagina
  38.  
  39. setInterval(&#34;act_public()&#34;,3000) //se ejecutara act_public() cada 3 segundos
  40. &#60;/script&#62;
  41.  
  42.  

NOTA: la función setInterval() debe llevar la I en mayúscula, disculpa que no me habia dado cuenta y la puse toda en minúscula.... de todas maners aquí te adjunto un archivo sencillo de entender que hace mas o menos lo que tu quieres, solo que este coloca numeros aleatorios en vez de publicidad.

en el archivo de publicidad _PanelIzq.php tienes que colocar el código que extraiga la publicidad al azar... espero haberme explicado mejor esta vez jeje  :P ... cualquier cosa me avisas...
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
Sígueme en Twitter]
Donar comida a los chicos necesitados!
Todo lo puedo en Cristo que me fortalece...

saiory

  • Miembro activo
  • **
  • Mensajes: 25
    • Ver Perfil
Re: Mostrar Ofertas Aleatoriamente Cada X Tiempo
« Respuesta #8 en: Martes 11 de Diciembre de 2007, 17:48 »
0
He conseguido hacerlo pero me he dado cuenta que estoy utilizando sesiones globales y con este tipo de refresco no me funcionan, las pierdo. Tienes idea de porque pasa esto?

Gracias por tu ayuda.