elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [Pregunta]: ¿Alguna idea de como podría realizar esto?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Pregunta]: ¿Alguna idea de como podría realizar esto?  (Leído 2,422 veces)
Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
[Pregunta]: ¿Alguna idea de como podría realizar esto?
« en: 11 Agosto 2019, 03:14 am »

Buenas noches, tengo un problema y es que no puedo entender como podría solucionar el siguiente problema.

Para ponerlos en contexto primero quisiera explicar el sistema, vendría siendo un procedimiento por el cual al cargar la pagina se muestran 5 registros y dependiendo si existen mas de 5 registros se habilitará un botón el cual cuando se presione ejecutará una función JS (Ajax) que llamará a un archivo .php

El sistema funciona perfecto o mejor dicho casi perfecto, ya que lo único que me falta para que quede totalmente terminado es lo siguiente:

En el archivo .php pre-cargado
Código
  1. if($cantidad_total >= 6) // Cantidad total se refiere a la cantidad total de registros encontrados
  2. {
  3.      ?>
  4.      <script type="text/javascript">
  5.      // habilita o crea la función que al dar click en X botón mostrará más registros
  6.      $(".boton_mas_resultados").click(function()
  7.      {
  8.     var cantidad_vista = document.querySelectorAll('.box_resultado_busqueda').length;
  9.  
  10.     More_Results_Registros(cantidad_vista, <?php echo($cantidad_total); ?>);
  11. });
  12.      </script>
  13.      <?php
  14. }
  15.  

Ahora en el archivo ajax.js donde está la función more results
Código
  1. function More_Results_Registros(cantidad_vista, cantidad_total)
  2. {
  3.     var cant_actual = cantidad_total- cantidad_vista;
  4.  
  5.     if(cantidad_actual >= 1) // Si quedan registros disponibles para mostrar al menos 1
  6.     {
  7.            document.body.style.cursor = "progress";
  8.     }
  9.  
  10.     $.ajax({
  11.           url: 'ajax/elficheroajax.php',
  12.   type: 'POST',
  13.   dataType: 'html',
  14.   data: {cantidad_vista, cantidad_total},
  15.  
  16.   success: function() {
  17. document.body.style.cursor = "default";
  18.   }
  19.       })
  20.  
  21.       .done(function(anuncios)
  22.       {
  23.       if(cantidad_actual >= 1)
  24.       {
  25. $('.mostrador').html(anuncios);
  26.       }
  27. })
  28. }
  29.  

Básicamente lo que hace este código es que si no hay ningún registro disponible para mostrar en una próxima tanda no va a ejecutar ni a llamar ningún fichero ya que es algo totalmente innecesario.

El problema radica que necesito que esa cantidad_total va a ser actualizada por lo que no puedo usar siempre el mismo <script> que llama a la función more que es cuando se da click a dicho botón.

Mi idea era agregar un nuevo fragmento de código <script> en el fichero ajax que llamamos desde ajax.js
re-actualizando o recreando el script, nosé bien si este seria un metodo optimo para hacerlo.

Gracias


« Última modificación: 11 Agosto 2019, 03:16 am por MiguelCanellas » En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: [Pregunta]: ¿Alguna idea de como podría realizar esto?
« Respuesta #1 en: 11 Agosto 2019, 05:07 am »

Hola Miguel, siempre andas con cosas chulas jajaja.

Esta linea
if($cantidad_total >= 6)
La puedes cambiar por
if($cantidad_total > 5)
Es resultado es el mismo, te ahorras un caracter de código y diria que evitas una comprobación ya que creo que el >= hace lo siguiente:
if($cantidad_total > 6 || $cantidad_total = 6)
Lo mismo con cantidad_actual >=1

No entiendo lo comentado en esta frase:
Citar
El problema radica que necesito que esa cantidad_total va a ser actualizada por lo que no puedo usar siempre el mismo script que llama a la función more que es cuando se da click a dicho botón.
Cual es el motivo de que no puedes usar el mismo script que llama a more()?

Si entiendo lo que intentas hacer...

Quieres mostrar por ejemplo 5 links "gratis" y que si el usuario carga 1 link más, que se le adjunte un anuncio.
Lo que no entiendo es que quieres hacer a partir de ahí. Mostrar un anuncio por cada link cargado?

Podrías replanteàrtelo a la inversa.
Carga siempre 1 anuncio por link. Menos cuando el usuario solo tenga menos de 6 registros.

Igual no es lo que pides. Si explicas el objetivo que intentas conseguir através del código te comento como modificaría tu codigo para hacerlo.


En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Alguna idea de como podría realizar esto?
« Respuesta #2 en: 11 Agosto 2019, 05:38 am »

No entiendo, si le vas a preguntar de nuevo al servidor por la cantidad total de registros (porque es la única forma de hacerlo) para que hacer todo esto. Mejor decirle al usuario que si te llega una respuesta vacía, es que no hay más datos para mostrar ahora. Vaya que si le tienes que preguntar al servidor, no te queda de otra que hacer una petición de si o si.
En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: ¿Alguna idea de como podría realizar esto?
« Respuesta #3 en: 11 Agosto 2019, 18:43 pm »

Gracias a los dos por responder!

No me di a entender bien, disculpen. Básicamente es ir cargando datos, yo de entrada muestro 5 datos y al hacer click en x botón mostrará más datos y así sucesivamente hasta completar todos los registros disponibles. Es interesante el sistema que dijiste de ir mostrando un anuncio por cada tanda de datos que se muestra pero no era lo que quería. Me explique muy mal seguramente..

