Bonjour,
Je veux mettre sur mon blog sur la page de l'articele qu'un utilisateur consulte un système prochain article et article précédent
si on n'est rendu au dernier article le bouton suivant ne soit plus disponible et l'inverse est que si je consulte le premier article de ma liste le bouton précédent ne soit pas disponible. J'ai commencé à travailler et je frape un problème est comment je peut vérifier si on n'est au premier article de mon tableau $post et quand on est à la fin de mon tableau $posts

public function show($slug = null){
        // Post current
        $post = $this->Post->find('first',array(
            'conditions' => array('Post.slug'=>$slug,'Post.online'=>1,'Post.draft'=>0),
            'contain' => array('User','Thumb','Category'),
        ));

        // We find the next post.
        $nextPost = $this->Post->find('first',array(
            'conditions' => array('Post.id !='.$post['Post']['id'], 'Post.online'=>1,'Post.draft'=>0),
            'fields' => array('Post.id','Post.name','Post.slug','Post.user_id'),
            'contain' => array('User' => array(
                "fields" => array('User.username')
            ));
        ));

        // We found the prev article

        $this->set(compact('post','comments','nextPost'));
    }

Merci de votre aide.

5 réponses


lakamark
Auteur
Réponse acceptée

Merci Grafikart j'ai trouvé la solution.

Tu ne vérifie pas, tu cherche à avoir le suivant / précédent (si le précédent te donne un tableau vide, alors tu es sur le premier ^^)

lakamark
Auteur

Je fait ce-ci :
$next = $this->Post->find('neighbors',array('field'=>'Post.id','value'=>3));
quand je débug($next);
il me retourne un drôle de tableau :
voici le lien de la documentation
http://book.cakephp.org/2.0/fr/models/retrieving-your-data.html#find-neighbors

Je suis sur l'article #2

'2'
array(
    'prev' => array(
        'Post' => array(
            'id' => '2',
            'name' => 'New article',
            'slug' => 'new-article',
            'content' => '<p>Ma new Track! :)</p>
<iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/137631602&amp;auto_play=false&amp;hide_related=false&amp;show_comments=true&amp;show_user=true&amp;show_reposts=false&amp;visual=true"></iframe>
',
            'created' => '2014-08-03 23:03:02',
            'type' => 'post',
            'modified' => '2014-08-03 23:03:02',
            'user_id' => '1',
            'category_id' => '1',
            'media_id' => null,
            'online' => '1',
            'draft' => '0',
            'comment_count' => '0',
            'link' => array(
                'controller' => 'posts',
                'action' => 'show',
                'slug' => 'new-article'
            )
        )
    ),
    'next' => null
)

Pourquoi le prochain article ce met dans l'index Prev et non dans l'index next. Quand je suis sur l'article #2 il ne trouve pas l'article #3 (l'article suivant) et ne trouve pas l'article #1 (article précédent)

Moi j'ai tendance à faire 2 nouvelles requêtes afin d'avoir plus de contrôle sur le suivant / précédent je n'ai jamais utilisé neighbour

Sur ta requête tu demande l'article ayant l'ID numéro 3, donc la fonction te retourne l'article 2 et pas le suivant car il ne doit pas exister.

$neighbors = $this->Post->find('neighbors', array('field' => 'Post.id','value' => $post['Post']['id']));