Foros del Web » Programando para Internet » PHP »

Cómo ordenar campos en un panel de administración

Estas en el tema de Cómo ordenar campos en un panel de administración en el foro de PHP en Foros del Web. Hola, Estoy con una duda que no sé como solucionarla, aunque seguramente sea una cosa muy tonta. Yo tengo por ejemplo una tabla que se ...
  #1 (permalink)  
Antiguo 05/04/2012, 06:08
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Cómo ordenar campos en un panel de administración

Hola,

Estoy con una duda que no sé como solucionarla, aunque seguramente sea una cosa muy tonta.

Yo tengo por ejemplo una tabla que se llama columnas.

¿Cómo puedo ponerle orden y se vayan actualizando?
He pensado en añadir un campo llamado "orden" y ponerle yo los valores numéricos, pero... ¿cómo podría hacer para que si he quitado uno al (por ejemplo) 4 para que se ponga 3 y el 3 para que se ponga cuarto?

Es para ir modificando el orden de los bloques que tengo en cada columna.

Gracias de antemano.
__________________
@JaimeMSE - ¡Sígueme!
  #2 (permalink)  
Antiguo 05/04/2012, 12:32
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cómo ordenar campos en un panel de administración

Cuando eliminas un elemento, tienes que leer todos los registros y actualizar el orden a mano. Ahora, te sugiero que no uses 1, 2, 3, 4, sino 10, 20, 30, 40, etc.; explico:

Código:
Orden - Nombre
--------   ------------------------
  10       Campo 1
  20       Campo 3
  30       Campo 4
  40       Campo 2
Si quieres subir "Campo 2" para quedar antes del 4, tendrías que asignar 25 en el orden. Después, lees todos los registros, lógicamente ordenados por "orden" y:

Código PHP:
Ver original
  1. $orden = 10;
  2. $res = mysql_query('SELECT * FROM tabla ORDER BY orden');
  3. while($row = mysql_fetch_assoc($res)) {
  4.       // Suponiendo que tienes un campo llamado "id"
  5.       $id = $row['id'];
  6.       mysql_query("UPDATE tabla SET orden = $orden WHERE id = $id");
  7.  
  8.       // Incrementas orden para el siguiente registro
  9.       $orden += 10;
  10. }
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 05/04/2012, 12:47
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cómo ordenar campos en un panel de administración

Cita:
Iniciado por Triby Ver Mensaje
Cuando eliminas un elemento, tienes que leer todos los registros y actualizar el orden a mano. Ahora, te sugiero que no uses 1, 2, 3, 4, sino 10, 20, 30, 40, etc.; explico:

Código:
Orden - Nombre
--------   ------------------------
  10       Campo 1
  20       Campo 3
  30       Campo 4
  40       Campo 2
Si quieres subir "Campo 2" para quedar antes del 4, tendrías que asignar 25 en el orden. Después, lees todos los registros, lógicamente ordenados por "orden" y:

Código PHP:
Ver original
  1. $orden = 10;
  2. $res = mysql_query('SELECT * FROM tabla ORDER BY orden');
  3. while($row = mysql_fetch_assoc($res)) {
  4.       // Suponiendo que tienes un campo llamado "id"
  5.       $id = $row['id'];
  6.       mysql_query("UPDATE tabla SET orden = $orden WHERE id = $id");
  7.  
  8.       // Incrementas orden para el siguiente registro
  9.       $orden += 10;
  10. }
Creo que implementar lo que me propones sería muy engorroso.

Entonces, yo me pregunto: ¿Cómo hacen las webs para que cuando pulses en una flechita hacia arriba se mueva uno más para arriba y el que está arriba descienda?

Gracias de todas formas :)
__________________
@JaimeMSE - ¡Sígueme!
  #4 (permalink)  
Antiguo 05/04/2012, 13:27
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cómo ordenar campos en un panel de administración

Creo que ya sé la manera (menos mal que tengo una pizarra donde desarrollar las cosas y verlas mejor xD).

Para los que buscan los mismo que yo:

Supongamos que tenemos en la base de datos 5 columnas:
  • Bloque1
  • Bloque2
  • Bloque3
  • Bloque 4
  • Bloque 5

Ahora, en cada bloque metemos dos iconos (una flecha para arriba y otra para abajo) y lo hacemos de la siguiente manera.

Vamos a mover el bloque 5 a la posición 4, por lo tanto, el bloque 4 se tendrá que poner en posición 5.

Procedemos:

Código PHP:
Ver original
  1. $pa= 5 //posición actual
  2. $pp = 4 //posición posterior
  3.  
  4. $movimiento1 = mysql_query = ("UPDATE pa='$pp' WHERE pa='$pa'");
  5. $movimiento2 = mysql_query = ("UPDATE pa='$pa' WHERE pa='$pp' ");

Si no me equivoco sería algo así. Lo voy a probar.
__________________
@JaimeMSE - ¡Sígueme!

Última edición por JaimeMSE; 05/04/2012 a las 13:54
  #5 (permalink)  
Antiguo 05/04/2012, 14:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cómo ordenar campos en un panel de administración

Creo que ambos van a quedar con el mismo valor.

En el WHERE mejor usa ID para evitarte esos problemas.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 05/04/2012, 14:09
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cómo ordenar campos en un panel de administración

Sí, quedaban con el mismo valor, voy a probar con el ID.

