Extra Form
PHP PHP 7.2
CMS XpressEngine

클릭하면 xe_document_voted_log 테이블에서 document_srl 이랑 member_srl이 같은 컬럼을 삭제하려고 합니다.

(쿼리문을 xml로 짜본 것은 3번입니다.)

의도는 추천취소 버튼을 누르면 추천취소함수(즉 해당컬럼삭제함수)가 실행되도록 하려고 합니다.

 

1. /modules/board/skins/sketchbook5_varycolor/_read.html

{@
$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-->

스킨에서 procDocumentVoteCancel 함수를 적어서 클릭하면 해당 함수(추천취소함수, 해당컬럼삭제함수)가 실행되게끔 했습니다.

 

2. /modules/document/document.controller.php

    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'));

      $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();

      $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);
   }

procDocumentVoteCancel 함수를 만들고 

cancelDocumentVotedLog 함수가 실행되게끔 했습니다.

이게 젤 오류가 있을 거 같은데 $args의 사용방법이라던가 ㅠㅠ 그런걸 잘 모르겠습니다.

어디서 오류가 있는지 찝어주실 고수분 계실까요..

 

3. /modules/document/queries/cancelVotedCount.xml

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

document_voted_log 테이블에서 document_srl이 같고, member_srl이 같은 컬럼을 삭제하려고 하는데 제대로 짠 xml문이 맞나요?

  • ?
    $logged_info 를 쓰려면 그 위에
    $logged_info = Context::get('logged_info'); 구문이 있어야해요
  • ? profile
    대박-_-; 감사합니다.;;