Extra Form
PHP PHP 7.4
CMS Rhymix 2.1

안녕하세요?

 

아래 확장변수 유효기간 애드온은 일정시점에 게시물을 삭제할 수 있도록 되어 있습니다.

https://xetown.com/tips/1053472

 

여기서 궁금증이 생기는데요.

확장변수 "extra_var1"에 형식은 단일선택으로 "진행중", "마감됨"으로 해놓고

게시물 작성시에는 "진행중"으로 해놓았다가 유효기간 도래시 자동으로 "마감됨"으로 바뀌면

게시판에서 "진행중"인 게시물만 정렬해서 볼 수 있을 것 같은데요.

 

아래 코드를 보면 상단에서 날짜를 비교해보고 날짜가 지난 경우 아래 함수로 게시물을 삭제하는 것 같더군요.

foreach($temp as $key=>$val)
{
$oDocumentController->deleteDocument($val, true); 
}


그래서 혹시 게시물 삭제 말고, 확장변수 값을 바꿔줄 수 있을까해서 질문 남겨봅니다.

rx_document_extra_vars DB에서 해당 게시물을 체크해서 값을 바꿔줘야하니 복잡하겠지요?

저기 위에서처럼 간단하게 해결하는 방법 말고 복잡하게 많은 노력이 필요하면 패스하고요. ^^;

 

<?php

if(!defined("__XE__")) exit();
    if($called_position!='before_module_proc') return;
if(($this->module == 'board') && $act) return;

if ($addon_info->module_srl){
$module_srl = $addon_info->module_srl;
}else{
return;
}
 
$extra_val_name = $addon_info->extra_val_name;
$document_srl = $_REQUEST['document_srl'];

if($extra_val_name == '') return;
  
$args->module_srl = $module_srl;
$output = executeQuery('addons.cc_ad_limited_posts.doc_list', $args);
$oDocumentController = &getController('document');

$oDocumentModel = &getModel('document');

 
if( count ($output->data) >1){
foreach($output->data as $__key=>$__val)
{
foreach($__val as $key=>$val)
if($key == "document_srl")
{
$getExtraVars = $oDocumentModel->getExtraVars($module_srl,$val);  
$date_val = "";
foreach($getExtraVars AS $key_=>$val_)
{
if ($val_->eid == $extra_val_name) {
$date_val =  $val_->value;
}
} 

if( $date_val!="" && (strtotime($date_val) < strtotime(date('Ymd'))) )
{// 날짜가 과거인 경우 
$temp[] =$val;
}
}
}
}else{
foreach($output->data as $key=>$val)
{
if($key == "document_srl")
{
$getExtraVars = $oDocumentModel->getExtraVars($module_srl,$val);  
$date_val = "";
foreach($getExtraVars AS $key_=>$val_)
{
if ($val_->eid == $extra_val_name) {
$date_val =  $val_->value;
}
} 

if( $date_val!="" && (strtotime($date_val) < strtotime(date('Ymd'))) )
{// 날짜가 과거인 경우 
$temp[] =$val;
}
}
}
}



   foreach($temp as $key=>$val)
{
$oDocumentController->deleteDocument($val, true); 
}

   
?>

 

  • profile
    순번이 1에 해당하는 확장변수 값을 '진행중'에서 '마감됨'으로 바꾸고, (지난번 질문처럼 범위 검색은 어렵지만) 특정 확장변수 값만 골라서 목록을 만드는 건 충분히 가능합니다.
    일반적인 게시물 검색 기능을 활용하면 되니까요.

    이런 식으로 접근할 수 있을 겁니다.
    위의 예시한 소스에서 $oDocumentController->deleteDocument($val, true);의 $val이 문서번호를 의미하는 것 같은데요. 그렇다면,

    $oDocumentController->deleteDocument($val, true); 대신
    $oDocumentController->updateDocumentExtraVar($module_srl, $val, 1, '마감됨'); 으로 하면 되긴 할 겁니다.

    그리고 나서 게시판을 확장변수 1번 변수에 따라 정렬을 해줘야겠죠.
    url에 search_target를 확장변수의 eid로 하고 search_keyword을 마감됨으로 넣어주면 정렬이 될 겁니다.

    * 참고 : 8번 확장변수의 값이 '세미나실'인 게시물만 추출
    https://dev.aporia.blog/index.php?mid=board_fKje46&search_target=extra_vars8&search_keyword=%EC%84%B8%EB%AF%B8%EB%82%98%EC%8B%A4

    * 주의 : 다만 문제가 있다면 게시판 목록이 검색 키워드를 통해 만들어진 것이기 때문에 이 안에서 제목이나 내용 검색을 따로 한다든가 하면 '마감됨' 값만 가지는 게시물 목록은 불가능하게 될 겁니다.
  • profile profile
    가슴이 뜁니다.
    퇴근 후 알려주신대로 만져봐야겠어요.
    감사합니다.
  • profile

    위에서

    url에 search_target를 확장변수의 eid로 하고 search_keyword을 마감됨으로 넣어주면 정렬이 될 겁니다.

    부분을

    url에 search_target를 확장변수 순번에 따라 extra_vars1로 하고 search_keyword을 마감됨으로 넣어주면 정렬이 될 겁니다.

    로 정정합니다.

  • profile profile
    시간이 나서 테스트를 해봤는데요.
    알려주신대로 하니 작동은 잘 하는데요.
    작동 로직이 매번 DB를 업데이트를 하는지 게시판이 너무 느려지는 단점이 있네요.
    게시물이 많을 경우 더 느린듯 합니다.
    아무튼 매번 감사합니다.
    오늘 하루도 즐거운 하루되세요~~~
  • profile profile

    아, 아마도 확장변수값이 '마감됨'일 경우에는 확장변수값 수정을 스킵해야 할 거예요.

    저도 지금 밖에 있다보니 위의 애드온 소스가 눈에 들어오질 않네요;;

  • profile profile
    근데 이게 가만 생각해보니 어떻게 해본들 매번 목록을 가져와서 확장변수값을 체크하고 하는 게 어차피 비효율적이긴 한 것 같습니다ㅜㅜ
  • profile profile
    원코드가 매번 목록을 가져와서 변수값을 체크하다보니 게시판이 느려진거였군요.

    "마감됨" 게시물은 제외하고 "진행중"인 게시물만
    매일 00:01분에 한번만 체크해서 "마감됨"으로 바꿔주면 좋겠는데
    저 위에 있는 원래 소스로는 어렵겠군요.
  • profile profile
    언급하신 애드온을 뜯어본 건 아니니 잘은 모르겠고, 어쨌든 복합적인 것 같습니다.
    제가 알려드렸던 코드도 비효율적이기는 마찬가지여서요.

    시간에 맞춰 체크하고 변수값 업데이트 하려면 보통 크론탭을 사용할 겁니다.
    (서버 호스팅 환경 정도는 돼야 가능할 텐데, 웹호스팅 이용자 신세인 저한테는 미지의 세계...)
    그게 아니라면 지난번에 제가 알려드렸던 것처럼 확장변수 다중검색 애드온을 응용해서 하는 정도가 방법일 거구요.
    둘 다 쉽지는 않네요;;;
  • profile profile
    매번 답변 달아주셔서 감사합니다.
    코딩을 못하니 매번 꼼수만 생각하는데 불현듯 좋은 꼼수가 생각났습니다.
    윤삼님은 영감을 주시는 분이네요.
    감사합니다.