Gracias :)

EDITO: Sigo teniendo problemas. No me cambia el segundo valor. Osea, si quiero pasar el bloque 4 al puesto 3, me pasa del 4 al 3 bien, pero el 3 al 4 no.
Aquí mi código:

Código PHP:
Ver original
  1. <?php
  2.  
  3. require("config.php");
  4.  
  5. $pa = @$_GET["pa"];
  6. $pp = @$_GET["pp"];
  7. $idcolumna = @$_GET["idcolumna"];
  8.  
  9. if(@$_GET["pa"] && @$_GET["pp"]) {
  10.    
  11.     $movimiento1 = mysql_query("UPDATE columnas SET posicion='$pp' WHERE idcolumna='$idcolumna'",$conexion);
  12.    
  13.     if(@$_GET["mv"] == "arriba") {
  14.         $idcolumna = $idcolumna - 1;
  15.         $movimiento2 = mysql_query("UPDATE columnas SET posicion='$pa' WHERE idcolumna='$idcolumna'",$conexion);
  16.     }
  17.     if(@$_GET["mv"] == "abajo") {
  18.         $idcolumna = $idcolumna + 1;
  19.         $movimiento2 = mysql_query("UPDATE columnas SET posicion='$pa' WHERE idcolumna='$idcolumna'",$conexion);
  20.     }
  21.    
  22.    
  23.     if(!$movimiento1 OR !$movimiento2) {
  24.     echo "error";
  25. }
  26. }
  27.  
  28. $consulta = mysql_query("SELECT idcolumna,titulo,posicion FROM columnas WHERE lado='2' ORDER BY posicion ASC",$conexion);
  29.  
  30. while($row = mysql_fetch_array($consulta)) { ?>
  31.  
  32.     <?php echo $row["titulo"]; ?> | <?php echo $row["posicion"]; ?> -----
  33.    
  34.     <a href="?pa=<?php echo $row["posicion"]; ?>&pp=<?php $pp = $row["posicion"] - 1; echo $pp ?>&idcolumna=<?php echo $row["idcolumna"]; ?>&mv=arriba">Arriba</a>  
  35.     ||||
  36.     <a href="?pa=<?php echo $row["posicion"]; ?>&pp=<?php $pp = $row["posicion"] + 1; echo $pp ?>&idcolumna=<?php echo $row["idcolumna"]; ?>&mv=abajo">Abajo</a>
  37.    
  38.     <br/>
  39.    
  40.    
  41. <?php } ?>

Perdón por lo sucio que está, estoy probando con lo que se me viene a la cabeza xD
__________________
@JaimeMSE - ¡Sígueme!

Última edición por JaimeMSE; 05/04/2012 a las 14:21
  #7 (permalink)  
Antiguo 05/04/2012, 15:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Cómo ordenar campos en un panel de administración

Me parece que tu código quedaría mucho más engorroso que mi sugerencia, porque tienes que proporcionar dos IDs en los enlaces, uno para saber que elemento sube y otro para el que baja.

Cierto, el código que proporcioné no es lo óptimo, pero sí es un buen punto de partida, además de que puedes incluirlo en una función y lo podrás utilizar indistintamente para reordenar después de subir, bajar o eliminar un elemento.

Se puede optimizar?, sí, mucho, yo sólo aporté un ejemplo sencillo.
__________________
- León, Guanajuato
- GV-Foto
  #8 (permalink)  
Antiguo 05/04/2012, 15:52
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cómo ordenar campos en un panel de administración

El problema es saber el id del bloque de arriba y el de abajo, ya que no van organizados. Creo que optaré por el ejemplo que pongo, aunque no cambia la 2º opción, nada más hay que darle al otro bloque para abajo y se pondrán bien.

Gracias.
__________________
@JaimeMSE - ¡Sígueme!
  #9 (permalink)  
Antiguo 09/04/2012, 05:18
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cómo ordenar campos en un panel de administración

tal y como lo haces es poco dinámico y recurrente. yo usaría javascript (para modificar el dom) y ajax (para mandar a actualizar los registros)

en el javascript necesitarás usar los métodos: insertBefore(), setAttribute(), getAttribute(), nextElementSibling, previousElementSibling y puede que algún otro mas
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #10 (permalink)  
Antiguo 09/04/2012, 06:07
Avatar de JaimeMSE  
Fecha de Ingreso: diciembre-2010
Ubicación: Isla Cristina (Huelva)
Mensajes: 164
Antigüedad: 13 años, 4 meses
Puntos: 7
Respuesta: Cómo ordenar campos en un panel de administración

Gracias IsaBelM.

Entonces la idea es:
Hacer un script en JS, que pueda arrastrar los bloques y ordenarlos, y cuando mueva cada bloque, con Ajax manda los datos a la DB, ¿cierto?

Si es así me costará algo, ya que de JS un poco pero de ajax ni idea.
Gracias de nuevo :)
__________________
@JaimeMSE - ¡Sígueme!
  #11 (permalink)  
Antiguo 09/04/2012, 06:17
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Cómo ordenar campos en un panel de administración

tanto como arrastar, no. a no ser que quieras usar jquery o html5. mas bien se trataría de tu idea inicial de dos "links" para invocar a las funciones de subir o bajar una posición un registro. intentalo y si no lo logras, te montaré una base
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Etiquetas: campos, mysql
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 05:20.