Salut a tous,

Je viens vers vous car je me creuse la tête depuis quelques heures avec le plugin Taxonomy.
J'ai suivi le tuto pour bien en comprendre le fonctionnement j'aimerais savoir si l'un de vous pourrait m'apporter quelques précision sur la façon de procéder pour le mettre en place.

Au niveau admin_edit ça fonctionne bien, la ou je bloque c'est au niveau affichage sur le site en lui même car sur mon menu j'ai bien mes catégories qui sont la mais je n'arrive pas a créer un lien affichant les produits par catégories

pour recuperer mon menu je fais

<?php 
        function menu(){
        return $this->Product->listTerms('category');
    }
?>

Puis au niveau de la page j'ai

<?php $terms = $this->requestAction(array('controller'=>'products','action'=>'menu','admin'=>false)); ?>
                <li><?php echo $this->Html->link('Tout','/'); //debug($terms); die(); ?></li>
                <?php foreach($terms'category'] as $kk=>$vv): ?>
                    <li><?php echo $this->Html->link($vv,array('action'=>'category','controller'=>'products',$kk,'admin'=>false)); ?></li>
                <?php endforeach; ?>

merci :)

2 réponses


moket
Auteur
Réponse acceptée

J'ai finalement réussi en utilisant le set::combine de cake.

Voici le code utilisé dans mon ProductsController comme ça si quelqu'un en a besoin ça peut toujours aider.

function category($id){
        $this->Product->contain('Term');
        $cat = $this->Product->Term->find('first', array(
            'fields' => array('type','id'),
            'conditions' => array('id' => $id)
        ));

        if(empty($id)){
            throw new NotFoundException('Aucune catégorie ne correspond à ce nom');
        }
        $ids = $this->Product->Term->TermR->find('all', array(
            'fields' => array('id','ref_id'),
            'conditions' => array(
                'term_id' => $cat'Term']'id']
            )
        ));
        $ids = Set::combine($ids,'{n}.TermR.ref_id','{n}.TermR.ref_id');

        $this->paginate = array('Product' => array(
            'limit' => 6,
            'conditions' => array(
                'id' => $ids 
            )
        ));
        $d'products'] = $this->Paginate('Product',array('online'=>1,'created <= NOW()','dispo >= 1'));
        $this->set($d);
        $this->render('index');
    }

Par contre je ne sais pas trop si mon code est optimisé car je viens juste de le faire donc si quelqu'un a des suggestions elles sont les bienvenues :)

Merci beaucoup! Ça m'a été très utile.