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?

19 réponses


cid5420
Auteur
Réponse acceptée

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 ?

cid5420
Auteur
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)

Qu'entendez-vous par "cela ne fonctionne pas vraimant" ?

cid5420
Auteur

les lignes où la view = oui sont mélangé avec les view = non. Donc ça ne fonctionne pas !

cid5420
Auteur

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>
cid5420
Auteur

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 ouisoit non, donc dans l'état actuel tu récupères d'abord les ouipuis 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 nonet 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.

@Lartak : Il y a aussi le boutton qui change... (^_^)

cid5420
Auteur

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. :)

cid5420
Auteur

oui enfin le bouton peut être le même au final ça ne changera pas grand chose

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 ?

cid5420
Auteur

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

cid5420
Auteur

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 viewont également la valeur taa dans le champ etat ?

cid5420
Auteur

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 viewest é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.

cid5420
Auteur

oui j'ai supprimé la condition sur l'état, j'avais pas mis à jour le code du début !!!