Je vais tenter de m'expliquer un peu mieux sur ce qui exsite et la ou je veux aller :)
Ce qui existe
1/ La requête par mon Postcontroller via l'action index existe -> C'est elle qui me retourne les articles du blog que j'affiche donc dans la vue index.
2/ L'utilisateur peut, via un bouton (requete ajax) ajouter des articles favoris. J'ai ajouté ça dans une nouvelle table posts_users qui comprend comme champs : id | user_id | post_id (chaque id utilisateur à 1 ou plusieurs posts)
Ce que je cherche à faire : indiquer à l'utilisateur dans la liste des articles, quels articles sont dans ses favoris.
Alors sans cache, pas de probleme, je suis parvenu à mes fins de cette façon :
Dans l'action index de mon PostController j'ai ajouté une requête de type find('list) sur le champs post_id de ma table posts-users.
J'ai en résultat un array
Et dans la vue index où je faisais déjà une boucle foreach pour lister les articles, j'ai ajouté à l'intérieur de l'article une condition qui ajoute une div, seulement si l'id du post est dans l'array retourné par ma requête. En clair ça donne ça :
Ma requête supplémentaire dans le PostController action index (en plus de la requete classique qui liste les post :
$user_id = $this->Auth->user('id');
$this->loadModel('PostUser');
$this->PostUser->recursive = -1 ;
$d'favoris'] = $this->PostUser->find('list', array(
'conditions' => array('PostUser.user_id' => $user_id),
'fields' => array('PostUser.post_id'),
'order' => array('PostUser.post_id DESC')
));
Avec cette requete je récupère un aray ( $favoris ) qui liste les post_id de l'utilisateur en cours (ses favoris):
array
(int) 209 => '21',
(int) 207 => '15',
(int) 206 => '8'
)
De là, dans ma vue index, je rajoute une condition (à l'intérieur de ma boucle foreach qui affiche les articles) afin d'afficher ou non une indication visuelle qui indiquera à l'utilisateur que tel ou tel article est dans ses favoris. Je procède avec une simple condition et la fonction php in_array();
<?php if (in_array($posts'id'], $favoris)): echo "Article déjà dans tes favoris"; endif; ?>
Alors sans cache no probleme puisqu' à chaque appel de l'action index du controller post, le code php est exécuté, donc la boucle foreach qui liste les articles et à l'intérieur, ma petite condition qui affiche ou non "déjà dans tes favoris".
Là ou ca se complique, c'est qu'en intégrant un cache sur cette vue index. Inévitablement c'est le cache qui est servi, donc du HTML et ma condition à l'intérieur de la boucle foreach ne sert plus à rien, d'ou mon option de traiter cela en aval, c'est à dire apres que la page HTML soit servie et en agissant en jQuery sur le DOM.
Le clic sur le menu "Blog par l'utilisateur" devrait donc appeler en meme temps la vue index en cache et une action ajax qui me retournerai mon array précemment cité,
array
(int) 209 => '21',
(int) 207 => '15',
(int) 206 => '8'
)
(Sous forme de Json je te l'accorde :) )
afin de le traiter en jquery apres l'affichage de la page.
C'est la seule solution que j'ai en tête... Si une autre solution moins tordue existe pour pallier à cette contrainte je suis preneur :)
Et si je peux appeler à la fois lors d'un seul clic l'action index et une autre action ajax qui me retournerai mon array (fav par exemple) alors ça pourrait effectivement fonctionner. :)
Un peu long, je ne sais pas si je suis clair dans la démonstration :)
En tout cas merci de tes réponses qui m'ont déjà un peu plus éclairé :)