if i understand your view display several posts
if your jointable is named fav_posts_users for exemple
you should have in your post model :
var $hasAndBelongsToMany = array(
'Favorite' => array(
'className' => 'User',
'joinTable' => 'fav_posts_users',
'foreignKey' => 'post_id',
'associationForeignKey' => 'user_id',
'unique' => true
),
);
in your user model :
var $hasAndBelongsToMany = array(
'Favorite' => array(
'className' => 'Post',
'joinTable' => 'fav_posts_users',
'foreignKey' => 'user_id',
'associationForeignKey' => 'post_id',
'unique' => true
),
);
and in your view :
foreach ($posts as $post):
if ($this->Session->check(Auth.User)):
// Loop through the posts favorites
foreach($post['Favorite'] as $favorite):
if ($favorite['user_id'] == $this->Session-
>read('Auth.User.id')):
/***** ITS YOUR FAVORITE!!!! *****/
else:
/*** BUTTON TO ADD TO FAVORITES ***/
endif;
endforeach;
else:
/*** BUTTON TO ADD TO FAVORITES ***/
endif;
endforeach;
On 1 déc, 01:04, andrewperk <andrewp...@gmail.com> wrote:
> Hello, I'm having a hard time displaying different text in a view
> depending on if a user who is logged in has marked the post as a
> favorite or not.
>
> Users can have many posts, posts belong to users.
> Users can have many favorites, favorites belong to users and posts.
>
> In my index view I loop through all posts and display the post.
>
> Inside that I loop, I then loop through all the favorites of that
> post. Remember sometimes a post may not have any favorites so the
> $post['Favorite] array might be empty. I want to display different
> text if the post is a favorite of the logged in user. I do this by
> comparing the current favorite's user_id to the logged in user's id.
>
> Where I run into problems is when a post is marked as a favorite by 2
> or more users. When this happens the Favorite array for the post
> associations contains multiple users and thus I end up with both of my
> different texts being displayed instead of just one or the other.
>
> So if the post is a favorite I want to tell the user its already their
> favorite.
>
> If the post is not a favorite, I want to display a button so they can
> add it as a favorite.
>
> And if they are not logged in, they get a link describing to them what
> favorites are.
>
> Here's my view code:
>
> *******************************
>
> <?php foreach ($posts as $post): ?>
> <?php
> // Check for logged in user
> if ($logged_in): ?>
> // Loop through the posts favorites
> <?php foreach($post['Favorite'] as $favorite): ?>
> <?php
> // If favorite matches user id tell them its a
> favorite
> if ($favorite['user_id'] == $current_user['id']): ?>
> ***** ITS YOUR FAVORITE!!!! *****
> <?php
> else: ?>
> *** BUTTON TO ADD TO FAVORITES ***
> <?php endif; ?>
> <?php endforeach; ?>
> <?php
> // Favorites array might be empty
> if (empty($post['Favorite'])): ?>
> *** BUTTON TO ADD TO FAVORITES ***
> <?php endif; ?>
> <?php else: ?>
> // No logged in user. Display link to describe what favorites are
> *** LINK Favorites Description ***
> <?php endif; ?>
--
Our newest site for the community: CakePHP Video Tutorials http://tv.cakephp.org
Check out the new CakePHP Questions site http://ask.cakephp.org and help others with their CakePHP related questions.
To unsubscribe from this group, send email to
cake-php+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/cake-php
No comments:
Post a Comment