salut svp aidé moi, j ss bloqué (j travail avec cakephp 2.3.0)
je veux faire un multi suppression de mes Clients et voila mon code qui ne fonctione pas, message error:

Notice (8): Undefined index: element [CORE\Cake\View\Helper\SessionHelper.php, line 131]

dans mon AppController.php

var $multiActions = array();
        function multi() {
            if (!isset($this->data'action']) || !count($this->data'action'])) {
                $this->_flash(__('Action was not defined in request.', true),'error');
                $this->redirect($this->referer(), null, true);
            }
            foreach ($this->data'action'] as $action=>$v){}
            if (!in_array($action,(array)$this->multiActions)) {
                $this->_flash(__(sprintf('Action %s is not allowed.',$action), true),'error');
                $this->redirect($this->referer(), null, true);
            }
            if (!method_exists($this,$action)) {
                $this->_flash(__(sprintf('Action %s is invalid.',$action), true),'error');
                $this->redirect($this->referer(), null, true);
            }
            $this->$action();
        }

        function admin_multi() {
            $this->multi();
        }

        function _flash($message,$type='message') {
            $messages = (array)$this->Session->read('Message.multiFlash');
            $messages] = array('message'=>$message, 'layout'=>'default', 'params'=>array('class'=>$type));
            $this->Session->write('Message.multiFlash', $messages);
        }

dans mon ClientsController.php

var $name = 'Clients';
var $multiActions = array('admin_multi_delete');

function admin_multi_delete() {
        if (!isset($this->params'form']'record']) || !count($this->params'form']'record'])) {
            $this->_flash(__('No records selected.', true),'warning');
            $this->redirect($this->referer(), null, true);
        }
        $ids = array();
        foreach ($this->params'form']'record'] as $id=>$v) {
            if ($v == 1) {
                if ($this->Client->del($id)) {
                    $this->_flash(__(sprintf('Deleted record %d.',$id),true),'success');
                }
                else {
                    $this->_flash(__(sprintf('Could not delete record %d.',$id),true),'error');
                }
            }
        }
        $this->redirect($this->referer(), null, true);
    }

dans default.ctp

<div id="messages">
    <?php
    if ($this->session->check('Message.flash')) $this->session->flash();
    if ($messages = $this->session->read('Message.multiFlash')) {
    foreach($messages as $k=>$v) $this->session->flash('multiFlash.'.$k); }
    ?>
</div>

dans views/Clients/index.ctp

<?= $this->form->create('Client',array('id'=>'ClientListForm','url'=>array('controller'=>'Clients','action'=>'multi')));?>
        <div class="box-content" >
            <table class="table table-striped table-bordered bootstrap-datatable datatable">
            <thead>
                    <tr>
                <th><span class="select_all">a</span>|<span class="select_none">n</span></th>
                <th><?= $this->paginator->sort(__('id',true),'id');?></th>
                <th><?= $this->paginator->sort(__('nom_cli',true),'name');?></th>
                <th><?= $this->paginator->sort(__('ville_cli',true),'Ville');?></th>
                <th class="actions"><?php __('Actions');?></th>
                    </tr>
            </thead>
            <tbody>
            <?php
            $i = 0;
            foreach ($Clients as $Client):
            $class = ($i&1)?' class="altrow"':'';
            ?>
            <tr<?php echo $class;?>>
            <td>
                <?= $this->form->input($Client'Client']'id'],array(
                                                                'type'=>'checkbox',
                                        'label'=>false,
                                        'name'=>'record'.$Client'Client']'id'].']',
                                        'id'=>'listRecord_'.$Client'Client']'id'],
                )); ?>
            </td>
                <td>
                        <?= $Client'Client']'id']; ?>
            </td>
            <td>
                <?= $Client'Client']'nom_cli']; ?>
            </td>
            <td>
                <?= $Client'Client']'ville_cli']; ?>
            </td>
            <td class="actions">
                    <?= $this->html->link(__('View', true), array('action'=>'view', $Client'Client']'id'])); ?>
                <?= $this->html->link(__('Edit', true), array('action'=>'edit', $Client'Client']'id'])); ?>
                <?= $this->html->link(__('Delete', true), array('action'=>'delete', $Client'Client''id']),null,
                                    sprintf(__('Are you sure you want to delete # %s?', true), $Client'Client']'id']));
                                 ?>
            </td>
            </tr>
                <?php endforeach; ?>
        </tbody>
    </table>
</div>

<div class="multi_actions">
    <input type="submit" name="data[action][admin_multi_delete]" value="Delete" onclick="return confirm('<?php __('Are you sure you want to delete
    the selected records?'); ?>');"/>
