게시글 삭제 애드온을 설치만하고 사실 사용은 하고 있지 않은데요.
임시로 제공하는 게시판에 임시로 작성된 게시글을 기간이 지나면 자동으로 삭제하는 것을 찾다가 공홈에서 발견하고 설치까지만 해 놓은 애드온입니다.
제가 직접 관리해서 삭제할 정도의 여력이 되어서 사실 애드온을 사용하고 있진 않습니다.
(사실 멀정한 다른게시판 게시글도 다 지워지면 어쩌나 하는 염려증... ㅋ)
그런데 추후 사용하게 될 때를 고려해서 살펴보다가 공지글은 지워지면 안될 것 같아 질문을 드립니다.
현재 게시글 불러오는 쿼리입니다.
<query id="autoDelGetList" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="module_srl" filter="number" />
</conditions>
</query>
아래 처럼 한줄 추가하면 공지글이 제외가 될까요???
<query id="autoDelGetList" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="equal" column="module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="is_notice" var="N" pipe="and" />
</conditions>
</query>
그리고 궁금한 점 .2
이 자료에서 댓글 수는 왜 불러오는지 봐도 잘 모르겠네요.
<?php
if(!defined("__XE__")) exit();
if($called_position!='before_module_proc') return;
if($this->module != 'board' && $this->module != 'beluxe') return;
$act = Context::get('act');
if(($this->module == 'board' || $this->module == 'beluxe') && $act) return;
$inputNum = preg_match('/[^0-9]/', $addon_info->inputNum)?'':$addon_info->inputNum;
$h_or_d = $addon_info->h_or_d;
$regOrLast = $addon_info->regOrLast;
if(!$inputNum) return;
$args->module_srl = $this->module_srl;
$output = executeQuery('addons.autoDel.autoDelGetList', $args);
$oDocumentController = &getController('document');
if($h_or_d == 'listCount')
{
if(count($output->data)>$inputNum)
{
$delCount = count($output->data) - $inputNum;
foreach($output->data as $key=>$val)
{
if($regOrLast=="regdate"&&$val->regdate<=date("YmdHis", strtotime("-".$inputNum.$unit))) $temp[] = $val->regdate."/".$val->document_srl;
else if($regOrLast=="lastUpdate"&&$val->last_update<=date("YmdHis", strtotime("-".$inputNum.$unit))) $temp[] = $val->last_update."/".$val->document_srl;
}
sort($temp);
foreach($temp as $key=>$val)
{
$breakCount++;
$val = explode("/", $val);
$args->document_srl = $val[1];
$chk_cnt = NULL;
$chk_cnt = executeQuery('addons.autoDel.getCommentCount', $args);
foreach($chk_cnt as $k=>$cnt){}
$chk_c = count($cnt);
if($chk_c==NULL) $oDocumentController->deleteDocument($val[1], true);
if($breakCount==$delCount) break;
}
}
}
else
{
if($h_or_d=='hour') $unit = 'hour';
else $unit = 'day';
foreach($output->data as $key=>$val)
{
if($regOrLast=="regdate"&&$val->regdate<=date("YmdHis", strtotime("-".$inputNum.$unit))) $temp[] = $val->regdate."/".$val->document_srl;
else if($regOrLast=="lastUpdate"&&$val->last_update<=date("YmdHis", strtotime("-".$inputNum.$unit))) $temp[] = $val->last_update."/".$val->document_srl;
}
sort($temp);
foreach($temp as $key=>$val)
{
$val = explode("/", $val);
$chk_cnt = NULL;
$chk_cnt = executeQuery('addons.autoDel.getCommentCount', $args);
foreach($chk_cnt as $k=>$cnt){}
$chk_c = count($cnt);
if($chk_c==NULL) $oDocumentController->deleteDocument($val[1], true);
}
}
?>
댓글 18
<condition operation="equal" column="is_notice" var="N" pipe="and" /> var가 아니라
default 입니다.
일반적으로 xml 쿼리에서 var로 쓰이는건 해당 $args 같은것으로 넘어오는 쿼리에 이름을 사용합니다
ex)
$args = new stdclass();
$args->module_srl = '123';
$output = executeQuery('~~~~.~~~',$args);
<condition operation="equal" column="module_srl" var="module_srl" />
$chk_cnt = executeQuery('addons.autoDel.getCommentCount', $args);
여기에서 댓글갯수 가져오는것 같은데요.
정확히 알고 싶은데요. 댓글이 달린 게시글은 삭제가 안되는 자료인가요?
애드온 코드는 저게 전부에요. 댓글수 쿼리는 각각의 문서의 댓글 수만 가져옵니다. 설정에는 댓글관련 설정은 아예 없습니다.
<extra_vars>
<var name="h_or_d" type="select">
<title xml:lang="ko">단위</title>
<description xml:lang="ko">단위를 선택(시간/일/갯수)</description>
<options value="hour">
<title xml:lang="ko">시간</title>
</options>
<options value="day">
<title xml:lang="ko">일</title>
</options>
<options value="listCount">
<title xml:lang="ko">목록갯수</title>
</options>
</var>
<var name="inputNum">
<title xml:lang="ko">시간/일/갯수 입력</title>
<description xml:lang="ko">* 입력된 기간(시간/일/갯수)이 지난 게시물은 자동 삭제됩니다.
* 시간,일,갯수 중에 하나만 선택.
* 시간 혹은 일을 선택하면 입력한 시간이나 날짜가 지난 게시물은 자동 삭제됩니다.
* 갯수를 선택하면 입력한 갯수만 남겨두고 새로운 글이 등록될 때마다 가장 오래된 글부터 자동삭제 됩니다.</description>
</var>
<var name="regOrLast" type="select">
<title xml:lang="ko">기준날짜</title>
<description xml:lang="ko">등록일 혹은 마지막 수정일을 기준으로 할 것인지 선택</description>
<options value="regdate">
<title xml:lang="ko">등록일</title>
</options>
<options value="lastUpdate">
<title xml:lang="ko">수정일</title>
</options>
</var>
</extra_vars>
$chk_cnt = executeQuery('addons.autoDel.getCommentCount', $args);
서드파티에서 직접 쿼리를 만든 코드인것 같은데 이 코드를 사용하면서
마지막 사용할때는 $oDocumentController->deleteDocument($val[1], true);
늘 $val['1'] 이렇게 배열중에 1번에 들어간 데이터만 고집해서 넣는다고 되어있어요.
그럼 $val['1']에는 항상 Document_srl 이 넘어간다는 소린데 sort($temp); 를 처리하게 되면 해당 $temp 값이 뭐로변하는지 등등을 다 봐야해요 ㅡ.ㅡ;
그러면 한도 끝도 없이 확인을 해야하는데 대충 프로그래머들이 이 코드를 보고 유추해드릴 수 있는건, 댓글갯수를 비교해서 하나라도 데이터가 있으면 삭제를 하지 않는것으로 보여진다 이렇게 말할 수 밖에 없어요
왜 그리 만들었는지는 당사자만 알죠 ㅡ.ㅡ;
굳이 쿼리를 수정할 필요없이
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($val->document_srl, false, false);
추가하고
if($oDocument->get('is_notice')!='Y'){}
조건에 따라 저장하느냐 마느냐 해도 되지 않을까요?
조건을 걸어서 하면 하나의 쿼리로 끝나기 때문이지요..
(물론 캐시에 저장해둔 데이터를 사용해서 오브젝트 캐시 사용하면 똑같지만 궂이 불필요한 액션이기에.. 그냥 원래 있는 것에 쿼리를 추가하는것이 더 빠르답니다..)
일정시간 지나면 자동삭제되는 애드온을 찾고 있는 도중 이글을 찾게 되어 댓글 남깁니다.
공홈에서 구하셨다고 하는데
공홈에서 못찾겠습니다 ㅠㅠ
죄송하지만 링크좀 부탁드려도 될까요?