테스트 사이트 - 개발 중인 베타 버전입니다

주고받은 쪽지를 지울때 내 쪽지함에서만 지우기

쪽지기능을 써 보다가 보낸사람이나 받은사람 어느 누구라도 쪽지를 지우면 양쪽에서 다 볼 수 없다는 것을 알고는 대략 난감했었습니다.
하나의 데이타테이블을 쓰더군요.
해서 데이타테이블을 하나 더 만들어서 받은쪽과 보낸쪽을 분리하고 누구든 지운쪽만 지워지고 안지운쪽은 쪽지가 남아있게 해 보았습니다.

혹자는 데이타량이 많아질 수 있다 우려하실지도 모르지만 형편에 따라 사용하시기 바랍니다.

===========================================================
1. 먼저 mysql DB에 접속해서 g4_memolist 라는 테이블을 만들고 필드는 g4_memo와 동일하게 해 주시면 됩니다.

===========================================================
2. 메인폴더의 ./config.php 파일을 열어 중간쯤에

$g4[memo_table] = $g4[table_prefix] . "memo"; // 메모 테이블
밑에 아래 줄을 추가
$g4[memolist_table] = $g4[table_prefix] . "memolist"; // 메모 테이블

==========================================================
3. /bbs/memo.php 파일을 열어 아래 소스로 교체. 원본이 어땟는지 몰라서 다 퍼옵니다.

<?
$g4_path = "..";
include_once ("$g4_path/common.php");

if (!$member[mb_id])
alert_close("회원만 이용하실 수 있습니다.");

$g4[title] = "내 쪽지함";
include_once("$g4[path]/head.sub.php");

// 설정일이 지난 받은메모 삭제
$sql = " delete from $g4[memo_table]
where me_recv_mb_id = '$member[mb_id]'
and me_send_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (86400 * $config[cf_memo_del]))."' ";
sql_query($sql);

// 설정일이 지난 보낸메모 삭제
$sql = " delete from $g4[memolist_table]
where me_recv_mb_id = '$member[mb_id]'
and me_send_datetime < '".date("Y-m-d H:i:s", $g4[server_time] - (86400 * $config[cf_memo_del]))."' ";
sql_query($sql);

if (!$kind) $kind = "recv";

if ($kind == "recv")
$unkind = "send";
else if ($kind == "send")
$unkind = "recv";
else
alert("\$kind 값을 넘겨주세요.");

if ($kind == "recv")
{
$sql = " select count(*) as cnt from $g4[memo_table] where me_{$kind}_mb_id = '$member[mb_id]' ";
$row = sql_fetch($sql);
$total_count = number_format($row[cnt]);

$kind_title = "받은";
$recv_img = "on";
$send_img = "off";

$list = array();

$sql = " select a.*, b.mb_id, b.mb_nick, b.mb_email, b.mb_homepage
from $g4[memo_table] a
left join $g4[member_table] b on (a.me_{$unkind}_mb_id = b.mb_id)
where a.me_{$kind}_mb_id = '$member[mb_id]'
order by me_read_datetime asc, me_send_datetime desc, mb_nick asc ";

$result = sql_query($sql);


}
else
{
$sql = " select count(*) as cnt from $g4[memolist_table] where me_{$kind}_mb_id = '$member[mb_id]' ";
$row = sql_fetch($sql);
$total_count = number_format($row[cnt]);

$kind_title = "보낸";
$recv_img = "off";
$send_img = "on";

$list = array();

$sql = " select a.*, b.mb_id, b.mb_nick, b.mb_email, b.mb_homepage
from $g4[memolist_table] a
left join $g4[member_table] b on (a.me_{$unkind}_mb_id = b.mb_id)
where a.me_{$kind}_mb_id = '$member[mb_id]'
order by me_read_datetime asc, me_send_datetime desc, mb_nick asc ";

$result = sql_query($sql);
}

for ($i=0; $row=sql_fetch_array($result); $i++)
{
$list[$i] = $row;

$mb_id = $row["me_{$unkind}_mb_id"];

if ($row[mb_nick])
$mb_nick = $row[mb_nick];
else
$mb_nick = "<font color=silver>정보없음</font>";

$name = get_sideview($row[mb_id], $row[mb_nick], $row[wr_email], $row[wr_homepage]);

if (substr($row[me_read_datetime],0,1) == '0')
$read_datetime = '아직 읽지 않음';
else
$read_datetime = substr($row[me_read_datetime],2,14);

$send_datetime = substr($row[me_send_datetime],2,14);

$list[$i][name] = $name;
$list[$i][send_datetime] = $send_datetime;
$list[$i][read_datetime] = $read_datetime;
$list[$i][view_href] = "./memo_view.php?me_id=$row[me_id]&kind=$kind";
$list[$i][del_href] = "./memo_delete.php?me_id=$row[me_id]&kind=$kind";
}
?>
<script language="javascript">
// 자바스크립트에서 사용하는 전역변수 선언
var g4_path = "<?=$g4[path]?>";
var g4_bbs = "<?=$g4[bbs]?>";
var g4_bbs_img = "<?=$g4[bbs_img]?>";
var g4_admin = "<?=$g4[admin]?>";
var g4_url = "<?=$g4[url]?>";
var g4_is_member = "<?=$is_member?>";
var g4_is_admin = "<?=$is_admin?>";
var g4_bo_table = "<?=$bo_table?>";
var g4_sca = "<?=$sca?>";
var g4_charset = "<?=$g4[charset]?>";
var g4_is_gecko = navigator.userAgent.toLowerCase().indexOf("gecko") != -1;
var g4_is_ie = navigator.userAgent.toLowerCase().indexOf("msie") != -1;
</script>
<link rel="stylesheet" href="<?=$g4[path]?>/steamstyle.css" type="text/css">

