PHP - Condicionar celdas del datatable según valor de la columna.

 
Vista:
Imágen de perfil de Greg
Val: 8
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Condicionar celdas del datatable según valor de la columna.

Publicado por Greg (4 intervenciones) el 28/07/2017 17:16:11
Hola, que tal. Traigo el siguiente código php que me permite mostrar un datatable en pantalla utilizando bootstrap 3.3. Requiero el apoyo de ustedes para saber como condicionar las variables a mostrar dentro del arreglo de una determinada columna (en este caso "status"), para pintar el texto o la celda segun el valor.

Por ejemplo. si el Equipo muestra el status "DISPONIBLE" esté en verde o si muestra el status "OCUPADA" este en rojo, etc.

Adjunto código php:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?php
include('db.php');
include('function.php');
$query = '';
$output = array();
$query .= "SELECT * FROM equipos ";
if(isset($_POST["search"]["value"]))
{
	$query .= 'WHERE clave_ogo LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR marca LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR modelo LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR serie LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR m_cpu LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR vel_cpu LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR cap_hdd LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR cant_ram_asign LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR memoria_video LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR s_o LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR usuario LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR empresa LIKE "%'.$_POST["search"]["value"].'%" ';
	$query .= 'OR status LIKE "%'.$_POST["search"]["value"].'%" ';
}
if(isset($_POST["order"]))
{
	$query .= 'ORDER BY '.$_POST['order']['0']['column'].' '.$_POST['order']['0']['dir'].' ';
}
else
{
	$query .= 'ORDER BY clave_ogo ASC ';
}
if($_POST["length"] != -1)
{
	$query .= 'LIMIT ' . $_POST['start'] . ', ' . $_POST['length'];
}
 
$statement = $connection->prepare($query);
$statement->execute();
$result = $statement->fetchAll();
$data = array();
$filtered_rows = $statement->rowCount();
foreach($result as $row)
{
	$image = '';
	if($row["image"] != '')
	{
		$image = '<img src="upload/'.$row["image"].'" class="img-thumbnail" width="50" height="35" />';
	}
	else
	{
		$image = '';
	}
	$sub_array = array();
	$sub_array[] = $image;
	$sub_array[] = $row["clave_ogo"];
	$sub_array[] = $row["marca"];
	$sub_array[] = $row["modelo"];
	$sub_array[] = $row["serie"];
	$sub_array[] = $row["m_cpu"];
	$sub_array[] = $row["vel_cpu"];
	$sub_array[] = $row["cap_hdd"];
	$sub_array[] = $row["cant_ram_asign"];
	$sub_array[] = $row["memoria_video"];
	$sub_array[] = $row["usuario"];
	$sub_array[] = $row["empresa"];
	$sub_array[] = $row["status"];
	$sub_array[] = '<button type="button" name="update" id="'.$row["id"].'" class="glyphicon glyphicon-pencil btn btn-primary btn-xs update"></button>';
	$sub_array[] = '<button type="button" name="delete" id="'.$row["id"].'" class="glyphicon glyphicon-trash btn btn-danger btn-xs delete"></button>';
	$data[] = $sub_array;
 
}
 
$output = array(
	"draw"				=>	intval($_POST["draw"]),
	"recordsTotal"		=> 	$filtered_rows,
	"recordsFiltered"	=>	get_total_all_records(),
	"data"				=>	$data
);
echo json_encode($output);
?>

Les adjunto una captura de pantalla de la tabla:

tabla

Muchas gracias de antemano.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de facundo

Condicionar celdas del datatable según valor de la columna.

Publicado por facundo (185 intervenciones) el 29/07/2017 16:57:44
Hola, mira, debe haber mejores formar para hacerlo, pero con los conocimientos que tengo yo se me ocurre una sola forma que lo probe y anda y es asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$row['disponibilidad'] = 'ocupado';
$asd = array();
$asd[] = $row['disponibilidad'];
 ?>
 
 
 
<table>
	<tr>
		<td style=" <?php if( $row['disponibilidad'] == 'disponible') {?>background-color: green <?php } else{?> background-color:red <?php } ?>">asd</td>
		<td></td>
 
	</tr>
 
</table>

Solo que en $row['disponibilidad'] lo vas a cambiar por el nombre de tu celda que creo que es $row['status']

responde te funciono es eso lo que buscabas??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Gregorio
Val: 8
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Condicionar celdas del datatable según valor de la columna.

Publicado por Gregorio (4 intervenciones) el 31/07/2017 17:00:17
Hola facundo,

