Salut Grafikart !

Voila j'ai décidé de faire a peu près le même style de filtre sur mon site que le tien pour tes tutos.
J'ai regardé un peu comment tu t'y étais pris en inspectant le code source, le javascript utilisé etc...
Jusque là pas trop de soucis, c'est assez simple à comprendre.

Maintenant j'ai une petite question : j'ai remarqué que tu traitais les données envoyées en POST dans une méthode "filter" de ton controller. Je voulais savoir si tu avais créé également une vue correspondante (c'est à dire un filter.ctp) ou bien si tu faisais un render index à la fin de ta méthode filter.

Voila c'est tout ce que je voulais savoir. Il est possible que ma question soit un peu bête mais bon je me permet tout de même de te la poser.

Je te remercie de ton attention.

4 réponses


Oui j'ai une vue spécifique filter.ctp pour le retour

gwena
Auteur

Merci de ta réponse !

Du coup j'ai quasiment réussi mon filtre mais je bloque. C'est un petit truc de rien du tout mais je n'arrive pas à voir et vu le temps que j'ai passé dessus je pense qu'il serait plus judicieux de demander un peu d'aide.
Je ne refais pas un nouveau sujet donc vu que ça concerne encore le filtre.

Le filtre fonctionne lorsque je clique sur une catégorie, mais dès que j'en sélectionne plusieurs, il ne m'affiche que le dernier résultat qu'il trouve dans mon foreach. J'espère que c'est assez clair.

Voici ma fonction filter() :

function filter(){
        if(isset($_POST'categories'])){
            $term_id = $_POST'categories'];
            foreach($term_id as $k => $v){
                $termR = $this->Cocktail->TermR->find('all', array('conditions' => array('TermR.term_id' => $v)));
                foreach($termR as $w => $x){
                    $d'cocktails'] = $this->Cocktail->find('all', array('conditions' => array('Cocktail.id' => $x'TermR']'ref_id'])));
                    $this->set($d);
                }
            }
        }
        else{
            $this->paginate = array('Cocktail' => array('limit' => 10));
            $d'cocktails'] = $this->Paginate('Cocktail', array('Cocktail.online' => 1, 'Cocktail.created <= NOW()'));
            $this->set($d);
        }
    }

Et mon filter.ctp tout simple :

<?php if(!empty($cocktails)): ?>
    <?php foreach($cocktails as $k => $v): $v = current($v); ?>
        <?php echo $v'name']; ?>
        <a href="<?php echo $this->Html->url($v'link']); ?>" class="btn primary">Consulter</a><br>
    <?php endforeach; ?>
<?php endif; ?>

A noter que je me suis également servi du tuto sur les Taxonomy pour gérer mes catégories.
Voila j'espère que j'ai été assez précis. Merci de votre aide.

gwena
Auteur

Bon en fait à chaque fois que je sélectionne une catégorie de mon filtre, ça exécute ma fonction filter(). Et à chaque fois qu'elle est exécutée, mes deux tableaux $d'terms'] et $d'cocktails'] sont réinitialisés. Les anciennes données sont écrasées par les nouvelles et donc seul le dernier résultat ressort. Logique quoi...

Du coup ma question est simple, comment faire en sorte que mes deux tableaux ne se réinitialise pas mais se "mettent à jour" en quelque sorte. Qu'il s'alimente lorsque je sélectionne une autre catégorie et au contraire qu'il "s'allège" si je dé-sélectionne une catégorie de mon filtre.

Merci de votre aide.

Ma fonction filter():

function filter(){
        if(isset($_POST'categories'])){
            $term_id = $_POST'categories'];
            foreach($term_id as $k => $v){
                $d'termR'] = $this->Cocktail->TermR->find('all', array('conditions' => array('TermR.term_id' => $v)));
                foreach($d'termR'] as $w => $x){
                    $d'cocktails'] = $this->Cocktail->find('all', array('conditions' => array('Cocktail.id' => $x'TermR']'ref_id'])));
                    $this->set($d);
                }
            }
        }
        else{
            $this->paginate = array('Cocktail' => array('limit' => 10));
            $d'cocktails'] = $this->Paginate('Cocktail', array('Cocktail.online' => 1, 'Cocktail.created <= NOW()'));
            $this->set($d);
        }
    }
gwena
Auteur

Personne ? Je dois dire que je bloque sec là. J'ai beau chercher la solution, toujours rien.