Bonjour a tous.
J'ai un soucis lors de la sauvegarde dans ma page admin_edit.
Dans cette page j'ai installer le plugin de taxonomie de grafikart.
Quand je met :
$this->request->data = $this->Artiste->findById($id);
avant la sauvegarde je ne peu plus modifiez le contenu, il ne sauvegarde pas mes par-contre prend en conte lorsque que je sauvegarde des tags a la volé.
et lorsque je met le findById après la sauvegarde je peu modifiez le contenu met l’association ac les tags ne ce sauvegarde plus. il me creer bien les tag met ne sauvegarde pas l'association avec l'article.
Je cherche depuis un moment et je ne vois pas comment remédier a ce problème.
Si quelqu'un pouvais m'aidez a comprendre pourquoi?
Voici le code en question :
function admin_edit($id = null){
$this->Artiste->contain('Thumb.file');
// On récupère l'article
if( $id ){
$artistes = $this->Artiste->find('first', array(
'conditions' => array('Artiste.id' => $id),
));
if(empty($artistes)){
$this->Session->setFlash("Aucune page ne correspond à cet ID","notif", array('class' => 'error'));
return $this->redirect(array('action' => 'index'));
}
}
$this->Artiste->contain('Term');
$this->request->data'Artiste']'draft'] = 0;
$this->request->data'Artiste']'user_id'] = $this->Auth->user('id');
$this->request->data'Artiste']'username'] = $this->Auth->user('username');
if($this->request->is('put') || $this->request->is('image')){
if($this->Artiste->save($this->request->data)){
$this->Session->setFlash("Le contenu a bien été modifié","notif", array('class' => 'success'));
$this->redirect(array('action'=>'index'));
}
}if(!$id){
$id = $this->Artiste->getDraftId(array('user_id' => $this->Auth->user('id'),'type' => 'image'));
}
$this->request->data = $this->Artiste->findById($id);
// On affiche les tags
$tag = $this->Artiste->listTerms('tag');
// On affiche le SEO
$seo = $this->Artiste->listTerms('seo');
$this->set(compact('artistes','tag','seo'));
}
Je le connais le Plugin Taxonomy de Grafikart et j'ai tout de suite su que tu l'utilisais, c'est bien pour ça que je ne t'ai pas proposé de système particulier pour sauvegarder les termes.
Heu, pourquoi tu utilises 2 inputs pour le term tag ?
Ce n'est pas étonnant que tu aies un bug, vu que tu envoies deux fois les mêmes données via le formulaire.
Tu ne dois utiliser qu'un seul des deux systèmes.
Tu devrais soit relire la doc du Plugin ou regarder la vidéo du Plugin.
Bonsoir.
Comme ceci c'est mieux, après si tu as toujours des problèmes pour l'enregistrement des termes, il te faut vérifier au niveau de ton champ pour les termes.
public function admin_edit($id = null){
if(!$id){
$id = $this->Artiste->getDraftId(array('user_id' => $this->Auth->user('id'),'type' => 'image'));
}
// On récupère l'article
if($id){
$this->Artiste->contain('Thumb.file');
$artiste = $this->Artiste->find('first', array('conditions' => array('Artiste.id' => $id)));
if($this->request->is('put') || $this->request->is('post')){
$this->request->data'Artiste']'draft'] = 0;
$this->request->data'Artiste']'user_id'] = $this->Auth->user('id');
$this->request->data'Artiste']'username'] = $this->Auth->user('username');
if($this->Artiste->save($this->request->data)){
$this->Session->setFlash("Le contenu a bien été modifié","notif", array('class' => 'success'));
$this->redirect(array('action'=>'index'));
}
}
$this->request->data = $artiste; /* Il faut éviter de faire une requète en double pour la même chose */
// On affiche les tags
$tag = $this->Artiste->listTerms('tag');
/* à savoir que là tu récupères tous les terms de type tag, sans que ce soit spécifique à l'enregistrement en cours */
// On affiche le SEO
$seo = $this->Artiste->listTerms('seo'); /* idem */
$this->set(compact('tag','seo'));
}
}
Il est inutile de mettre un message d'erreur avec une redirection dans le cas où il n'y a pas de données, étant donné que tu génères un brouillon dans ce cas là.
Déjà merci d'avoir pris le temps de me répondre et d'essayer de m'aider. Et encore merci de m’éclaircir un peu dans mon code, a force d'essayer je me suis perdu, je voyer que s'était écris a l'envers mes n'arriver pas a remettre sa bien au clair.
Je débute dans le développement en autodidacte et du coup galère un peu.
Sa me fait toujours la même chose, quand je déplace cette ligne
$this->request->data = $artiste;
au dessus de
if($this->request->is('put') || $this->request->is('post')){
un coup sa sauvegarde mes tags mes peu plus modifier l'article et effet inverse.
Concernant :
$tag = $this->Artiste->listTerms('tag');
$tag = $this->Artiste->listTerms('seo');
J'utilise un Plugin la sauvegarde et la relation c'est le plugin qui s'en charge.
Par exemple je suis dans la page 'edit' la création de tag ce fait en ajax sans recharger la page, si je sauvegarde des tags, dans la base de donnée la sauvegarde et la relation s’incrémente bien aucun soucis, mes des que je sauvegarde ma page sa supprime la relation avec l'article mes pas le tag.
Si j'actualise ma page avec F5, la il me sauvegarde bien la relation et la supprime plus.
Le soucis c'est des que je sauvegarde l'article sa me supprime la relation.
Voici les champs concerner de mon formulaire
<!--
Un champ permettant de créer des tags
-->
<?= $this->Taxonomy->input('tag',array('label'=>'Créer un nouveau Tag','type'=>'text')); ?>
<!--
Checkbox permettant de cocher dans les tag déjà existant en base de donnée
-->
<?= $this->Form->input('Artiste.terms.tag',array('label'=>false,'type'=>'select','multiple'=>'checkbox','options'=>$tag)); ?>
<!--
Le btn pour valider
-->
<?= $this->Form->input('id'); ?>
<?= $this->Form->end(array(
'label'=>__('Sauvegarder'),
'class'=>'black',
'div'=>'form-actions'));
?>
J’espère avoir réussi a me faire comprendre.
Le système de tag viens de ce tuto
Le problème venez bien de la... J'étais pas sur de quel système j'allait garder je voulais les tester voir ce qui me convenez le mieux. je penser pas que sa ferai un beug et pourtant ses tellement logique maintenant que tu me le dit. Mon Problème est résolu.
Vraiment un grand merci !