list.skin.php화면에서 '특정 공지게시물'을 일반 게시물로 전환시키려고 합니다. 정보
list.skin.php화면에서 '특정 공지게시물'을 일반 게시물로 전환시키려고 합니다.본문
조금 어렵고(?) 복잡한 문제입니다.
우선 이작업을 하게된 내용을 약간 설명드리면...
얼마전에 스킨란에 '학원매매'관련 스킨을 하나 올렸는데요...
그 스킨에는 'wr_1 여유필드와 공지체크'를 이용해서 게시물옵션을 지정할수 있도록 해뒀습니다.
notice = '체크하면..' <- '급매물' (오렌지색)
wr_1 = 1 <- '추천매물' (파란색)
wr_1 = 2 <- '굵게표시' (게시제목글 굵게)
wr_1 = 3 <- '일반게시물' (일반형태)
글을 작성시 위와같이 하나를 지정하게 되면 (하나만 지정하게 만들었음)
list.skin.php에 위 옵션에 맞는 형태로 게시물이 출력이 됩니다.(색깔변화 or 공지글형태)
이것을 응용해서 다른 스킨을 현재 작업하다가,
일정시간이 지나면 'wr_1의 값이 '3'으로 지정된 게시물을 제외한 '위의 다른옵션'이 지정된 게시물들을
전부 'wr_1 =3 (일반게시물)' 형태로 자동으로 변경되도록 하려고 합니다.
물론 자동이라기 보다..시간이 지난후 게시물에 다시 들어와서 볼때 list.skin.php 페이지가 새로 열리게 되므로
그때 db에 update문을 실행해서 변경된 정보를 새로 저장한 다음 보여주는 형태입니다.
현재 g4man님께서 주신 여러가지 팁으로 응용해서 아래처럼 list.skin.php에 일단 만들었습니다.
[list.skin.php] 에 삽입
-----------------------
<? //--- 일정기간이 지나면 '추천/굵게표시' 게시물 모두 '일반게시물'로 변화
$day_chk = "3"; // 옵션적용 기간 날짜(일수 or 분)
$cnd_chk = " wr_1 <> '3' "; // 쿼리 추가 조건 설정 (기본적으로 3인경우는 찾지않음)
$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now() ";
//[테스트용] 분으로 적용해서 테스트 할경우, 아래 구문사용,
//$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' Minute) < now() ";
sql_query($sql_chk);
?>
테스트 해본결과, 아주 만족스럽게 잘 됩니다.
'추천매물', '굵게표시'옵션적용된 게시물이 시간이 지나면 '일반게시물'로 변경이 됩니다.
(원래는 위 구문을 list.php에 적용되어야 하는거지만, 소스업그레이드시 수정이 번거러워 list.skin.php 에 넣었습니다.
따라서 시간차가 생기긴 하지만 ..그냥저냥 만족합니다)
[문제]는 다른게 아니고,
-----------------------------------------------------------------------------------------
공지체크를 응용한 '급매물'을 list.skin.php에서 어떻게 처리해야
위 wr_1 들 처럼, 일반게시물로 변경할수 있는지 몰라서 질문을 하게 됐습니다.
설명이 좀 어려운데...
그냥 간단히 말해서 list.skin.php에서 위 지정된 시간이 지난 '특정공지'글을 어떻게 '일반게시물'로 바꾸느냐 하는것입니다.
-----------------------------------------------------------------------------------------
notice값의 경우 db에 저장되는 테이블도 다르고 또한 notice칼럼에 한개의 값만
들어가는게 아니므로 일괄적으로 체크값(해당db칼럼) 내용전체를 비우는게 아니라서.......무척이나 어렵네요.
이해를 드리기 위해서 글을 좀 길게 썼습니다만, 위 내용을 이해하시는분 계시면
부탁컨데..조금 정확한 답변을 부탁드립니다.(잘못된 구문을 사용했다가 db에 문제가 생긴경우가 있어서.. -_-;;)
list.skin.php에서 시간이 지난, 공지게시물을 일반게시물로 전환하는데 있어서 필요한
db에 저장되어있는 해당 '공지체크값'만을 삭제해주는(?) 방법이 필요합니다.
[질문 추가참고글] http://www.sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=4969&sca=&sfl=mb_id&stx=yesmoa&sop=and
우선 이작업을 하게된 내용을 약간 설명드리면...
얼마전에 스킨란에 '학원매매'관련 스킨을 하나 올렸는데요...
그 스킨에는 'wr_1 여유필드와 공지체크'를 이용해서 게시물옵션을 지정할수 있도록 해뒀습니다.
notice = '체크하면..' <- '급매물' (오렌지색)
wr_1 = 1 <- '추천매물' (파란색)
wr_1 = 2 <- '굵게표시' (게시제목글 굵게)
wr_1 = 3 <- '일반게시물' (일반형태)
글을 작성시 위와같이 하나를 지정하게 되면 (하나만 지정하게 만들었음)
list.skin.php에 위 옵션에 맞는 형태로 게시물이 출력이 됩니다.(색깔변화 or 공지글형태)
이것을 응용해서 다른 스킨을 현재 작업하다가,
일정시간이 지나면 'wr_1의 값이 '3'으로 지정된 게시물을 제외한 '위의 다른옵션'이 지정된 게시물들을
전부 'wr_1 =3 (일반게시물)' 형태로 자동으로 변경되도록 하려고 합니다.
물론 자동이라기 보다..시간이 지난후 게시물에 다시 들어와서 볼때 list.skin.php 페이지가 새로 열리게 되므로
그때 db에 update문을 실행해서 변경된 정보를 새로 저장한 다음 보여주는 형태입니다.
현재 g4man님께서 주신 여러가지 팁으로 응용해서 아래처럼 list.skin.php에 일단 만들었습니다.
[list.skin.php] 에 삽입
-----------------------
<? //--- 일정기간이 지나면 '추천/굵게표시' 게시물 모두 '일반게시물'로 변화
$day_chk = "3"; // 옵션적용 기간 날짜(일수 or 분)
$cnd_chk = " wr_1 <> '3' "; // 쿼리 추가 조건 설정 (기본적으로 3인경우는 찾지않음)
$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now() ";
//[테스트용] 분으로 적용해서 테스트 할경우, 아래 구문사용,
//$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' Minute) < now() ";
sql_query($sql_chk);
?>
테스트 해본결과, 아주 만족스럽게 잘 됩니다.
'추천매물', '굵게표시'옵션적용된 게시물이 시간이 지나면 '일반게시물'로 변경이 됩니다.
(원래는 위 구문을 list.php에 적용되어야 하는거지만, 소스업그레이드시 수정이 번거러워 list.skin.php 에 넣었습니다.
따라서 시간차가 생기긴 하지만 ..그냥저냥 만족합니다)
[문제]는 다른게 아니고,
-----------------------------------------------------------------------------------------
공지체크를 응용한 '급매물'을 list.skin.php에서 어떻게 처리해야
위 wr_1 들 처럼, 일반게시물로 변경할수 있는지 몰라서 질문을 하게 됐습니다.
설명이 좀 어려운데...
그냥 간단히 말해서 list.skin.php에서 위 지정된 시간이 지난 '특정공지'글을 어떻게 '일반게시물'로 바꾸느냐 하는것입니다.
-----------------------------------------------------------------------------------------
notice값의 경우 db에 저장되는 테이블도 다르고 또한 notice칼럼에 한개의 값만
들어가는게 아니므로 일괄적으로 체크값(해당db칼럼) 내용전체를 비우는게 아니라서.......무척이나 어렵네요.
이해를 드리기 위해서 글을 좀 길게 썼습니다만, 위 내용을 이해하시는분 계시면
부탁컨데..조금 정확한 답변을 부탁드립니다.(잘못된 구문을 사용했다가 db에 문제가 생긴경우가 있어서.. -_-;;)
list.skin.php에서 시간이 지난, 공지게시물을 일반게시물로 전환하는데 있어서 필요한
db에 저장되어있는 해당 '공지체크값'만을 삭제해주는(?) 방법이 필요합니다.
[질문 추가참고글] http://www.sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=4969&sca=&sfl=mb_id&stx=yesmoa&sop=and
댓글 전체
공지는 $write[wr_datetime]으로 비교해야합니다.
$board에는 시간값이 없습니다.
$board에는 시간값이 없습니다.
아..계셨군요...
지금 위 코드 돌려서 3분에 맞춰두고 테스트 중입니다만,
궁금한건...wr_1의 경우는 시간체크가 되는데 공지글의 경우는 위 코드를 보면 시간이 지난건 어찌 알수있을까요.
지금 위 코드 돌려서 3분에 맞춰두고 테스트 중입니다만,
궁금한건...wr_1의 경우는 시간체크가 되는데 공지글의 경우는 위 코드를 보면 시간이 지난건 어찌 알수있을까요.
if ($list[$i][is_notice]) {
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
sql_query(" update $g4[board_table] set bo_notice = '$bo_notice' where bo_table = '$bo_table' ");
}
제가 의도한 코드입니다.
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
sql_query(" update $g4[board_table] set bo_notice = '$bo_notice' where bo_table = '$bo_table' ");
}
제가 의도한 코드입니다.
bo_notice='true'는 잘못된 것입니다. 이리저리 소스를 뒤져보다가 보니
리스트에서 공지값이 있으면이라는 구문이... if ($list[$i][is_notice] = true) ..이런식으로 되어있더군요.
공지체크값의 경우, if구문이 있어야 하는거 같아서 잘못사용하긴 했지만..써도 되는지 그건 잘 모르겠네요.
그나저나 이거또 테스트 소스가 뒤엉키기 시작해서...뭘 지금 잘못 건드렸는지 에러가 속출.... -_-;;
복구해서 위 주신 글을 한번 테스트 해보도록 하겠습니다. 감사합니다..
리스트에서 공지값이 있으면이라는 구문이... if ($list[$i][is_notice] = true) ..이런식으로 되어있더군요.
공지체크값의 경우, if구문이 있어야 하는거 같아서 잘못사용하긴 했지만..써도 되는지 그건 잘 모르겠네요.
그나저나 이거또 테스트 소스가 뒤엉키기 시작해서...뭘 지금 잘못 건드렸는지 에러가 속출.... -_-;;
복구해서 위 주신 글을 한번 테스트 해보도록 하겠습니다. 감사합니다..
공지구문 줄여봤는데요 테스트는 확실하지 않아서 확신은 못하겠네요...
(이론상으론 맞지만요...)
그런데 위에서 if($bo_notice = 'true')과 if($bo_notice = 'true')에 같은 변수를 사용한 이유는 뭔지 잘 모르겠네요
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
정규식으로 $wr_id만 제거합니다.
$notice_array = explode("\n", trim($board['bo_notice']));
if($bo_notice = 'true') {
for ($i=0; $i<count($notice_array); $i++)
if ((int)$wr_id != (int)$notice_array[$i])
$bo_notice .= $notice_array[$i] . '\n';
$bo_notice = trim($bo_notice); 를
if($bo_notice = 'true') {
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
이렇게 바꾸면 되겠네요
(이론상으론 맞지만요...)
그런데 위에서 if($bo_notice = 'true')과 if($bo_notice = 'true')에 같은 변수를 사용한 이유는 뭔지 잘 모르겠네요
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
정규식으로 $wr_id만 제거합니다.
$notice_array = explode("\n", trim($board['bo_notice']));
if($bo_notice = 'true') {
for ($i=0; $i<count($notice_array); $i++)
if ((int)$wr_id != (int)$notice_array[$i])
$bo_notice .= $notice_array[$i] . '\n';
$bo_notice = trim($bo_notice); 를
if($bo_notice = 'true') {
$bo_notice = preg_replace("/\b$wr_id\n\b/", '', $board[bo_notice]);
이렇게 바꾸면 되겠네요
안그래도 전에 보내주신 위팁을 write_update.skin.php에 적용해서 사용을 잘하고 있고..
이전 리플에 있는것을 확인했습니다..
오늘 한시간째 위 리플을 계속 보고 있었는데...그럼 아래처럼 하면 될까요?
//--------- 지정된 시간이 지나면 옵션게시물 전환 ----------------------
$day_chk = "3"; // 옵션적용 기간 날짜(일수 or 분)
$cnd_chk = " wr_1 <> '3' "; // 쿼리 추가 조건 설정 (기본적으로 3인경우는 찾지않음)
$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now() ";
sql_query($sql_chk);
$notice_array = explode("\n", trim($board['bo_notice']));
if($bo_notice = 'true') {
for ($i=0; $i<count($notice_array); $i++)
if ((int)$wr_id != (int)$notice_array[$i])
$bo_notice .= $notice_array[$i] . '\n';
$bo_notice = trim($bo_notice);
sql_query(" update {$g4['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}' and $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now()");
}
//--------- 지정된 시간이 지나면 옵션게시물 전환 끝 ----------------------
where 문뒤에 and 값을 사용할수 있다면 그냥 이렇게 적어도 될거같기는 하다는 생각이 들어서..
나도 모르게 ...그만~~ :)
p.s; 맞는지 모르겠지만...추가로..공지관련 위 구문을 어떻게 좀 줄일수 없을런지요...이건 아무리 생각해도 안되는군요
이전 리플에 있는것을 확인했습니다..
오늘 한시간째 위 리플을 계속 보고 있었는데...그럼 아래처럼 하면 될까요?
//--------- 지정된 시간이 지나면 옵션게시물 전환 ----------------------
$day_chk = "3"; // 옵션적용 기간 날짜(일수 or 분)
$cnd_chk = " wr_1 <> '3' "; // 쿼리 추가 조건 설정 (기본적으로 3인경우는 찾지않음)
$sql_chk = " update $write_table set wr_1='3' where $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now() ";
sql_query($sql_chk);
$notice_array = explode("\n", trim($board['bo_notice']));
if($bo_notice = 'true') {
for ($i=0; $i<count($notice_array); $i++)
if ((int)$wr_id != (int)$notice_array[$i])
$bo_notice .= $notice_array[$i] . '\n';
$bo_notice = trim($bo_notice);
sql_query(" update {$g4['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}' and $cnd_chk and date_add(wr_datetime, INTERVAL '$day_chk' DAY) < now()");
}
//--------- 지정된 시간이 지나면 옵션게시물 전환 끝 ----------------------
where 문뒤에 and 값을 사용할수 있다면 그냥 이렇게 적어도 될거같기는 하다는 생각이 들어서..
나도 모르게 ...그만~~ :)
p.s; 맞는지 모르겠지만...추가로..공지관련 위 구문을 어떻게 좀 줄일수 없을런지요...이건 아무리 생각해도 안되는군요
해당 공지값을 삭제하려면 그누에서 사용하는 방법으로
$notice_array = explode("\n", trim($board['bo_notice'])); // 공지사항의 wr_id를 배열로 저장합니다.
$bo_notice = ''; // 초기화
for ($i=0; $i<count($notice_array); $i++) // 배열전체를 돌립니다.
if ((int)$wr_id != (int)$notice_array[$i]) // 배열에서 현재 글을 제외한 값을
$bo_notice .= $notice_array[$i] . '\n'; // 문자열로 만듭니다. wr_id + \n
$bo_notice = trim($bo_notice); // 공백을 제거합니다.
sql_query(" update {$g4['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}' ");
// 수정된 공지사항 내용을 저장합니다.
이 코드를 응용하세요...
$notice_array = explode("\n", trim($board['bo_notice'])); // 공지사항의 wr_id를 배열로 저장합니다.
$bo_notice = ''; // 초기화
for ($i=0; $i<count($notice_array); $i++) // 배열전체를 돌립니다.
if ((int)$wr_id != (int)$notice_array[$i]) // 배열에서 현재 글을 제외한 값을
$bo_notice .= $notice_array[$i] . '\n'; // 문자열로 만듭니다. wr_id + \n
$bo_notice = trim($bo_notice); // 공백을 제거합니다.
sql_query(" update {$g4['board_table']} set bo_notice = '{$bo_notice}' where bo_table = '{$bo_table}' ");
// 수정된 공지사항 내용을 저장합니다.
이 코드를 응용하세요...