Bonjour a tous et bon we :p

Bon j ai encore un soucis (et ca ne fais que de commencer xD)

Le soucis se situe au niveau du brouillon comme vu dans les videos.

Voici mes codes:

Pour le fonction getDraft du model:

public function getDraft(){
        $post = $this->find('first', array(
                 'conditions' => array('online' => -1)
                    ));
        if(empty($post)){
            $this->save(array(
                'online' => -1,
                ), false
            );
            $post = $this->read();
        }
        $post'Post']'online'] = 0;
    }

Pour la fonction admin_edit du controller (qui appelle les getDraft):

function admin_edit($id = null){
           if($this->request->is('put') || $this->request->is('post')){
               if($this->Post->save($this->request->data)){
                   $this->Session->setFlash('Le contenu bien ete modifier', 'notif');
                   $this->redirect(array('action' => 'index'));
               }
           }elseif($id){
                $this->Post->id = $id;
                $this->request->data = $this->Post->read();
          }else{
               $this->request->data = $this->Post->getDraft('brouillon');
          }
       }

et pour ma vue:

<h1>Editer un article</h1>
</div>
<h3>
    <?php echo $this->Form->create('Post'); ?>
            <?php echo $this->Form->input('name', array('label' => "Titre:")); ?>
<br />
            <?php echo $this->Form->input('slug', array('label' => "Slug:")); ?>
<br />
            <?php echo $this->Form->input('content', array('label' => "Contenu:")); ?>
<br />
            <?php echo $this->Form->input('type', array('legend' => "Type:",
                'options' => array(
                            'news' => 'News du jeu',
                            'news-admin' => 'News des admins',
                            'recrutement' => 'News de recrutement',
                            'but' => 'but',
                            'description' => 'description',
                            'screenshot' => 'Capture d\'ecran',
                            'tutorials' => 'Tuto',
                            'equipe' => 'L\'equipe',
                            'brouillon' => 'Brouillon'

                             )

            ));?>
<br />
            <?php echo $this->Form->input('created', array('label' => "Date de creation:", 'dateFormat' => 'DMY',
                                'timeFormat' => 24)); ?>
<br />
            <?php echo $this->Form->input('id'); ?>
<br/>
            <?php echo $this->Form->input('online', array('value' => '0', 'type' => 'checkbox')); ?>

    <?php echo $this->Form->end("Envoyer"); ?>
</h3>

Alors mon soucis est que avec ca mon brouillon est bien cree mais lorsque je post l article et le remet en bdd dans un autre champs et me laisse mon brouillon

Ca doit etre une connerie mais je n arrive pas a voir ma faute :s

Et du coup avec ca bah la gestion des medias ne fonctionne pas, quand je cree une news et que je clic pour aller selctioner un media, il me dit que il me manque un argument (l'id).

Merci de votre aide.

Djou

1 réponse


Il me semble qu'il ne faut pas créer un nouvel enregistrement, mais passer l'enregistrement actuel (le brouillon) au statut en ligne (valeur 1 sur online).

Je ne me rappelle plus du tuto, je l'ai vu il y a longtemps, mais il me semble que le principe était celui-ci, afin d'avoir des médias attachées même en phase de rédaction.

De plus, la fonction getDraft n'est pas forcément nécessaire si tu spécifie l'id : que ce soit le brouillon ou autre chose, c'est un post, avec des médias attachées à son id. La seule différence se situe sur le champ online ou pas.

La fonction semble servir à enregistrer le post actif comme un brouillon s'il n'en existe pas déjà, mais du coup, ça restreint l'utilisation à un brouillon à la fois.

J'ai essayé de comprendre, mais peut être que quelque chose m'échappe, alors n'hésites pas à apporter plus de précisions ;)