Salut à tous,
j'ai créé un portfolio dans lequel les réalisations sont ordonnées par date (du plus récent au plus ancien). Lorsqu'on clique sur une image du portfolio, un appel en AJAX est effectué pour afficher l'image et son descriptif sur la même page que les réalisations.

Le problème se situe au niveau d'une pagination (toujours en AJAX) que je souhaiterais mettre en place une fois que l'image et son descriptif sont affichés.

J'ai utilisé le find('neighbors') de cakePHP pour récupérer les réalisations précédentes et suivantes. Malheureusement, mes réalisations sont classées par date et le find('neighbors') les classe par ID.

D'où ma question : est-il possible de modifier le 'classement' effectué par ce find ?

Au cas où, voici le code de ma fonction :

public function view($id = null, $slug = null){
        if(!$id)
            throw new NotFoundException('Impossible de trouver cette réalisation');
        $portfolio = $this->Portfolio->find('first', array(
            'conditions' => array('Portfolio.id' => $id)
        ));
        $this->Portfolio->id = $id;
        $this->Portfolio->recursive = -1;
        $neighbors = $this->Portfolio->find('neighbors', array(
            'fields' => array('id', 'name', 'date'), 'field' => 'date', 'order' => 'DESC',
            'conditions' => 'online >= 0'
        ));

        if(empty($portfolio))
            throw new NotFoundException('Impossible de trouver cette réalisation');
        if($slug != $portfolio'Portfolio']'slug']){
            $this->redirect($portfolio'Portfolio']'link'],301);         
        }else{
            if($this->request->is('ajax')){
                $this->set('portfolio', $portfolio);
                $this->set('neighbors', $neighbors);
            }
            else{
                $this->set('portfolio', $portfolio);
                $this->set('neighbors', $neighbors);
            }
        }
    }

J'ai vu sur internet qu'on pouvait effectué ce find comme ceci :

$this->set('neighbors', $this->Portfolio->find('neighbors', array(
            'fields' => array('id', 'name', 'date'), 'field' => 'date', 'value' =>$this->data'Portfolio']'date'], 'order' => 'DESC',
            'conditions' => 'online >= 0'
        ))
            );

Par contre, en utilisant le code ci-dessus, cakePHP m'indique qu'il ne trouve pas l'index 'Portfolio'...

Une idée pour résoudre ce problème ?

Merci d'avance ;)

3 réponses


Romano83
Auteur

Toujours pas d'idées sur le problème ?

Bonsoir,

essaye comme ça

$neighbors = $this->Portfolio->find('neighbors',array(
            'field' => 'Portfolio.date' ,
            'value' => $this->data'Portfolio']'date'],
            'fields'=>array('Portfolio.id','Portfolio.name','Portfolio.date'),
            'conditions'=>array('Portfolio.online'=> 1)
        ));
$this->set(compact('neighbors'));

ps : l'order ne marche pas pour le param neighbors :s et essaye toujours de mettre Nom_MODEL.champs

pour ma part j'ai tester la requête ainsi sur un projet et ça marche très bien à toi de voir.

Cordialement.

Romano83
Auteur

Salut freezlike, j'ai essayé ton bout de code mais malheureusement, ça ne fonctionne toujours pas.
J'ai réussi à contourné le problème mais je reste ouvert à toute proposition pour trouver une meilleure solution que la mienne ;)