Side
Side

Reputation: 1751

Fuel php orm profile like

First really sorry if its a stupid question but I'm a beginner.

So I recently started working with fulephp and I have a small site, and would like to give the users the ability to like other users profile.

But I'm a bit unexperienced at this part. So I have a table users_like

id | users_id | liked_by
1  | 5        | 1
2  | 5        | 3
3  | 1        | 2
4  | 1        | 9

the user_id is who got the like and the liked_by is who gave the like

So I have a like button on the users profile

<button class="like btn btn-primary" data-like="<?php echo $user->profile['user_id']; ?>">Like</button>

the data-like contains the users id who gets the like

And the insert looks like this

PHP function

public function action_like($id)
    {
        if(Input::is_ajax()):

            $response = Response::forge();

                $like = Model_Like::forge();
                $like->user_id = $id;
                $like->liked_by = Session::get('sentry_user');
                $like->save();

                $response->body(json_encode(array(
                    'status' => 'liked',
                )));

            return $response;


        endif;// is ajax
    } 

jQuery ajax posts

$('button.like').on('click', function(){
    var likeId = $(this).data('like');
    $.ajax({
        type: "POST",
        url: siteUrl + "profile/like/" + likeId,
        dataType: "json",
        context: this,
        beforeSend: function()
        {
            $(this).attr('disabled', 'disabled');
        },

        success: function(data)
        {
            if(data.status === "liked") {
                $(this).removeClass('like')
                .addClass('unlike')
                .text('Un-Like');

            }
        }, 

        complete: function()
        {
            $(this).removeAttr('disabled', 'disabled');
        }
    });
});

So actually my logic was this.

The orm retuns the users likes, and I was thinking to do this

if(Session::get('sentry_user') != $like['liked_by']) {
  <button class="like btn btn-primary" data-like="<?php echo $user->profile['user_id']; ?>">Like</button>
}
else {
  <button class="unlike btn btn-primary" data-like="<?php echo $user->profile['user_id']; ?>">Un-Like</button>

}

So if the logged in users id is not equals to the liked_by than show the button Like otherwise show the button unlike, and if they click that a function will remove the like

But I was silly because I forgot that this actually returns arrays so this is a no-no

So my question is that, I should use jquery cookie somehow to achive the following.

When an user clicks on Like some how get the user has liked that profile and change the button to unlike.

Or could please someone give me a little hint for this solution, just a hint or advice.

Upvotes: 0

Views: 258

Answers (1)

dark_gf
dark_gf

Reputation: 726

In my point of view i do this task such:

1)user login and we save it id to session data

2)when user request some page we return button "like" or "unlike" (recommend to output 2 buttons one hidden, see below)

3)when user clicks "like": do post by jquery like and after success u mush change to button to unlike it can be done by changing style, text, events, etc, but i would u recommend to hide "like" button and show "unlike"

4)when user clicks "unlike": same as 3) but change to "like" button on success

PS: at server side i recommend to return to true or false, on success or fail.

Upvotes: -1

Related Questions