Bonjour,
Etant attiré par le concept du plugin Taxonomy j'ai suivi le tuto de grafikart jusqu'au bout -avec quelques adaptations a cake 2.4 et pour jquery- J'ai finalement reussi a le faire marcher sauf pour un bug qui parrait logique. en fait qu'on le champs d'un term (ingredient ou tag) est affiché pour la premiere fois ou qu'on fait une mise a jour y a une erreur array to string conversion machin truc qui apparait car le debug de $data'Taxonomy']'ingredient'] montre que c'est un array (meme dans le tuto) alors qu'on essaie d'afficher et de taper un strin. Jquery camoufle cela en cachant le champs mais forcèment l'erreur revient en moins au premier chargement de la page admin_edit (Le champs n'apparait pas vide mais contenant autant de "Array" que de terms liés avec belle erreur qui va avec au dessus).
Bref, j'ai voulu installer le plugin en esperant que ce soit mieux et attiré par ses nouvelle fonctions.
Seulement voila j'ai plusieurs problèmes que je vous prie de m'aider a resoudre.
1) Comment marche ce plugin; notamment la partie ou on dit "Now, you are able to add a "term" to your model using :

$this->Model->addTerm('TermTitle', 'type');"
Est-ce que je dois creer une nouvelle action addTerm et où ??

2)est-ce que je dois supprimer les traces du model category (le comble c'est que chez moi c'est post_category) ?

Ben aidez-moi en moins pour ça je verrai si je pourrai continuer tout seul après. Merci

2 réponses


Il est un peu tard donc j'ai lu partiellement. Pour la gestion des tags tu ne souhaite pas utiliser le helper fournit par le plugin ?
$this->Taxonomy->input('pet',array('label'=>'My pet'));

Krycek
Auteur

Merci pour votre réponse,
Si je veux utiliser TOUTES les fonctionnalités, mais le problème c'est que ce champs input est en fait reconnu par cake comme un array alors qu'on essaie d'y mettre un string chez moi ça donne une jolie erreur. C'est pour le plugin que j'ai créé en suivant votre tuto, quand au plugin tout fait au github, je n'ai pas pu le gérer.
Finalement j'ai renoncé a utiliser ce plugin; trop dur pour le débutant que je suis, je suis donc revenu au système category/tag décrit dans un tuto précédant et j'ai amélioré la gestion des tags en ajoutant la fonction addTag qui permet (comme pour le plugin) de gerer l'ajout des tags par jquery sans charger une nouvelle vue. Je laisse le code pour ceux qui ne sont pas passés a Taxonomy. Le résultat est nettement mieux.
Actuellement je vais esseyé d'améliorer ça en créant pour les catégories et pour les tags (de façon séparée) un helper et un behavior facilitant le travail (une sorte de niveau intermediaire entre le niveau debutant que j'utilise et celui de master du plugin Taxonomy).
Un Tuto dédié a la façon de procéder pour améliorer/transformer un code déja écrit en behavior/helper serait très bénéfique pour les débutants car le problème est que bcp de gens ne manquent pas de motivation mais sont confronté au syndrome "Page blanche" et on ne sait pas par où commencer et comment penser.
Au passage merci Grafikart je vous dois bcp notamment quasiment tout ce que je sais sur cakephp.

Les deux fonctions gérant les tags a postcontroller (ou pagecontroller)

function admin_delTag($id){
        $this->autoRender = false;
        $this->Post->PostTag->delete($id);
    }
    function admin_addTag($postid){
        $this->autoRender = false;
        $this->Post->contain('Tag');
        if(isset($_POST'name']) && !empty($_POST'name'])){
            $d = array(
                'name'=>$_POST'name']);
                $tag = $this->Post->Tag->find('first',array(
                    'conditions'=>$d));
                if(empty($tag)){
                    $this->Post->Tag->save($d);
                    $tag_id = $this->Post->Tag->id;

                }else{
                    $tag_id = $tag'Tag']'id'];
                }
            }
            $d = array(
                'tag_id'=>$tag_id,
                'post_id'=>$postid);
            $count = $this->Post->PostTag->find('count',array(
                'conditions'=>$d));
            if($count==0){
                $this->Post->PostTag->save($d);
                $url = Router::url(array('controller'=>'posts','action'=>'delTag',$this->Post->PostTag->id));
                die('<span class="label label-warning tag">'.$_POST'name'].' <a href="'.$url.'" class="delTag">X</a></span><span> </span>');
            }
    }

toujours dans postcontoller il faut envoyer a la vue admin_edit une variable $postid contenant le $id du post (a la fin) :

function admin_edit($id = false){
        if($this->request->is('put') || $this->request->is('post')){
            if($this->Post->save($this->request->data)){
            $this->Session->setFlash('Le contenu a bien été modifié','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('post');
    }

    $d'post_categories'] = $this->Post->PostCategory->find('list');
    $this->Post->PostTag->contain('Tag');
    $d'tags']= $this->Post->PostTag->find('all',array(
        'conditions'=>array('PostTag.post_id'=>$id)));
    $postid = $id;
    $this->set($d);
    $this->set('postid', $id);

    }

Et enfin Le code de admin_edit (La suite du script de jquery deja donné par graf qui supprime les tags et qui fait suite au script de tinymce):

$(document).ready(function($){
    $('.tag a').live('click',function(e){
    var a = $(this);
    $.get(a.attr('href'));
    a.parent().fadeOut(); 
    return false; 
})
$('.addTag').keypress(function(e){
if(e.keyCode == 13){
var input = $(this);
var val = input.val();
input.val('');

$.post(
    "<?php echo $this->Html->url(array(
    "controller" => "posts",
    "action" => "addTag",
    "admin"=>true,$postid
    )); ?>",{name:val},function(data){
    input.parent().after(data);

});

    return false ;
}
});

});
<?php $this->Html->scriptEnd(); ?>

Je crois que ce plugin Taxonomy qui m'a pris 1 semaine m'a appris que je suis trop encore trop nul pour arpenter les "pistes noires".