Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Gestión de contenido dinámico

Estas en el tema de Gestión de contenido dinámico en el foro de Javascript en Foros del Web. Hola! Estoy trabajando en una web mas que nada por interés académico y para aprender, y me he encontrado con algo que no se muy ...
  #1 (permalink)  
Antiguo 21/10/2014, 15:39
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
Gestión de contenido dinámico

Hola! Estoy trabajando en una web mas que nada por interés académico y para aprender, y me he encontrado con algo que no se muy bien como hacer, paso a explicar lo que quiero hacer a ver si alguien puede ayudarme:

La idea es gestionar una lista de personas para hacer "equipos". Ya tengo implementado un select en el que tengo todas las personas introducidas, con una serie de filtros para que las personas mostradas sean las que me interesan. Una vez seleccionada en el select la idea es que esa persona sea añadida a la lista del "equipo", que se modifica en tiempo real en la misma pagina obviamente.

Hablando un poco mas claro, seria añadir texto a la pagina en función de lo que vaya añadiendo, o quitarlo si saco gente del equipo.

Cargo todas las personas existentes en el select, y en tiempo real dinámicamente, muestro o oculto los que me interesan en relación a los filtros introducidos. Pero no se como gestionar la lista del equipo de forma dinámica... Alguien puede ayudarme?


Saludos.
  #2 (permalink)  
Antiguo 21/10/2014, 17:23
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Gestión de contenido dinámico

Cuando mencionas lo de "dinámico", supongo que te refieres a tener una lista de datos variables, la cual será alimentada manualmente o desde una base de datos. Supongamos que sea mediante una BD, entonces, lo que podrías hacer es recolectar todos los datos encontrados en la BD y devolver un array de objetos en donde cada uno contendrá a cada nombre de la tabla en la BD. Un ejemplo:

Código PHP:
Ver original
  1. /******************** personas.php ********************/
  2.  
  3. //Acá realizas tu conexión a la BD y luego viene el resto
  4. $query = mysqli_query($conexion, 'SELECT nombre FROM personas') or exit ('¡Error!');
  5. if (mysqli_num_rows($query)){
  6.     $nombres = array();
  7.     while ($row = mysqli_fetch_array($query)){
  8.         $nombres[] = array('nombre' => $row['nombre']);
  9.     }
  10.     mysqli_free_result($query);
  11.     echo json_encode($nombres);
  12. }

El proceso es simple. Hago una búsqueda en la BD y, si obtengo resultados, creo un array al cual alimentaré con otros arrays en donde cada uno contendrá a cada nombre de tabla de la BD. Al final, retorno este conjunto en forma de objeto JSON. La idea es que este proceso se ejecute como respuesta a una petición asíncrona (Ajax) desde el archivo inicial (en donde está el combo) y ya con estos datos, alimentas al <select> con los resultados obtenidos:

Código Javascript:
Ver original
  1. var lista = document.getElementById("id_select"), //El combo de opciones
  2.     ajax = function(){
  3.         var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
  4.         xhr.open("GET", "personas.php", true);
  5.         xhr.onreadystatechange = function(){
  6.             if (xhr.readyState == 4 && xhr.status == 200){
  7.                 var nombres = JSON.parse(xhr.responseText),
  8.                     total = nombres.length;
  9.                 for (var i = 0; i < total; i++){
  10.                     var opcion = document.createElement("option");
  11.                     opcion.value = nombres[i].nombre;
  12.                     opcion.innerHTML = nombres[i].nombre;
  13.                     lista.appendChild(opcion);
  14.                 }
  15.             }
  16.         };
  17.         xhr.send(null);
  18.     };

Creo al objeto XMLHttpRequest (para hacer la petición asíncrona), realizo la petición y recibo una respuesta a la cual decodifico para obtener un array al cual pueda recorrer y así tomar los valores que contiene para añadirlos al combo. Con lo anterior, ya tienes listo al combo y sus opciones traídas desde la BD. Ahora, nos haría falta un botón que, al pulsarlo, tomará al valor seleccionado en el combo y lo listará, además de un elemento en el cual se listarán los nombres seleccionados.

Código HTML:
Ver original
  1. Listado: <select id = "lista"></select>
  2. <button onclick = "agregar()">Agregar</button>
  3. Seleccionados: <p id = "seleccionados"></p>

Como verás, al pulsar el botón, se ejecutará la función agregar(), la cual tendrá una estructura como esta:

Código Javascript:
Ver original
  1. var agregar = function(){
  2.     var seleccionados = document.getElementById("seleccionados");
  3.     seleccionados.innerHTML += "<br />" + lista.value;
  4.     lista.removeChild(lista[lista.selectedIndex]);
  5. };

De esta forma, vamos mostrando los nombres seleccionados en el párrafo 'seleccionados' y, a la vez, retiramos el mismo nombre del combo. Todo junto quedaría así:

Código Javascript:
Ver original
  1. var lista = document.getElementById("lista"), //El combo de opciones
  2.     seleccionados = document.getElementById("seleccionados"), //El párrafo
  3.     agregar = function(){
  4.         seleccionados.innerHTML += "<br />" + lista.value;
  5.         lista.removeChild(lista[lista.selectedIndex]);
  6.     },
  7.     ajax = function(){
  8.         var xhr = new XMLHttpRequest() || new ActiveXObject("Microsoft.XMLHTTP");
  9.         xhr.open("GET", "personas.php", true);
  10.         xhr.onreadystatechange = function(){
  11.             if (xhr.readyState == 4 && xhr.status == 200){
  12.                 var nombres = JSON.parse(xhr.responseText),
  13.                     total = nombres.length;
  14.                 for (var i = 0; i < total; i++){
  15.                     var opcion = document.createElement("option");
  16.                     opcion.value = nombres[i].nombre;
  17.                     opcion.innerHTML = nombres[i].nombre;
  18.                     lista.appendChild(opcion);
  19.                 }
  20.             }
  21.         };
  22.         xhr.send(null);
  23.     };

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand

Última edición por Alexis88; 22/10/2014 a las 10:19 Razón: Corrección
  #3 (permalink)  
Antiguo 22/10/2014, 05:16
 
Fecha de Ingreso: junio-2013
Mensajes: 13
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Gestión de contenido dinámico

O.O

Grandísimo aporte! Muchas gracias, creo que ya podré hacer lo que pretendo sin problemas. Si algún día termino la web no me olvidaré de poner "Con la colaboración de www.forosdelweb.com" jaja siempre que he tenido una duda he podido resolverla aquí, gran comunidad!!



Saludos.

Etiquetas: contenido, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:33.