Bonjour,
Dans un projet web, j'ai une page avec un tableau.
Ce tableau est rempli grâce a une requette qui me renvoie tout les objets. Jusque là c'est ok.
Dans mon tableau, je met une couleur en fonction de l'état de mes objets, lorsqu'un objet change d'état, il passe en vert.
Ma question est comment faire pour que mon objet en vert se positionne en fin de tableau?
Bon j'ai trouvé le prob, je n'y avais pas pensé mais datatable utilise un ordering par defaut a true. Donc il suffit de faire
$('#ftth').DataTable({
"ordering": false
});
en tout cas merci pour votre aide !
Bonjour,
En modifiant la requête pour afficher les éléments que vous souhaitez en premier.
Quelle est la requête ?
public function listTaa($param = '')
{
return $this->query("
SELECT oc.dossier, o.nb_logements, o.num, o.voie, o.adresse, o.cp, o.localite, o.num_cplt, o.batiment, n.etat, n.view
FROM ftth_optimum_capecom as oc
LEFT OUTER JOIN ftth_optimum as o
ON o.dossier = oc.dossier
AND oc.dossier = o.dossier
LEFT OUTER JOIN ftth_new as n
ON oc.dossier = n.dossier AND n.dossier = oc.dossier
WHERE cmd_acces_valide = ? AND (ftth_societe_travaux_id IS NULL OR ftth_societe_travaux_id = ?)".$param." ORDER BY n.view ASC", ['oui', '']
);
}
en fait j'ai déjà essayé avec un order mais ça ne fonctionne pas vraiment, n.view correspond à mon champ où l'état est modifié. (oui ou non)
les lignes où la view = oui sont mélangé avec les view = non. Donc ça ne fonctionne pas !
bon je viens de tester, en fait la requête fonctionne ! C'est l'affichage qui merde !
<table id="ftth" class="display table table-bordered table-hover">
<thead>
<tr>
<th>Code IMB</th>
<th>EL</th>
<th>Numéro</th>
<th>Num cplt</th>
<th>Bâtiment</th>
<th>Voie</th>
<th>Adresse</th>
<th>CP</th>
<th>Ville</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php foreach($taa as $o):
if($o->etat === 'taa' && $o->view === 'non'){?>
<tr class="danger text-danger">
<td><?= $o->dossier;?></td>
<td><?= $o->nb_logements;?></td>
<td><?= $o->num;?></td>
<td><?= $o->num_cplt;?></td>
<td><?= $o->batiment;?></td>
<td><?= $o->voie;?></td>
<td><?= $o->adresse;?></td>
<td><?= $o->cp;?></td>
<td><?= $o->localite;?></td>
<td>
<a data-toggle="tooltip" data-placement="bottom" title="Aperçu" class="btn btn-info" href="?p=ftth.view&id=<?= $o->dossier;?>&view=1"><i class="fa fa-pencil-square-o"></i></a>
</td>
</tr><?php
}else{?>
<tr class="success text-success">
<td><?= $o->dossier;?></td>
<td><?= $o->nb_logements;?></td>
<td><?= $o->num;?></td>
<td><?= $o->num_cplt;?></td>
<td><?= $o->batiment;?></td>
<td><?= $o->voie;?></td>
<td><?= $o->adresse;?></td>
<td><?= $o->cp;?></td>
<td><?= $o->localite;?></td>
<td>
<a data-toggle="tooltip" data-placement="bottom" title="Aperçu" class="btn btn-info" href="?p=ftth.view&id=<?= $o->dossier;?>"><i class="fa fa-pencil-square-o"></i></a>
</td>
</tr>
<?php }
endforeach;?>
</tbody>
</table>
En fait c'est ma condition qui merde
if($o->etat === 'taa' && $o->view === 'non'){}
il n'y aurait pas une classe boutstrap ou un code css pour faire un genre de push-bottom dans un tableau?
Bonjour.
bon je viens de tester, en fait la requête fonctionne ! C'est l'affichage qui merde !
Les données que tu récupères en SQL, elles ressortent bien comme tu le souhaites ?
Vu la requête SQL que tu fais, tu ordonnes par ordres croissant du champ view
qui vaut soit oui
soit non
, donc dans l'état actuel tu récupères d'abord les oui
puis ensuite les non
.
Si tu veux l'inverse, il te suffit de faire par ordre décroissant DESC
, de cette manière, tu récupèreras en premier les non
et ensuite les oui
.
Pour terminer, tu te répètes un peu trop dans ton code, fais plutôt :
<?php
if($o->etat === 'taa' && $o->view === 'non'){ ?>
<tr class="danger text-danger">
<?php } else { ?>
<tr class="success text-success">
<?php } ?>
Étant donné que tu n'as que cette balise qui change, c'est un peu bète de faire une condition sur autant de code.
ahhh oui je n'y ai pas pensé, pourtant j'essaie de pas copier/coller du code :)
Pour la requête, effectivement ASC ou DESC je connais, le resultat obtenu ressort bien, enfin sauf sur mon affichage.
Si j'enlève mon
if($o->etat === 'taa' && $o->view === 'non'){
je retrouve le même résultat que pour ma requête
Ah oui, dans ce cas là, soit utiliser le ternaire sur la classe du tr
est sur la partie de l'url ou alors définir deux variables par exemple.
Dans tous les cas, c'est dommage de répéter autant de code pour deux petits détails. :)
je retrouve le même résultat que pour ma requête
Tu récupères les données dans l'ordre que tu les veux ?
oui si je fais un simple foreach sans mettre de condition ! j'essaie de reduire mon code pour voir si ça fonctionne mieux, sinon je voix pas le prob
Bon finalement ça ne fonctionne pas, je m'explique si je fais la requête dans phpmyadmin, ça fonctionne ! Mais dans mon tableau ça ne fonctionne pas même sans condition.
J'ai oublié de préciser que j'utilise datatable, alors est ce qu'il y a un ordre lié a ça ?
oui si je fais un simple foreach sans mettre de condition ! j'essaie de reduire mon code pour voir si ça fonctionne mieux, sinon je voix pas le prob
Est-ce que tous les enregistrements qui ont la valeur non dans le champ view
ont également la valeur taa dans le champ etat
?
oui ! en fait tout les objet de mon tableau doivent avoir le même état, il y a uniquement le view qui doit changer
oui ! en fait tout les objet de mon tableau doivent avoir le même état, il y a uniquement le view qui doit changer
Dans ce cas là, c'est en effet ta condition qui est incorrecte, car là tu lui dit, que si la valeur du champ etat
est égale à taa ET la valeur du champ view
est égale à non, il rentre dans la condition, sinon tout le reste passe dans le else
.
Si tous tes enregistrements ont la valeur du champ etat
égale à taa il est inutile de faire la condition également sur ce champ.
oui j'ai supprimé la condition sur l'état, j'avais pas mis à jour le code du début !!!