Extra Form
PHP PHP 7.2
CMS XpressEngine

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" />

흠-_-; 일단 이렇긴 한데 새로 그냥 다시 해봐야겠습니다. 방법은 알거 같네요.

 

 

  • profile

    세션($_SESSION)에 추천기록이 남아 있습니다. 추천 처리하는 함수를 보시면 구체적으로 어떤 변수인지 알 수 있으니, 추천 취소시 해당 변수를 unset해주세요.

     

    아, 그리고 해당 유저(member_srl 또는 IP 주소)가 해당 글을 추천한 적이 있는지 확인하는 과정이 필요하겠습니다. 추천 1번 하고 취소 10번 해서 추천수를 -9로 만드는 꼼수가 통할 수도 있거든요! ㅋㅋㅋ 스킨에서 확인하는 건 소용없고, procDocumentVoteCancel 처리 과정 중에 확인해야 합니다.

  • profile profile
    감사합니다. ㅎㅎ