웹마스터 팁
글작성및수정, 코멘트작성및 수정을 하면 미리 입력한 메일주소로 메일발송
2008.03.12 15:29
저는 아래 빨간부분만 추가했습니다.
정상적인 방법은 아닌듯 하지만...일단 저는 성공했고..현재까지는 잘 됩니다.
이런식으로 했을때 문제가 발생될 소지가 있거나 좀더 나은 방법 (예를 들어 함수를 만들어 사용하는 방법)이 있다면..한수 가르쳐 주시기 바랍니다.
제가 사용한 방법의 문제는 글주소가 링크가 안된다는 것입니다.
메일은 오지만..그냥 텍스트로 오지..링크는 안 걸리더군요,,
링크부분만 어느분이 수정해주시면 감사히 쓰겠습니다.
<a herf= 태그는 사용해 봤는데..메일에는 저 태그는 빠지고 오더군요..
편집한 파일 \modules\board\board.controller.php
<?php
/**
* @class boardController
* @author zero (zero@nzeo.com)
* @brief board 모듈의 Controller class
**/
class boardController extends board {
/**
* @brief 초기화
**/
function init() {
}
/**
* @brief 문서 입력
**/
function procBoardInsertDocument() {
// 권한 체크
if(!$this->grant->write_document) return new Object(-1, 'msg_not_permitted');
// 글작성시 필요한 변수를 세팅
$obj = Context::getRequestVars();
$obj->module_srl = $this->module_srl;
if($obj->is_notice!='Y'||!$this->grant->manager) $obj->is_notice = 'N';
if(!$obj->title) $obj->title = cut_str(strip_tags($obj->content),20,'...');
// 관리자가 아니라면 게시글 색상/굵기 제거
if(!$this->grant->manager) {
unset($obj->title_color);
unset($obj->title_bold);
}
// document module의 model 객체 생성
$oDocumentModel = &getModel('document');
// document module의 controller 객체 생성
$oDocumentController = &getController('document');
// 이미 존재하는 글인지 체크
$oDocument = $oDocumentModel->getDocument($obj->document_srl, $this->grant->manager);
// 이미 존재하는 경우 수정
if($oDocument->isExists() && $oDocument->document_srl == $obj->document_srl) {
// Modify
$msg_head = "■수정■ ";
$output = $oDocumentController->updateDocument($oDocument, $obj);
$msg_code = 'success_updated';
// 그렇지 않으면 신규 등록
} else {
// Modify
$msg_head = "■등록■ ";
$output = $oDocumentController->insertDocument($obj);
$msg_code = 'success_registed';
$obj->document_srl = $output->get('document_srl');
}
// 오류 발생시 멈춤
if(!$output->toBool()) return $output;
// Modify
$logged_info = Context::get('logged_info');
$msg_url = "http://www.본인도메인.co.kr/?document_srl=".$obj->document_srl;
$oMail = new Mail();
$oMail->setTitle($msg_head.$obj->title);
$oMail->setContent($msg_url."\n".$obj->content);
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
$oMail->setReceiptor("[ 운영자 ]", "받고싶은메일주소");
$oMail->send();
// 결과를 리턴
$this->add('mid', Context::get('mid'));
$this->add('document_srl', $output->get('document_srl'));
// 성공 메세지 등록
$this->setMessage($msg_code);
}
/**
* @brief 문서 삭제
**/
function procBoardDeleteDocument() {
// 문서 번호 확인
$document_srl = Context::get('document_srl');
// 문서 번호가 없다면 오류 발생
if(!$document_srl) return $this->doError('msg_invalid_document');
// document module model 객체 생성
$oDocumentController = &getController('document');
// 삭제 시도
$output = $oDocumentController->deleteDocument($document_srl, $this->grant->manager);
if(!$output->toBool()) return $output;
// 성공 메세지 등록
$this->add('mid', Context::get('mid'));
$this->add('page', $output->get('page'));
$this->setMessage('success_deleted');
}
/**
* @brief 추천
**/
function procBoardVoteDocument() {
// document module controller 객체 생성
$oDocumentController = &getController('document');
$document_srl = Context::get('document_srl');
return $oDocumentController->updateVotedCount($document_srl);
}
/**
* @brief 코멘트 추가
**/
function procBoardInsertComment() {
// 권한 체크
if(!$this->grant->write_comment) return new Object(-1, 'msg_not_permitted');
// 댓글 입력에 필요한 데이터 추출
$obj = Context::gets('document_srl','comment_srl','parent_srl','content','password','nick_name','nick_name','member_srl','email_address','homepage','is_secret','notify_message');
$obj->module_srl = $this->module_srl;
// comment 모듈의 model 객체 생성
$oCommentModel = &getModel('comment');
// comment 모듈의 controller 객체 생성
$oCommentController = &getController('comment');
// comment_srl이 존재하는지 체크
// 만일 comment_srl이 n/a라면 getNextSequence()로 값을 얻어온다.
if(!$obj->comment_srl) {
$obj->comment_srl = getNextSequence();
} else {
$comment = $oCommentModel->getComment($obj->comment_srl, $this->grant->manager);
}
// comment_srl이 없을 경우 신규 입력
if($comment->comment_srl != $obj->comment_srl) {
// parent_srl이 있으면 답변으로
if($obj->parent_srl) {
$parent_comment = $oCommentModel->getComment($obj->parent_srl);
if(!$parent_comment->comment_srl) return new Object(-1, 'msg_invalid_request');
$output = $oCommentController->insertComment($obj);
// Modify
$msg_head = "■댓글답변■ ";
// 없으면 신규
} else {
$output = $oCommentController->insertComment($obj);
// Modify
$msg_head = "■댓글등록■ ";
}
// comment_srl이 있으면 수정으로
} else {
$obj->parent_srl = $comment->parent_srl;
$output = $oCommentController->updateComment($obj, $this->grant->manager);
$comment_srl = $obj->comment_srl;
// Modify
$msg_head = "■댓글수정■ ";
}
if(!$output->toBool()) return $output;
// Modify
$logged_info = Context::get('logged_info');
$msg_url = "http://www.본인도메인.co.kr/?document_srl=".$obj->document_srl;
$oMail = new Mail();
if(!$obj->title) $obj->title = cut_str(strip_tags($obj->content),20,'...');
$oMail->setTitle($msg_head.$obj->title);
$oMail->setContent($msg_url."\n".$obj->content);
$oMail->setSender($logged_info->user_name, $logged_info->email_address);
$oMail->setReceiptor("[ 운영자 ]", "받고싶은메일주소");
$oMail->send();
$this->setMessage('success_registed');
$this->add('mid', Context::get('mid'));
$this->add('document_srl', $obj->document_srl);
$this->add('comment_srl', $obj->comment_srl);
}
/**
* @brief 코멘트 삭제
**/
function procBoardDeleteComment() {
// 댓글 번호 확인
$comment_srl = Context::get('comment_srl');
if(!$comment_srl) return $this->doError('msg_invalid_request');
// comment 모듈의 controller 객체 생성
$oCommentController = &getController('comment');
$output = $oCommentController->deleteComment($comment_srl, $this->grant->manager);
if(!$output->toBool()) return $output;
$this->add('mid', Context::get('mid'));
$this->add('page', Context::get('page'));
$this->add('document_srl', $output->get('document_srl'));
$this->setMessage('success_deleted');
}
/**
* @brief 엮인글 삭제
**/
function procBoardDeleteTrackback() {
$trackback_srl = Context::get('+
'+
'trackback_srl');
// trackback module의 controller 객체 생성
$oTrackbackController = &getController('trackback');
$output = $oTrackbackController->deleteTrackback($trackback_srl, $this->grant->manager);
if(!$output->toBool()) return $output;
$this->add('mid', Context::get('mid'));
$this->add('page', Context::get('page'));
$this->add('document_srl', $output->get('document_srl'));
$this->setMessage('success_deleted');
}
/**
* @brief 문서와 댓글의 비밀번호를 확인
**/
function procBoardVerificationPassword() {
// 비밀번호와 문서 번호를 받음
$password = Context::get('password');
$document_srl = Context::get('document_srl');
$comment_srl = Context::get('comment_srl');
$oMemberModel = &getModel('member');
// comment_srl이 있을 경우 댓글이 대상
if($comment_srl) {
// 문서번호에 해당하는 글이 있는지 확인
$oCommentModel = &getModel('comment');
$oComment = $oCommentModel->getComment($comment_srl);
if(!$oComment->isExists()) return new Object(-1, 'msg_invalid_request');
// 문서의 비밀번호와 입력한 비밀번호의 비교
if(!$oMemberModel->isValidPassword($oComment->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
$oComment->setGrant();
} else {
// 문서번호에 해당하는 글이 있는지 확인
$oDocumentModel = &getModel('document');
$oDocument = $oDocumentModel->getDocument($document_srl);
if(!$oDocument->isExists()) return new Object(-1, 'msg_invalid_request');
// 문서의 비밀번호와 입력한 비밀번호의 비교
if(!$oMemberModel->isValidPassword($oDocument->get('password'),$password)) return new Object(-1, 'msg_invalid_password');
$oDocument->setGrant();
}
}
/**
* @brief 아이디 클릭시 나타나는 팝업메뉴에 "작성글 보기" 메뉴를 추가하는 trigger
**/
function triggerMemberMenu(&$obj) {
$member_srl = Context::get('target_srl');
$mid = Context::get('cur_mid');
if(!$member_srl || !$mid) return new Object();
$logged_info = Context::get('logged_info');
// 호출된 모듈의 정보 구함
$oModuleModel = &getModel('module');
$cur_module_info = $oModuleModel->getModuleInfoByMid($mid);
if($cur_module_info->module != 'board') return new Object();
// 자신의 아이디를 클릭한 경우
if($member_srl == $logged_info->member_srl) $member_info = $logged_info;
else {
$oMemberModel = &getModel('member');
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
}
if(!$member_info->user_id) return new Object();
// 아이디로 검색
$menu_str = Context::getLang('cmd_view_own_document');
$menu_url = sprintf('./?mid=%s&search_target=user_id&search_keyword=%s', $mid, $member_info->user_id);
$obj[] = sprintf('%s,%s,move_url(\'%s\')', Context::getRequestUri().'/modules/member/tpl/images/icon_view_written.gif',$menu_str, $menu_url);
return new Object();
}
}
?>
댓글 18
-
파파민
2008.03.13 19:56
-
채연파파
2008.03.13 23:11
글쎄요..ㅠㅠ 아직 모듈이나 그런거에 대한 개념이 없어서요..ㅠㅠ
-
질문
2008.03.14 12:03
메일 발송은 잘됩니다.
그런데 글작성이나 댓글작성후에 작성된 게시글 화면이 나오질 않고 메인화면으로 빠져 나오네요.
저만 그러는 것인지 궁금하군요. -
채연파파
2008.03.14 12:32
아...저도 그것때문에 한참 애 먹었는데...
결국엔 UTF-8뭐..그런것 때문이더라구요...
즉 원본가지고 ...그냥 편집하면 잘 되는데...변환을 하면 메인페이지로 이동을 하더군요,,
뭐라고 얘기해야 될지 잘 모르네요..여하튼..원본을 편집하실때 ascii UTF-8 이릉거 변환하지 마시고 그냥 해보세요, -
질문
2008.03.14 15:26
답변 주셔서 감사합니다.
답변 주신 내용대로 메모장에서 파일을 편집한뒤에 저장된 파일을 계정에 올린후 테스트를 하였는데도
저는 역시나 게시글,댓글 작성후 메인페이지로 이동을 하는군요.
또한 작성글에 이미지가 포함된 경우에는 메일상에서 엑박으로 뜨더군요.
아무래도 텍스트위주로 된 게시글이 아닌경우에는
사용하기가 조금은 아쉬움이 남는군요.
조금만 더 보완이 될수 있다면 매우 좋을듯 싶습니다. -
채연파파
2008.03.14 17:16
메인 페이지로 이동하는 경우에...정말 답답하던데요..ㅠㅠ
근데....사실..이 부분에 문제가 있을듯 싶습니다.
단순 변환이 제대로 안됐다고...메인 페이지가 나온다는게..저도 잘 이해가 안되더군요...ㅠㅠ
마지막 방법으로 한글 넣지 말고..영문으로만 해보시면 어떨까요???
또 하나...원본 파일을 열고...아무작업도 하지 않고..바로 저장한 뒤에...
글 써보시면...그때는 메인 화면으로 안 가나요????? -
파파민
2008.03.17 18:06
제 경우는 처음에 위 소스를 전부 복사하여 붙여 넣기하니... 맨 처음으로 가더군요.
그래서
필요한 부분만 복사하여 붙여 넣으니 해결 되더군요.
에디터플러스 2.3 사용합니다.
그리고 이미지는 상대경로로 저장 되니 X로 나오는게 당연한 것 같습니다.
채연아빠 덕분에 글 확인한다고 사이트 접속하는 짓(?) 안해도 되니 묵은 체증이 내려간 것같습니다.^^ -
질문
2008.03.18 17:42
게시글 작성시에
외부사이트에 링크되어 있는 이미지의 경우(절대경로확인)를 사용한 경우 에서도
마찬가지로 이미지부분은 엑박(X)으로 나오는걸요?
참고로 gmail로 메일을 수신한 경우입니다. -
파파민
2008.03.18 19:49
전 네이버메일을 아웃룩에서 읽습니다.
링크 그림 2장 1st: 같은 사이트 그림, 2nd: 다른 사이트 그림 둘 다 보입니다.^^ -
채연파파
2008.03.19 08:42
아마도 네이버메일이나 아웃룩에서.. http:// <-- 요걸 인식하는게 아닐까 하는 추측을 해봅니다.
빨랑 고수님들이 도와주심 좋을텐데...ㅜㅜ -
파파민
2008.03.18 20:20
이상(?)한 건 코멘트에서 파일 첨부는 보이는군요!! ^^
정리하면 아웃룩(네이버메일)에서는...:
파일 첨부시 원글 첨부 시는 안보이나 , 댓글에서 첨부 시는 보인다. ^^
위에 제가 한 말 중에 상대경로라 안보인다는 내용은 참이 아닌 것 같군요.
원인은 고수님들에게 패스~~~^^ -
채연파파
2008.03.14 17:17
참...그리고 그림 안 나오는건...저도 어떻게 해야 할지 모르겠네요...
그 부분이..제가 원하는건데...즉...메일내용을 링크 걸수 있는지 궁금합니다. -
mmx900
2008.03.20 10:32
마침 필요한 코드를 만들어 주셨네요.
올려주신 코드를 이용해 애드온 만들어도 괜찮을까요?
(이대로 쓰면 나중에 업데이트 할때 곤란해서요.)
출처는 밝히고 라이선스는 GPL2로 하고 싶습니다.
혹은 직접 만들어주시면 더 좋구요 +_+ -
채연파파
2008.03.21 11:03
만들어 주심 저야 관리하기도 좋고..엄청 편하지요.. ^^;
감사할 따름입니다.. ^^; -
파파민
2008.03.21 12:54
애드온으로 만들 때
메세지 제목에 "게시판아이디 or 게시판 제목" 도 나오게 부탁합니다. ^^ -
채연파파
2008.03.21 11:04
그나저나...쪽지 확인 기능 정말 좋네요..바로 확인가능하니...ㅎㅎㅎㅎ -
문형주298
2008.03.27 19:49
게시물 내용이 안나와요....
-
앙마
2008.08.05 16:57
받고 싶은 메일 주소가 선택적으로 되면 더 좋을것 같은데요..
정식으로 만들어서 제로보드 모듈로 올라가면 좋을것 같습니다 ^^;;
잘 되는군요. 감사드립니다. ^^
메일 제목에 '모듈 이름' 혹은 '브라우저 제목'을 추가 할 수 는 없는지요?
링크는 zbxe 를 추가하니 되는 것 같습니다.
$msg_url = "http://29basecamp.com/zbxe/?document_srl=".$obj->document_srl;