Bonjour,
Après avoir suivi la formation pour créer son MVC en 7 jours, je cherche à l'améliorer, ajouter par exemple la possibilité de modifier les configurations dans le panneau d'administration (Je tiens à préciser que j'ai bien créé le model "Config", le controller "ConfigsController" et la vue "index.php" dans un dossier "configs"), ajouter un système de réorganisation des posts grace à JQueryUI et sa fonctionnalité "sortable", seulement je me retrouve vite bloqué dans les deux cas, la création de input est obligatoire, et en passant par $this->Form->input('nom','label'), je récupère bien le label et le nom (qui sont en fait les mêmes), mais impossible de récupérer la valeur initiale dans la base de données, je me retrouve donc avec un label "title" et rien dans le champs à côté.

Par ailleurs, quelqu'un a-t-il remarqué un bug au niveau de l'insertion d'image avec la dernière version de tinyMCE ? Pour moi, impossible d'ouvrir le browser, et pareil pour les liens, bien sûr.

Merci d'avance pour votre aide !

5 réponses


wamp
Réponse acceptée

Dans ta view:
le probleme avec tes inputs c'est qu'ils sont mal nommés
<input type="text" name="value" value="<?php echo $co->value; ?>"></input> <input type="hidden" name="id" value="<?php echo $co->id; ?>"></input>
pour name, utilise $co->name et pour name du id je te conseille de faire un truc du genre 'id'.$co->name
(exemple pour le titre, ça te donnera idtitre
sinon tu ne pourras pas trier tes inputs ...
comme ça tes valeurs tu vas les retrouver dnas $this->request->data->titre et $this->request->data->idtitre

pour le traitement dans ton controller

function admin_index(){             
$this->loadModel('Config');
//tu charges d'abord tous tes configs
$configs= $this->Config->find(array(
                 'fields' => 'id,name,value'
                ));
 //si le formulaire a renvoyé des données on les traite
             if($this->request->data){
                 foreach($configs as $co){
                     $data=null;
                     $data->id=$this->request->data->('id'.$co->name);
                     $data->name=$co->name;
                     $data->value=$this->request->data->$co->name;
                     $this->Config->save($data);
                 }
             }
             $d'configs'] = $this->Config->find(array(
                 'fields' => 'id,name,value'
                ));
             $this->set($d);
         }
     }
Heyden
Auteur

Help ? ...

je ne suis pas sur de bien comprendre ton probleme
on va partir sur le cas d'un user et la fonction edit($id=null)

Dans ta vue,
normalement tes input(clé,'label') vont mettre leur valeur dans $this->request->data->clé

Dans ton controller
tu récupères tes valeurs dans la base de données si $id est défini
exemple
$user=$this->User->findfirst(array('conditions'=>array('id'=>$id)));

et à la fin de ta fonction tu testes

//si la variable request->data existe tu mets à jour ou sauvegarde dans la BDD
    if($this->request->data){   
        if($this->User->validates($this->request->data)){
            $this->User->save($this->request->data);
       $this->Session->setFlash('le contenu a bien été modifié');   
       $this->redirect('admin/users/index');
    }else{
         $this->Session->setFlash('Merci de corriger les informations entrées','error');
    }
   //sinon tu mets dans this->request->data le resultats de ta recherche !  
    }else{          
      $this->request->data=$user;
    }

normalement les inputs de ta vue sont pré-remplis avec les valeurs de ta base de données :)

Heyden
Auteur

Bonjour, et merci de votre aide,
En fait, je vais plus préciser ce que je veux faire, je voudrais créer une partie configuration où l'administrateur changerait des valeurs clés comme le nom de son site, le nombre d'articles par pages, etc. Sachant que le tout serait de toute façon sur une même page, pour se faire, j'ai créé un controller ConfigsController, un model Config, et une view admin_index dans un dossier configs dans le dossier view, avant, je voulais utiliser la fonction que l'on a créé au cours du tutoriel :

$this->Form->input('nom','label');

Mais j'ai finalement opté pour quelque chose de plus simple :

<?php
    foreach($configs as $co) {
?>
    <?php echo $co->name; ?> <input type="text" name="value" value="<?php echo $co->value; ?>"></input>
    <input type="hidden" name="id" value="<?php echo $co->id; ?>"></input>
<?php
    }
?>

J'ai donc bien mes labels et mes valeurs qui s'affichent pour chaque champs.
Pour le ConfigsController, j'essaye de sauvegarder pour chaque id de la manière suivante :

<?php
    class ConfigsController extends Controller{
        function admin_index(){
            $this->loadModel('Config');
            if($this->request->data){
                foreach($id as $id){
                    $this->Config->save($this->request->data);
                }
            }
            $d'configs'] = $this->Config->find(array(
                'fields' => 'id,name,value'
                ));
            $this->set($d);
        }
    }
?>

Sauf que ... Le foreach ne fonctionne pas, forcément, et donc c'est là que je bloque, pour enregistrer plusieurs valeurs dans plus plusieurs entrées ...

Merci d'avance pour votre aide !

Heyden
Auteur

Bonsoir,
Eh bien ... Merci beaucoup, j'ai eu du mal à croire aux $co->name mais finalement, ça fonctionne parfaitement, alors ... Merci beauuuuucoup, vous me retirez une énorme épine du pied !
Bonne continuation !