|
|
|
| Добрый день, пишу для сайта Like функцию.
Не могу додумать какое нужно условие в следующем коде.
Сейчас работает так:
Если действие + и пользователь ранее не голосовал то прибавляем + 1 к посту
Если действие - и пользователь ранее голосовал то убавляем у поста -1 так же удаляем запись о том что пользователь голосовал ранее.
Но если у поста стоит 0 и пользователь сразу хочет поставить отрицательный голос при этом ранее не голосовал за него, такое условие не пройдет, так как в базе данных нет записи о том что он голосовал.
Вот код функции:
<?php
/* Like для постов */
function like_this_post($post_id='', $action=''){
global $user_ID; // ID пользователя
if($user_ID > 0) {
if($post_id != '') {
$post_id = intval($post_id);
$count = get_post_meta($post_id, 'like_this_post', 'true'); // получаем данные сколько у поста голосов
if(empty($count)) { $count = 0; }
if($action == 'user_like_post_plus' && search_user_like($user_ID, $post_id, 'post') == true) { // search_user_like проверяет голосовал ли ранее пользователь, если записей в базе нет возвращает true
$meta_value = $count + 1;
update_user_like($user_ID, $post_id, 'post', '1'); // добавляем в базу запись о том что пользователь проголосовал за пост
update_post_meta($post_id, 'like_this_post', $meta_value); // обновляем показатель у записи
return get_count_post_like($post_id); // возаращаем количество голосов за пост
}elseif($action == 'user_like_post_minus' && search_user_like($user_ID, $post_id, 'post') == false) { // если пользователь нажал минус и он уже ранее голосовал
/*
В этом месте условие работает не верно, если пользователь ранее не голосовал за пост то он не сможет сразу поставить рейтинг минус...
*/
$meta_value = $count - 1;
update_user_like($user_ID, $post_id, 'post', '0');
update_post_meta($post_id, 'like_this_post', $meta_value);
return get_count_post_like($post_id);
}else {
return get_count_post_like($post_id);
}
}
}
}
?>
|
p.s. каждый пользователь может давать только 1 голос при этом менять его если передумал. | |
|
|
|
|
|
|
|
для: ZetRider
(16.03.2012 в 12:17)
| | а зачем удалять запись? Вы изначально делайте запись таким образом: если пользователь "за", то с полем 1, а если "против", то -1. А потом просто изменяйте это поле с +1 на -1 либо наоборот, в зависимости от действий пользователя. | |
|
|
|
|
|
|
|
для: Lotanaen
(16.03.2012 в 13:00)
| | Спасибо, действительно зачем удалять.
Ключевым в Вашем ответе оказались сами значения которые записываются для пользователя.
Пробовал записывать: 1 да 0 нет
С нулем не работало даже если пользователь вообще не голосовал т.к. запрос и так возвращал 0 :)
А условие было вида: Если ставит минус и его оценка ранее не равна нулю | |
|
|
|