</div>

<?= $this->form->end();?>

Merciii ^^

6 réponses


Elsenthil
Réponse acceptée

Salut

Je n'ai pas bien compris la logique de ton code, j'ai pas trop le temps de regarder moi j'ai procédé comme cela :

UserController

function admin_index(){
        $this->layout = 'admin';
        $this->paginate = array('User' => array('limit' => 10));
        $d'users'] = $this->Paginate('User');
        if($this->request->is('post') || $this->request->is('put') ){
            $data = $this->request->data;
            <strong>if (isset($data'multi-delete']) && count($data'User']'id']) > 0) {</strong>
<strong> foreach($data'User']'id'] as $k => $v) {</strong>
<strong> $this->User->delete($v);</strong>
<strong> }</strong>
<strong> $this->Session->setFlash("Les utilisateurs ont bien été supprimés","notif");</strong>
<strong> }</strong> elseif (isset($data'multi-disable'])) {
                foreach($data'User']'id'] as $k => $v) {
                    $this->User->id = $v;
                    $this->User->saveField('online', 0);
                    $this->User->save();
                }
                $this->Session->setFlash("Les utilisateurs ont bien été désactivés","notif");
            } elseif (isset($data'multi-enable'])) {
                foreach($data'User']'id'] as $k => $v) {
                    $this->User->id = $v;
                    $this->User->saveField('online', 1);
                    $this->User->save();
                }
                $this->Session->setFlash("Les utilisateurs ont bien été activés","notif");
            }
            $this->redirect($this->referer());
        }
        $this->loadModel('Group');
        $d'groups'] = $this->User->Group->find('list');
        $d'departments'] = $this->User->Department->find('list');
        $this->set($d); 
    }

admin_index.ctp dans View/Users

<strong><?php echo $this->Form->create('User'); ?></strong>
    <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>
            <strong><?php foreach($users as $k => $v) : $v = current($v); ?></strong>
                <tr>
                    <strong><td><input name="data[User][id]]" value="<?php echo $v'id']; ?>" id="ModelName1" type="checkbox"></td></strong>
                    <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-eye-open"></span> Activer', array('div'=>false, 'name'=>'multi-enable', 'class' => 'btn btn-default', 'escape' => false)); ?>
    <?php echo $this->Form->button('<span class="glyphicon glyphicon-eye-close"></span> Désactiver', array('div'=>false, 'name'=>'multi-disable', 'class' => 'btn btn-default', 'escape' => false)); ?>
    <strong><?php echo $this->Form->button('<span class="glyphicon glyphicon-trash"></span> Supprimer', array('div'=>false, 'name'=>'multi-delete', 'class' => 'btn btn-default', 'escape' => false)); ?></strong>
    <strong><?php echo $this->Form->end(); ?></strong>

Voilà je t'ai donné mon code en espérant en aider d'autres. En gros tu fais un foreach sur tes users dans ta vue où il y a ton form tu reprend bien la syntaxe de cakephp (name="data[User][id]]" si ton modèle est User et ton champ id). Puis tu créé un bouton avec un name distinct pour identifier l'action et tu fermes séparément avec $this->Form->end(). Dans ton controller tu fais à nouveau un foreach pour exécuter ton script pour chaque user. J'ai pas fais le tri dans mon script j'espère que c'est compréhensible. J'ai mis en gras les morceaux de code clés.

à toi d'adapter à ton modèle

edit : le gras a foiré à cause de la balise <pre> mais je laisse quand même les <strong> désolé

Bonjour,

je pense que cela viens de ta function ta fonction admin_multi_delete.

Test à la ligne 12 de ton ClientsController de remplacer ta condition $this->Client->del($id) par $this->Client-> delete ($id).

Bonne journée

mercii pour ta réponse boost-e mais ca marche plus y'on a 2 msgs d'erreur qui s'affiche

Notice (8): Undefined index: element [CORE\Cake\View\Helper\SessionHelper.php, line 131]
Notice (8): Undefined index: element [CORE\Cake\View\Helper\SessionHelper.php, line 137]

Salut

Je ne suis pas sûr de comprendre ce que tu cherches à faire, tu veux supprimer un ou plusieurs utilisateurs en même temps ?

Ouiiii Elsenthil je vx supprimer les utilisateurs ou plutot plusieurs clients a dont leur checkbox est cochés j'ai suivi ce tutoriel mais ca marche pas avec moi j pense c parce qu'il concern la version 1.3 moi je travail avec cakephp 2.3 . as tu une idée comment faire ca ?

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