Bonjour,

Je souhaiterais faire un find('neighbors') dans la fonction view de PostsController pour avoir l'article suivant et précédent, mais ça fonctionne pas !

Voici mon code :

$neighbors = $this->Post->find('neighbors',array(           
                array(
                    'field' => 'id', 
                    'value' => $id,
                    'order' => array('Post.date' => 'DESC'),
                    'fields' => array('Post.id', 'Post.slug'),
                    'conditions' => array('Post.id' => $id),
                    'recursive' => 0
                )
            ));   

Dans le tableau, l'index ['prev'] est toujours vide et dans l'index ['next'] j'ai le post avec l'id 1.
La recursive ne fonctionne pas et il me sort tous les champs !

Si quelqu'un à une solution ?
Merci d'avance :)

9 réponses


Pourquoi faire un array de array ?

Merci Grafikart pour ta réponse.

Effectivement, il y'avait un porblème avec le array.
Du coup, avec ce code :

$neighbors = $this->Post->find('neighbors',array(
        'field' => 'id', 
        'value' => $id,
        'order' => array('Post.date' => 'DESC'),
        'fields' => array('Post.id', 'Post.slug')                   
    )
); 

Ça marche mieux, mais je voudrais les articles précédent et suivant selon la date et pas l'id.
Mais la doc de cakePHP ne donne pas trop d'indications sur find('neighbors').

Essaie d'inclure la date dans les champs à chercher

$neighbors = $this->Post->find('neighbors',array(
        'field' => 'id', 
        'value' => $id,
        'order' => 'Post.date DESC',
        'fields' => array('Post.id', 'Post.slug', 'Post.date')                   
    )
); 

Ça trie toujours avec l’id.

Et si dans field tu met date ?

ça marche sauf s'il y'a plusieurs article le même jour.
Et en rajoutant une conditions sur l'id, ça retourne un tableau vide.

$neighbors = $this->Post->find('neighbors',array(
        'field' => 'date', 
        'value' => $tab['Post']['date'],
        'order' => 'Post.date DESC',
        'fields' => array('Post.id', 'Post.slug', 'Post.date'),
        'conditions' => array('Post.id' => $id)                   
    )
);   
 /app/Controller/PostsController.php (line 52)

array(
    'prev' => null,
    'next' => null
)

Tu as regardé la requête l'order est bien pris en compte ?

Non, mais je pense que les paramètres 'conditions', 'fields', 'order'... sont pour le résultat (prev et next).
Du coup, la condition pour les posts prev et next est 'Post.online = 1'.

Est-ce que le find('neighbors') ne servirait pas que pour les champs avec une valeur unique (genre id) !?

Ou sinon faire un champ position qui serait mis à jour à chaque modification d'un post.