xe_document_voted_log 테이블에서 컬럼을 삭제를 해도
여전히 '추천할 수 없습니다.', '비추천할 수 없습니다'라고 뜹니다.
어디에 추천한 기록이 남아있어서 그런 건가요?;
1. 스킨 수정하기
{@ $oDB = &DB::getInstance(); $query = $oDB->_query('select * from xe_document_voted_log where member_srl = '.$logged_info->member_srl.' AND document_srl = '.$oDocument->document_srl.''); $result = $oDB->_fetch($query); } <!--@if($result->member_srl==$logged_info->member_srl)--> <a href="javascript:();" onclick="doCallModuleAction('document','procDocumentVoteCancel','{$oDocument->document_srl}');return false;"|cond="$is_logged"> {$oDocument->get('voted_count')} / 추천취소 </a> <!--@else--> <a class="bd_login btn-vote-good" href="#" onclick="doCallModuleAction('document','procDocumentVoteUp','{$oDocument->document_srl}');return false;"|cond="$is_logged" style="border:0px solid #{$mi->color};color:#{$mi->color};"> <b><i class="fa fa-heart"></i> {$oDocument->get('voted_count')}</b> <p>{$lang->cmd_vote}</p> </a> <!--@end-->
2. document 모듈의 쿼리 만들기
<query id="cancelVotedCount" action="delete"> <tables> <table name="document_voted_log" /> </tables> <conditions> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /> <condition operation="equal" column="member_srl" var="member_srl" filter="number" notnull="notnull" pipe="and" /> </conditions> </query>
3. document 모듈의 controller 함수 선언하기
function procDocumentVoteCancel() { // $oDB = &DB::getInstance(); if(!Context::get('is_logged')) return new BaseObject(-1, 'msg_invalid_request'); $document_srl = Context::get('target_srl'); if(!$document_srl) return new BaseObject(-1, 'msg_invalid_request'); $oDocumentModel = getModel('document'); $oDocument = $oDocumentModel->getDocument($document_srl, false, false); $module_srl = $oDocument->get('module_srl'); if(!$module_srl) return new BaseObject(-1, 'msg_invalid_request'); $oModuleModel = getModel('module'); $document_config = $oModuleModel->getModulePartConfig('document',$module_srl); if($document_config->use_vote_up=='N') return new BaseObject(-1, 'msg_invalid_request'); // $point = 1; //$output = $this->cancelDocumentVotedLog($args); // $this->add('voted_count', $output->get('voted_count')); $logged_info = Context::get('logged_info'); $args = new stdClass(); $args->member_srl = $logged_info->member_srl; $args->document_srl = $document_srl; executeQuery('document.cancelVotedCount', $args); return $output; // $output = $oDB->_fetch($oDB->_query("DELETE FROM document_voted_log WHERE member_srl = // '".$logged_info->member_srl."' AND document_srl = '".$document_srl."' ")); //$output = $oDB->_fetch($oDB->_query("SELECT * FROM 테이블명 WHERE module_srl = '".$module_srl."' ")); // return $output; } function cancelDocumentVotedLog($args){ $args = new stdClass(); $logged_info = Context::get('logged_info'); $document_srl = Context::get('target_srl'); $oModuleModel = getModel('module'); $document_config = $oModuleModel->getModulePartConfig('document',$module_srl); $args = new stdClass(); $args->member_srl = $logged_info->member_srl; $args->document_srl = $document_srl; executeQuery('document.cancelVotedCount', $args); }
4. document 모듈의 module.xml 작성하기
<action name="procDocumentVoteCancel" type="controller" />
흠-_-; 일단 이렇긴 한데 새로 그냥 다시 해봐야겠습니다. 방법은 알거 같네요.
세션($_SESSION)에 추천기록이 남아 있습니다. 추천 처리하는 함수를 보시면 구체적으로 어떤 변수인지 알 수 있으니, 추천 취소시 해당 변수를 unset해주세요.
아, 그리고 해당 유저(member_srl 또는 IP 주소)가 해당 글을 추천한 적이 있는지 확인하는 과정이 필요하겠습니다. 추천 1번 하고 취소 10번 해서 추천수를 -9로 만드는 꼼수가 통할 수도 있거든요! ㅋㅋㅋ 스킨에서 확인하는 건 소용없고, procDocumentVoteCancel 처리 과정 중에 확인해야 합니다.