<script language="javascript" src="<?=$g4[path]?>/js/sideview.js"></script>
<script language="javascript" src="<?=$g4[path]?>/js/common.js"></script>


<?
$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
include_once("$member_skin_path/memo.skin.php");

include_once("$g4[path]/tail.sub.php");
?>

==========================================================
4. bbs/memo_view.php 파일을 열어 아래것으로 수정

<?
include_once("./_common.php");

if (!$member[mb_id])
alert("회원만 이용하실 수 있습니다.");

$g4[title] = "쪽지 보기";
include_once("$g4[path]/head.sub.php");

if ($kind == "recv") {
$unkind = "send";

//받은쪽 쪽지 읽은시간 표시
$sql = " update $g4[memo_table]
set me_read_datetime = '$g4[time_ymdhis]'
where me_id = '$me_id'
and me_read_datetime = '0000-00-00 00:00:00' ";
sql_query($sql);

//보낸쪽 쪽지 읽은시간 표시
$sql = " update $g4[memolist_table]
set me_read_datetime = '$g4[time_ymdhis]'
where me_id = '$me_id'
and me_read_datetime = '0000-00-00 00:00:00' ";
sql_query($sql);

//받은쪽지함 리스트
$sql = " select * from $g4[memo_table]
where me_id = '$me_id'
and me_{$kind}_mb_id = '$member[mb_id]' ";
$memo = sql_fetch($sql);
$mb = get_member($memo["me_{$unkind}_mb_id"]);

} else if ($kind == "send") {
$unkind = "recv";

//보낸쪽지함 리스트
$sql = " select * from $g4[memolist_table]
where me_id = '$me_id'
and me_{$kind}_mb_id = '$member[mb_id]' ";
$memo = sql_fetch($sql);
$mb = get_member($memo["me_{$unkind}_mb_id"]);
}
else
alert("\$kind 값을 넘겨주세요.");


$member_skin_path = "$g4[path]/skin/member/$config[cf_member_skin]";
include_once("$member_skin_path/memo_view.skin.php");

include_once("$g4[path]/tail.sub.php");
?>


==========================================================
5. ./bbs/memo_delete_all.php 파일에서

mysql_query("delete from $g4[memo_table] where me_id ='{$tmp_array[$i]}' and (me_recv_mb_id = '$member[mb_id]' or me_send_mb_id = '$member[mb_id]') ");
아래에 다음을 추가

//보낸쪽지삭제
mysql_query("delete from $g4[memolist_table] where me_id ='{$tmp_array[$i]}' and (me_recv_mb_id = '$member[mb_id]' or me_send_mb_id = '$member[mb_id]') ");

===========================================================
6. ./bbs/memo_delete.php 파일을 열어 아래소스로 변경

<?
include_once("./_common.php");

if (!$member[mb_id])
alert("회원만 이용하실 수 있습니다.");

if ($kind == "recv") {
//받은쪽지 삭제
$sql = " delete from $g4[memo_table]
where me_id = '$me_id'
and (me_recv_mb_id = '$member[mb_id]' or me_send_mb_id = '$member[mb_id]') ";
sql_query($sql);
}

if ($kind == "send") {
//보낸쪽지 삭제
$sql = " delete from $g4[memolist_table]
where me_id = '$me_id'
and (me_recv_mb_id = '$member[mb_id]' or me_send_mb_id = '$member[mb_id]') ";
sql_query($sql);
}

goto_url("./memo.php?kind=$kind");
?>


==========================================================
7. ./bbs/memo_form_update.php를 열어

쪽지 INSERT 부분 아래에 다음을 추가

// 보낸쪽지 INSERT
$sql = " insert into $g4[memolist_table]
( me_id, me_recv_mb_id, me_send_mb_id, me_send_datetime, me_memo )
values ( '$me_id', '$mb_list[$i]', '$member[mb_id]', '$g4[time_ymdhis]', '$me_memo' ) ";
sql_query($sql);

==========================================================
이상입니다만...

DB를 추가하는 것은 다른 팁들을 찾아 해 주시기 바라며, 그 질문에는 명확한 답변 드릴 실력이 못됩니다.

또한...

나름대로 테스트를 많이 해보았으나 고수분들의 날카로운 지적이 있으리라 예상되는 바 해결책까지 함께 올려 주시는 자상함을 보여 주시길 기대하오며...

혹시라도 쪽지알림 때문에 문제가 생기신다면..
전 아웃로그인에 쪽지 알림 기능을 넣어 놓은 관계로 명확한 답변을 못 드릴 수 있습니다.
다만 head_sub.php 파일에서

// 쪽지를 받았나?
if ($member[mb_memo_call]) {
$mb = get_member($member[mb_memo_call], "mb_nick");
sql_query(" update {$g4[member_table]} set mb_memo_call = '' where mb_id = '$member[mb_id]' ");
// alert($mb[mb_nick]."님으로부터 새로운 쪽지가 도착하였습니다.", $_SERVER[REQUEST_URI]);
}

alert 부분을 막아 놓았습니다.

혹시 쪽지알림 기능을 저처럼 다른분의 팁을 사용하시는 분들은 alert 부분 이외에는 막지 마시기 바랍니다.

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 4개

아주 유용한 팁이네요.

필요했던 팁중의 하나입니다.

zestar님, 감사드립니다.
저 역시 목진철님의 팁과 스킨에 감사하고 있습니다.
좋은정보 감사합니다.
잘되네요 감사합니다.

게시판 목록

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.
글쓰기
🐛 버그신고