특정일에 확장변수값 자동 변경 질문
CMS/프레임워크 | Rhymix 2.1 |
---|---|
개발 언어 | PHP 7.4 |
안녕하세요?
아래 확장변수 유효기간 애드온은 일정시점에 게시물을 삭제할 수 있도록 되어 있습니다.
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);
}
?>
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);
}
?>
댓글 9
일반적인 게시물 검색 기능을 활용하면 되니까요.
이런 식으로 접근할 수 있을 겁니다.
위의 예시한 소스에서 $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
* 주의 : 다만 문제가 있다면 게시판 목록이 검색 키워드를 통해 만들어진 것이기 때문에 이 안에서 제목이나 내용 검색을 따로 한다든가 하면 '마감됨' 값만 가지는 게시물 목록은 불가능하게 될 겁니다.
퇴근 후 알려주신대로 만져봐야겠어요.
감사합니다.
위에서
url에 search_target를 확장변수의 eid로 하고 search_keyword을 마감됨으로 넣어주면 정렬이 될 겁니다.부분을
로 정정합니다.
알려주신대로 하니 작동은 잘 하는데요.
작동 로직이 매번 DB를 업데이트를 하는지 게시판이 너무 느려지는 단점이 있네요.
게시물이 많을 경우 더 느린듯 합니다.
아무튼 매번 감사합니다.
오늘 하루도 즐거운 하루되세요~~~
아, 아마도 확장변수값이 '마감됨'일 경우에는 확장변수값 수정을 스킵해야 할 거예요.
저도 지금 밖에 있다보니 위의 애드온 소스가 눈에 들어오질 않네요;;
"마감됨" 게시물은 제외하고 "진행중"인 게시물만
매일 00:01분에 한번만 체크해서 "마감됨"으로 바꿔주면 좋겠는데
저 위에 있는 원래 소스로는 어렵겠군요.
제가 알려드렸던 코드도 비효율적이기는 마찬가지여서요.
시간에 맞춰 체크하고 변수값 업데이트 하려면 보통 크론탭을 사용할 겁니다.
(서버 호스팅 환경 정도는 돼야 가능할 텐데, 웹호스팅 이용자 신세인 저한테는 미지의 세계...)
그게 아니라면 지난번에 제가 알려드렸던 것처럼 확장변수 다중검색 애드온을 응용해서 하는 정도가 방법일 거구요.
둘 다 쉽지는 않네요;;;
코딩을 못하니 매번 꼼수만 생각하는데 불현듯 좋은 꼼수가 생각났습니다.
윤삼님은 영감을 주시는 분이네요.
감사합니다.