Gracias por tu respuesta, disculpa la demora de mi contestación. Estuve haciendo pruebas con el código que me dejaste y no logré hacer que funcionara. solo me pintaba el head de la datatable. Talvez me falto colocar mi codigo html para que veas como inserto los datos en la vista; lo dejaré aquí para ver si puedes continuar apoyándome.

Muchas gracias, saludos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<table id="user_data" class="table table-bordered table-striped centercoltabla">
					<thead>
						<tr>
							<th>Imagen</th>
							<th>Clave</th>
							<th>Marca</th>
							<th>Modelo</th>
							<th>Serie</th>
							<th>CPU</th>
							<th>Vel.</th>
							<th>Cap.</th>
							<th>RAM</th>
							<th>Video</th>
							<th>Usuario</th>
							<th>Emp</th>
							<th>Status</th>
							<th>Mod</th>
							<th>Del</th>
						</tr>
					</thead>
				</table>

pd: de esta manera leo los datos en html. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Condicionar celdas del datatable según valor de la columna.

Publicado por facundo (185 intervenciones) el 31/07/2017 20:20:42
Hola, el codigo que te puse anda, ahora lo tenes que adaptar a los nombres que tiene tu codigo. Me gustaria que entendieras lo que te pase porque si lo entendes lo vas a poder hacer. Si vos me pasas tu archivo y yo te resuelvo el problema no te va a servir de nada porque no vas a aprender.
Si no entendiste el codigo que te pase decime y te lo explico.
Y porque no lo pudiste hacer andar? te tira algun error? o sino mostrame la parte de tu programa donde implementaste el codigo que te pase, sino no puedo ver donde esta tu error!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gregorio
Val: 8
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Condicionar celdas del datatable según valor de la columna.

Publicado por Gregorio (4 intervenciones) el 31/07/2017 20:40:16
Hola facundo,

Gracias por responder. Intenté programar el fragmento de código que me pasaste adaptándolo al mío, pero no pude.
Te explico; añadí el código en mi html de la siguiente manera:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$row['status'] = 'OCUPADA';
$asd = array();
$asd[] = $row['status'];
?>
<div id="tabla1" class="table-responsive">
	<hr size="2px" color="black" />
 
	<table id="user_data" class="table table-bordered table-striped centercoltabla">
		<thead>
			<tr>
				<th>Imagen</th>
				<th>Clave</th>
				<th>Marca</th>
				<th>Modelo</th>
				<th>Serie</th>
				<th>CPU</th>
				<th>Vel.</th>
				<th>Cap.</th>
				<th>RAM</th>
				<th>Video</th>
				<th>Usuario</th>
				<th>Emp</th>
				<th style=" <?php if( $row['status'] == 'DISPONIBLE') {?>background-color: green <?php } else{?> background-color:red <?php } ?>">Status</th>
				<th>Mod</th>
				<th>Del</th>
			</tr>
		</thead>
	</table>
</div>

y me da el siguiente resultado:

prueba2

A eso me refiero que me pinta solo el head.

Agradezco tanto que me respondas, y no busco que me "resuelvas el problema" como lo mencionas, sinceramente he batallado un poco con esto, y no me vienen nada mal tus consejos.
Si el código no lo hice, como debió ser, entonces si, no entendí lo que me intentabas mostrar y te pido una sincera disculpa.

Gracias nuevamente, y quedo a tus comentarios.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Condicionar celdas del datatable según valor de la columna.

Publicado por facundo (185 intervenciones) el 31/07/2017 22:06:17
Te pinta solo el head porque es el titulo de la columna (el th) vos lo tenes que poner en el <td> (osea el campo donde dice disponible o ocupado)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Gregorio
Val: 8
Ha aumentado su posición en 16 puestos en PHP (en relación al último mes)
Gráfica de PHP

Condicionar celdas del datatable según valor de la columna.

Publicado por Gregorio (4 intervenciones) el 31/07/2017 22:08:49
Lo coloqué también en td y me sigue pintando el th. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de facundo

Condicionar celdas del datatable según valor de la columna.

Publicado por facundo (185 intervenciones) el 31/07/2017 22:16:27
No puede ser, sacalo del <th> borralo y ponelo en el <td>.

El siguiente dato lo vas a sacar haciendo una consulta a tu base de datos para ver si dice disponible o ocupado
1
$row['disponibilidad'] == 'disponible'

Osea, si lo haces asi te va a pintar todos los <td> en rojo, porque el valor es siempre "disponible" porque el array $row['status'] = 'OCUPADA' vale eso siempre a no ser que vos lo cambies. Por eso te digo de hacer una consulta a la database para ver si dice ocupada o disponible

esque como te dije antes no puedo ver el error si no me pasas el codigo completo de esa parte, pasame la parte que estan tambien los <td>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar