케이보드 | 좋아요 취소할 수 있게 만들기

|

참조

image 43
케이보드 | 좋아요 취소할 수 있게 만들기 4

요즘 좋아요 토글이 대세인 것 같습니다. 그래서 몇번 좋아요를 취소할 수 있는지 궁금해하시는 분들이 있어 자료를 공유하고자 합니다.

아래의 간단한 코드를 추가하면 좋아요를 한번 더 눌렀을 때 취소됩니다. 그 때 DB에서 유저의 ID가 삭제됩니다. 그러나 싫어요는 더이상 사용할 수 없습니다.

원리

image 41
케이보드 | 좋아요 취소할 수 있게 만들기 5

kboard_vote 테이블에 있는 추천 값을 추가하거나 삭제합니다.

image 42
케이보드 | 좋아요 취소할 수 있게 만들기 6

그 분기점을 기반으로 kboard_board_content 테이블에 있는 게시물의 값에 좋아요를 1개 추가하거나 1개 줄여서 반환합니다.

CSS 파일 수정

.kboard-button-unlike {
    display: none;
}

먼저 싫어요를 숨겨야 합니다. display: none; 를 통해 숨김 처리를 합니다.

코드

class/KBController.class.php 에 접근하여 1160줄을 확인해봅니다.

/**
 * 게시글 좋아요
 */
public function documentLike(){
	check_ajax_referer('kboard_ajax_security', 'security');
	if(isset($_POST['document_uid']) && intval($_POST['document_uid'])){
		$content = new KBContent();
		$content->initWithUID($_POST['document_uid']);
		if($content->uid){
			$board = $content->getBoard();
			if($board->isVote()){
				$args['target_uid'] = $content->uid;
				$args['target_type'] = KBVote::$TYPE_DOCUMENT;
				$args['target_vote'] = KBVote::$VOTE_LIKE;
				$vote = new KBVote();

				if($vote->isExists($args) === 0){

					$vote->insert($args);

					$content->like = $content->like + 1;
					$content->vote = $content->vote + 1;
					$content->updateContent();


					wp_send_json(array('result'=>'success', 'data'=>array('vote'=>intval($content->vote), 'like'=>intval($content->vote), 'unlike'=>intval($content->unlike))));

				}
				else{

					$content->like = $content->like - 1;
					$content->vote = $content->vote - 1;
					$content->updateContent();

					$vote->delete($args);

					wp_send_json(array('result'=>'success', 'data'=>array('vote'=>intval($content->vote), 'like'=>intval($content->vote), 'unlike'=>intval($content->unlike))));

				}
			}
			else if(!is_user_logged_in()){
				wp_send_json(array('result'=>'error', 'message'=>__('Please Log in to continue.', 'kboard')));
			}
		}
	}

}


/**
 * 게시글 싫어요
 */
function documentUnlike(){
	wp_send_json(array('result'=>'error', 'message'=>__('싫어요 기능이 비활성화되었습니다.', 'kboard')));
}

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

클릭하여 복사