salut je vx savoir comment faire pour réaliser un multi select pour supp/ajou avec des checkbox,j'ai essayé avec un plugin mais ca marche pas avec
merciii ^^ de me redériger vers un tuto s'i exist ou si vs avez une idée sur le sujet

3 réponses


Elsenthil
Réponse acceptée

Salut

ok je vois, donc là jte montre un truc que j'ai fais récemment (simplifié) qui est dans cet esprit. Donc tu as une page admin_index dans View/users pour gérer mes utilisateurs ici : J'ai une table users, un model User.php, un controller UsersController.php et ma vue admin_index.ctp.

Dans la vue admin_index.ctp tu dois faire un truc du style :

<?php echo $this->Form->create('User'); ?>
    <table class="table table-striped table-bordered">
        <thead>
            <tr>
                <th>#</th>
                <th>Nom / prénom</th>
                <th>Fonction</th>
                <th>Département</th>
                <th>Rôle</th>
                <th>Statut</th>
                <th>Actions</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($users as $k => $v) : $v = current($v); ?>
                <tr>
                    <td><input name="data[User][id]]" value="<?php echo $v'id']; ?>" id="ModelName1" type="checkbox"></td>
                    <td><?php echo $v'firstname'].' '.$v'lastname'];?></td>
                    <td><?php echo $v'office']; ?></td>
                    <td><?php echo $departments$v'department_id']]; echo $v'is_manager']==1 ? ' <span class="label label-info">Responsable</span>' : '';?></td>
                    <td><?php echo $groups$v'group_id']]; ?></td>
                    <td><?php echo $v'online'] == 0 ? '<span class="label label-danger">Désactivé</span>':'<span class="label label-success">Activé</span>'; ?></td>
                    <td>
                        <?php echo $this->Html->link('<span class="glyphicon glyphicon-edit"></span> Éditer',array('action' => 'admin_edit', $v'id']), array('class' => 'btn btn-default','escape' => false)); ?>
                        <?php echo $this->Html->link('<span class="glyphicon glyphicon-trash"></span> Supprimer',array('action' => 'admin_delete', $v'id']), array('class' => 'btn btn-default', 'escape' => false), 'Voulez-vous vraiment supprimer cet utilisateur ?'); ?>
                    </td>
                </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    <div class="loader"><?php echo $this->Html->image('ajax-loader.gif', array('alt' => 'Chargement')); ?></div>
    <?php echo $this->Form->button('<span class="glyphicon glyphicon-trash"></span> Supprimer', array('div'=>false, 'name'=>'multi-delete', 'class' => 'btn btn-default', 'escape' => false)); ?>
    <?php echo $this->Form->end(); ?>

J'ai un champs id dans ma table user, jusque là facile dans le tableau à chaque ligne je met <input name="data[User][id]]" value="<?php echo $v'id']; ?>" id="ModelName1" type="checkbox">. Donc si tu coches les checkbox et que tu valides ton form avec :

<?php echo $this->Form->button('<span class="glyphicon glyphicon-trash"></span> Supprimer', array('div'=>false, 'name'=>'multi-delete', 'class' => 'btn btn-default', 'escape' => false)); ?>
    <?php echo $this->Form->end(); ?>

Normalement ça devrait être bon. ça te permet de d'avoir une action dans ton request->data, tu peux donc envisager de faire plusieurs autres actions multiples comme activer/désactiver les utilisateurs. C'est ce que j'ai fais par exemple et ça marche très bien (même si je ne l'ai pas mis dans mon post).

UsersController.ctp :

function admin_index(){
        $this->layout = 'admin'; // layout
        $this->paginate = array('User' => array('limit' => 10)); //requete qui va chercher les users de ma bdd avec la pagination
        $d'users'] = $this->Paginate('User'); //résultat de la requete qui contient mes users
        if($this->request->is('post') || $this->request->is('put') ){
            $data = $this->request->data;
            if (isset($data'multi-delete']) && count($data'User']'id']) > 0) { //si l'utilisateur a appuyé sur le bouton supprimé en bas de la vue
                foreach($data'User']'id'] as $k => $v) { // pour chaque checkbox cochée dans ma vue supprimer l'entré dans la bdd
                    $this->User->delete($v);
                }
                $this->Session->setFlash("Les utilisateurs ont bien été supprimés","notif"); //message OK
            }
            $this->redirect($this->referer()); //redirection
        }
        $this->set($d); 
    }

à toi d'adapter selon ton modèle et ta bdd, mais tu as l'idée.

Salut

En gros tu veux faire en sorte que quand la valeur d'un <select> change ça génère des checkbox automatiquement sans recharger la page ?

Merciiiiiiii
Elsenthil c super tu m'a vraiment sauvé ca marche trés bien