$(function() { $('.star-radio').rating({ required: true, callback: function(value, link) { $.ajax({ type: "post", url: site_url + "user/rate", dataType: "json", data: "&post_url=" + $('#post_url').val() + "&rate_val=" + value, success: function(e) { $.jGrowl(e.code + "<br>" + e.msg); } }); }});
On the code snippet above, we implement the rating plugin on the HTML element which has "star-radio" class attribute, which is your radio button as rating control. Every time user rate to a post, the script will send an Ajax request to User controller and send the rate data to the "rate" function.
<?php // .. some User controller code up here // Rate function on User Controller public function rate() { // Turn of layout for Ajax request unset($this->layout); // Gather ajax post data $rate = $this->input->post("rate_val", true); $post_url = $this->input->post("post_url", true); // Load model data $this->load->model('Post'); $post_id = $this->Post->get_post_id($post_url); // Call function to check if user is login // return current login user id, null if not login yet // You need to define this helper function your self if (get_user_id()) { // Call the Post Model is_rated method to check whether the current login user has submit a rate to related post if (!$this->Post->is_rated(get_user_id(), $post_id)) { $data = array("post_id" => $post_id, "user_id" => get_user_id(), "posts_rating_value" => $rate, "posts_rating_date" => date("Y-m-d H:i:s") ); // Call Post model method to insert rating data if ($this->Post->insert_rating($data, $post_id, $rate)) { echo json_encode(array("code" => "Success", "msg" => "Thank you, rate has been submitted")); } else { echo json_encode(array("code" => "Error", "msg" => "Sorry, something wrong. Please try again.")); } } // If post has been rated by the current login user else { echo json_encode(array("code" => "Error", "msg" => "You have already rated this post")); } } // User is not login yet, ask them to login first else { echo json_encode(array("code" => "Error", "msg" => "Please login to submit this rate")); } // Do not proceed to view, just terminate to send Json response exit; } // .. any other User controller code goes here?>
Following is the CodeIgniter View sample code for the rating control on your post view:
<?php//Check if user logged inif (!get_user_id()) { $radioIsActive = "disabled=disabled ";}else { $radioIsActive = " ";}?><?phpfor ($i = 1; $i <= 5; $i++) : if ($i == round($row["average"])) :?> <input class="star-radio" type="radio" name="rating" value="<?php echo $i; ?>" checked="checked" <?php echo "$radioIsActive"; ?>/> <?php else: ?> <input class="star-radio" type="radio" name="rating" value="<?php echo $i; ?>" <?php echo "$radioIsActive"; ?>/><?php endif;endfor;?>
dfdsf
ReplyDelete