Imaginemos que para el momento en que la pagina ya fue cargada yo ya tengo 5 registros mostrados... okay... y en total hay 25 registros pero sólo mostrara 5 registros de entrada... ahora como hay más de 5 registros ($cantidad_total >= 6) mostrará el botón para cargar más.. voy a aplicar lo de cambiar >= por > gracias por tu consejo!

Pero ahora imaginemos que antes de haber presionado el botón de cargar más, se borraron algunos registros nose.. 7 registros se borraron... como ya se pueden estar imaginando para cuando yo use la función que esta en ajax.. usará la cantidad total de anuncios que fue cargada anteriormente es decir usará $cantidad_total = 25 un dato que es falso ya que se habían borrado 7 registros por lo que el dato real es $cantidad_total = 18

Ya creo haber encontrado la solución a esto y quería compartirla con ustedes, para saber que les parece y por si a alguien alguna vez le hace falta.

En el ficheroajax.php se debe poner el <script> renovado
Código
  1. $(".boton").click(function()
  2. {
  3. var dato = 1;
  4. alert(dato);
  5. });
  6.  
  7. $('.boton').unbind('click');
  8. $(".boton").click(function()
  9. {
  10. var dato = 2;
  11. alert(dato);
  12. });
  13.  

Les voy a explicar el código el primer fragmento mostrado vendría a ser el script que ya esta en la pagina cargada (no se debería poner en el ficheroajax.php
Después donde dice $('.boton').unbind('click'); sirve para eliminar un script o un evento mejor dicho entonces eliminamos ese evento y lo creamos nuevamente pero con datos actualizados... basicamente eliminas el evento desde ficheroajax.php y volves a preguntar u obtener datos actualizados copiando y pegando el script donde se llama a more_results ...

Si tu evento es un "scroll" se puede eliminar así

Código
  1. $(document).unbind('scroll'); // document puede cambiarse si el scroll se realiza en un div, en ese caso pondrías el id o la clase del div que tiene el scroll pero si el scroll se realiza en el body se deja así..
  2.  

Estos códigos ya los probé y funcionan correctamente.
Si me quieren dar su opinión estoy abierto a criticas, y si alguien necesitó de este código pero todavía no termino de entender me puede preguntar y voy a tratar de explicarlo mejor.
« Última modificación: 11 Agosto 2019, 18:48 pm por MiguelCanellas » En línea

MinusFour
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.529


I'm fourth.


Ver Perfil WWW
Re: [Pregunta]: ¿Alguna idea de como podría realizar esto?
« Respuesta #4 en: 11 Agosto 2019, 19:24 pm »

Pero todo esto es porque te quieres evitar hacer una petición extra al llegar al final de los resultados. De que te sirve esto, si como quiera tienes que preguntarle al servidor si tienes nuevos resultados. Porque no mejor decirle al usuario que recibiste una respuesta vacía del servidor, indicando que ya no tienes nada más que mostrar.
« Última modificación: 11 Agosto 2019, 19:27 pm por MinusFour » En línea

Leguim


Desconectado Desconectado

Mensajes: 719



Ver Perfil
Re: [Pregunta]: ¿Alguna idea de como podría realizar esto?
« Respuesta #5 en: 11 Agosto 2019, 20:39 pm »

hola!

La petición la hago en > el ficheroajax.php

al inicio del fichero pregunto la cantidad total.

Pagina cargada -> realiza una consulta preguntando $cantidad_total
Ajax.js -> Hago una operación cantidad_disponible = cantidad_total - cantidad_vista;
Si la cantidad disponible > 0 se va a permitir usar dicha función .js

Es este el control:
Código
  1. function More(cantidad_total, cantidad_vista)
  2. {
  3.   var cantidad_disponible = cantidad_total - cantidad_vista;
  4.  
  5.   if(cantidad_disponible > 0)
  6.   {
  7. document.body.style.cursor = "progress";
  8.   }
  9.  
  10.   $.ajax({
  11.        url: 'ajax/ficheroajax.php',
  12. type: 'POST',
  13. dataType: 'html',
  14. data: {cantidad_vista},
  15.  
  16. success: function() {
  17.       document.body.style.cursor = "default";
  18. }
  19.    })
  20.  
  21.    .done(function(resultados)
  22.    {
  23.   if(cantidad_disponible > 0)
  24.     {
  25. $('.mostrador).html(resultados);
  26.   }
  27.    })
  28. }
  29.  

ficheroajax.php -> vuelve a realizar una consulta preguntando $cantidad_total, y hace lo que dije antes elimina el evento click y crea uno nuevo con la cantidad total actualizada que pregunte en este mismo fichero (ficheroajax.php)

Entonces siempre va a estar trabajando con datos actualizados realmente.
« Última modificación: 11 Agosto 2019, 20:42 pm por MiguelCanellas » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿alguna idea para esto?
Programación Visual Basic
tosferina 0 1,498 Último mensaje 30 Enero 2006, 20:48 pm
por tosferina
e tenido una idea... esto podria funcionar? ( SMF )
PHP
XXXXXX 4 2,426 Último mensaje 18 Junio 2010, 13:55 pm
por XXXXXX
¿Alguna idea para esto?
Java
Fryuio 3 1,959 Último mensaje 27 Noviembre 2016, 10:51 am
por Fryuio
alguna idea para esto (un programa de autos y propietarios) / java / eclipse
Java
bryanfal08 1 1,800 Último mensaje 28 Noviembre 2016, 01:43 am
por bryanfal08
[Resuelto] [Pregunta]: ¿Como puedo realizar esto? « 1 2 »
PHP
Leguim 10 5,650 Último mensaje 25 Abril 2020, 05:27 am
por sirefys
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines