웹마스터 팁
로그인 정보 폼에 읽지 않은 쪽지 개수 보이기.
2011.07.23 14:53
XE - 읽지 않은 쪽지 개수 보이기.
예전에 이와 비슷한 신규 쪽지 개수 보이기 팁이 올라 왔습니다. 전 신규 쪽지 개수가 아니라 아직 읽지 않은 쪽지 개수를 표시하고 싶어 기능을 구현하고 작으나마 다른 분께 도움이 될까 하여 이렇게 올립니다.
XE는 신규 쪽지가 오면 플래그 파일로 임시 저장하고, 읽을꺼냐?? 물어 본 후 Yes건 No건 선택하면 플래그 파일을 지워 버립니다. 곧, XE는 신규 쪽지에 대해 처음에 딱 한 번 알리고 말 뿐입니다.
DB에는 신규인지 아닌지 저장되지 않죠.
거기다 쪽지를 보내면 DB에는 두 개의 레코드가 생깁니다. 하나는 받은 쪽지고 하나는 보낸 쪽지죠. 이것 때문에 readed 필드가 'N'인지만 비교해서는 정확한 값을 알 수 없습니다.
정확히 알려면 받는 사람(receiver_srl)과 받은 쪽지인지(message_type)와 읽었냐(readed) 세 개를 비교해야 합니다.
하지만, communication module의 쪽지에서 쿼리를 뒤져 봐도 제가 원하는 기능을 하는 쿼리가 없었습니다. 그래서, XE를 최대한 건들지 않는게 목적이라 지금 쓰는 선우 로그인 폼에 이 기능을 추가하기로 했습니다.
※ 선우 로그인 위젯 추가한 파일 : \xe\widgets\login_sunoo\queries\getUnreadMessages.xml 수정한 파일 : \xe\widgets\login_sunoo\skins\sunoo_loginbox\sunoo_login_info.html |
1. getUnreadMessages.xml 추가
\xe\widgets\login_sunoo 디렉토리 아래에 'queries' 디렉토리를 만듭니다.
다른 로그인 위젯을 쓰시는 분은 login_sunoo 대신에 쓰고 있는 위젯 디렉토리 아래에 만들면 됩니다.
그 다음 아래 코드를 작성해서 'queries' 디렉토리에 'getUnreadMessages.xml' 로 저장합니다.(파일 인코딩: ANSI)
'receiver_srl' : 받는 사람 member_srl
'message_type' : 쪽지 종류. 'R'은 받은 쪽지, 'S'는 보낸 쪽지, 'T'는 보관한 쪽지
'reaede' : 읽기 상태. 'Y'는 읽음. 'N'은 읽지 않음.
2. sunoo_login_info.html 수정
\xe\widgets\login_sunoo\skins\sunoo_loginbox\sunoo_login_info.html 파일을 열어 아래와 같이 수정합니다.
빨간색 부분을 쓰고 있는 로그인 위젯 폴더명으로 수정해야 합니다.
43 line 추가 : {@ $m_args->receiver_srl = $logged_info->member_srl; $m_output = executeQuery('widgets.login_sunoo.getUnreadMessages', $m_args); }
67 line 추가 : <font color="#ff0000">[{$m_output->data->count}]</font>
쓰고 있는 로그인 폼 스킨 파일에서 적당히 비슷한 곳 찾아 취향에 맞게 고치면 됩니다.
Code Highlighter가 작동을 안하네요. -_-; 그래서 걍 이미지로 넣었습니다;;
queries.zip--------------------------
댓글 21
-
독도2005
2011.07.24 08:53
흐음?? 적용이 전혀 안되는데요?? -
무얼까
2011.07.24 12:43
입력하신 코드를 보여 주시면 좋을 것 같아요. ^^ -
독도2005
2011.08.04 18:49
<!--%import("css/default.css")-->
<!--%import("./filter/logout.xml")--><fieldset id="login" class="login_{$colorset}">
<legend>{$lang->cmd_login}</legend>
<form action="" method="post"><div class="userName">
<div class="fl"><div class="member_{$logged_info->member_srl}"><strong>{$logged_info->nick_name}</strong></div></div>
<div class="fr"><a href="{getUrl('act','dispMemberLogout')}"><img src="./images/{$colorset}/buttonLogout.gif" alt="{$lang->cmd_logout}" title="{$lang->cmd_logout}" width="47" height="18" /></a></div>
</div>
{@ $oPointModel = &getModel('point'); $point = $oPointModel->getPoint($logged_info->member_srl); $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); $level = $oPointModel->getLevel($point, $config->level_step); }
{@ $m_args->receiver_srl = $logged_info->member_srl; $m_output = executeQuery('widgets.login_info.getUnreadMessages', $m_args); }<div class="levelpoint">
<div style="margin:6px; text-align:left">
Lv : <b>{$level}</b> Nio: <b>{number_format($point)} </b>
<is_admin=="Y'>!--@if($logged_info->is_admin=="Y")-->
<a href="{getUrl('','module','admin')}" target="_blank">[{$lang->cmd_management}]</a>
<!--@end-->
<br />미확인 쪽지 : <b>{$m_output->data->count}</b>
</div>
<div style="margin:10px 6px; font-weight:bold; color:#6699FF; text-align:left; letter-spacing:-1px">
<group_list">!--@foreach($logged_info->group_list as $key => $val)-->
<span>{$val}</span>
<!--@end-->
</div>
</div>
<!--if($logged_info->profile_image->src)
<div class="levelpoint"><img src="{$logged_info->profile_image->src}" width="160px" height="120px" border="0" alt="profile_image" style="border:1px solid red; margin-bottom:8px; border-style:solid; border-color:#cccccc; cursor:pointer" onclick="location.href='+ '?mid=index&act=dispMemberModifyInfo'"/></div>
<div class="levelpoint">
<div style="width:160px; height:120px; border:1px solid #cccccc; margin:0 auto; cursor:pointer"><img src="./images/noimg.gif" onclick="location.href='/?mid=index&act=dispMemberModifyInfo'"/></div>
</div>
end-->
<ul class="userMenu">
<menu_list">!--@foreach($logged_info->menu_list as $key => $val)-->
<li><a href="{getUrl('act',$key,'member_srl','')}" title="{Context::getLang($val)}">{str_replace(" ","", Context::getLang($val))}</a></li>
<!--@end-->
</ul>
<!--p class="latestLogin">{$lang->last_login} <span>{zDate($logged_info->last_login, "Y-m-d H:i")}</span></p-->
</form>
</fieldset> -
무얼까
2011.08.05 10:58
위 소스가 지금 쓰고 있는게 맞나요?? XE 템플릿 문법이 틀린 곳이 있어요.
예를 들어, <is_admin="Y">!--@if($logged_info->is_admin=="Y")--> 같은 곳.
그리고, 그룹 정보 보여주는 곳에서 {$val}이 잘못 됐어요. {Context::getLang($val)} 이라고 쓰셔야 합니다.
아래는 주석처리하신 곳 정리하고, 템플릿 문법 수정한 코드에요.
-----------------------------------------
<!--%import("css/default.css")-->
<!--%import("./filter/logout.xml")-->
<fieldset id="login" class="login_{$colorset}">
<legend>{$lang->cmd_login}</legend>
<form action="" method="post">
<div class="userName">
<div class="fl"><div class="member_{$logged_info->member_srl}"><strong>{$logged_info->nick_name}</strong></div></div>
<div class="fr"><a href="{getUrl('act','dispMemberLogout')}"><img src="./images/{$colorset}/buttonLogout.gif" alt="{$lang->cmd_logout}" title="{$lang->cmd_logout}" width="47" height="18" /></a></div>
</div>
{@ $oPointModel = &getModel('point'); $point = $oPointModel->getPoint($logged_info->member_srl); $oModuleModel = &getModel('module'); $config = $oModuleModel->getModuleConfig('point'); $level = $oPointModel->getLevel($point, $config->level_step); }
{@ $m_args->receiver_srl = $logged_info->member_srl; $m_output = executeQuery('widgets.login_info.getUnreadMessages', $m_args); }
<div class="levelpoint">
<div style="margin:6px; text-align:left">
Lv : <b>{$level}</b> Nio: <b>{number_format($point)}</b>
<!--@if($logged_info->is_admin=="Y")-->
<a href="{getUrl('+ '','module','admin')}" target="_blank">[{$lang->cmd_management}]</a>
<!--@end-->
<br />미확인 쪽지 : <b>{$m_output->data->count}</b>
</div>
<div style="margin:10px 6px; font-weight:bold; color:#6699FF; text-align:left; letter-spacing:-1px">
<!--@foreach($logged_info->group_list as $key => $val)-->
<span>{Context::getLang($val)}</span>
<!--@end-->
</div>
</div>
<ul class="userMenu">
<!--@foreach($logged_info->menu_list as $key => $val)-->
<li><a href="{getUrl('act',$key,'member_srl'+ ','')}" title="{Context::getLang($val)}">{str_replace(" ","", Context::getLang($val))}</a></li>
<!--@end-->
</ul>
</form>
</fieldset>
------------------------------------------- -
독도2005
2011.08.05 13:33
그래도 여전히 안되요.. ㅠㅠ -
무얼까
2011.08.05 13:48
-
위젯으로 따로 만들면 좋을거 같네요
-
무얼까
2011.07.24 17:00
음. 이미 있는 위젯에 코드 몇 줄 추가한 거라 굳이 위젯을 따로 만들 필요는 없을 것 같아요.;; 그리고, 위젯 만들려면 머리 아파요. ^^; -
아주 잘 되네요.
↑독도 2005 님 따라하기?.. ㅋㅋ -
찐빵
2011.08.07 23:48
아주 잘되네요~~ 감사합니다!! -
카이네드
2011.09.06 21:48
기본 로그인 위젯(login_info) 쓰는 분들은
widgets/login_info 위치에 queries 폴더와 파일을 넣어주시고
login_info.html 에
{@ $m_args->receiver_srl = $logged_info->member_srl; $m_output = executeQuery('widgets.login_info.getUnreadMessages', $m_args); }
<!--@foreach($logged_info->menu_list as $key => $val)-->
<li><a href="{getUrl('act',$key,'member_srl','')}" title="{Context::getLang($val)}">{Context::getLang($val)}</a>
<!--@if($key == 'dispCommunicationMessages')-->
<font color="#ff0000">[{$m_output->data->count}]</font>
<!--@end--> </li>
<!--@end--> 이렇게 넣어주시면 되겠습니다. -
sound4u
2011.09.29 01:24
잘 작동하네요. 좋은 팁 감사합니다.
더블어 아주 간단한 추가 팁입니다. 만약에 쪽지를 모두읽어서 쪽지수가 0 일경우 0 이라는 숫자를 보이지 않게 하려면
<font color="#ff0000">[{$m_output->data->count}]</font> 이 라인을
<!--@if($m_output->data->count != 0)-->
<font color="#ff0000">[{$m_output->data->count}</div>]</font>
<!--@end-->라고 바꿔주시면 쪽지수가 0개 이상일 경우에만 나타납니다.
-
좋은 팁 감사드립니다^^
-
sound4u
2011.09.29 06:30
저도 감사합니다. 좋은 댓글은 항상 사람을 즐겁게 하지요. ^^
-
이 팁이 새로 바뀐 1.5 버전에도 적용이 되나요???
xe_gobalTwo 로그인 폼으로 아무리 해도 안되네요....T.T누가 도와주실 수 있는 분 계신가요~~~~
-
자야2
2012.02.08 12:16
방금 해봤습니다.새로운 버전...잘 됩니다.
-
자야2
2012.02.08 12:16
1.5.1.6버전으로 업데이트 한뒤 적용해보았습니다.
너무너무 잘됩니다.
다른 스킨 쓰고 있구요~경로만 잘 지정하면 아주 잘되는군요.
오전내내 고민하던 부분이었는데..말끔히 해결되었어요.감사합니다.
-
송동우
2012.02.08 12:25
기본 위젯에서 사용법
-
flowerrain
2012.02.09 10:35
필요했던 팁인데...감사합니다. 특히 위에 SOUND4 님의 팁도 감사드립니다.
근데 소스에 오타가 있는 듯...
data->count != 0)--">!--@if($m_output->data->count != 0)--
<font color="#ff0000">[{$m_output->data->count}</div>]</font>
<!--@end-->
여기에서 </div>를 빼주셔야 될 듯... 좋은 팁들 모든 분들께 감사드립니다. -
KTK
2012.07.19 15:50
이거 전체 메시지는 어떻게해야 나오나요.. 지금은 읽지 않은 메시지만 출력 되는데..
-
seongjoon.kwon
2012.07.24 12:37
테스트를 해본건 아니라 정확한 답변을 드리기는 힘들 것 같지만,
getUnreadMessages.xml에서 밑에서 3번째 줄인 column="readed"가 포함된 줄을 삭제하면 전체 메시지 수가 출력될 듯 싶군요.
해당 라인에 default만 삭제해도 될 것 같기는 한데 정확하지는 않습니다;;
제목 | 글쓴이 | 날짜 |
---|---|---|
로그인 정보 폼에 읽지 않은 쪽지 개수 보이기.
[21]
![]() | 무얼까 | 2011.07.23 |
도라란님의 팁에 추가하여 MP3와 동영상 파일도 막고 싶을 경우.. [4] | Canto | 2011.07.23 |
제로보드 XE의 세팅중 ssl사용해제방법 | 준돌이 | 2011.07.26 |
warning: call time pass by reference 에러 해결 방법 [6] | ezi | 2011.07.28 |
모바일과 MP3 화일 JW player 로 재생 하기 꽁수 | 김성곤820 | 2011.07.28 |
모바일 메인에서 쓰는 기능을 삽입할려면 어떻게 해야 할까요?> | 최상순480 | 2011.08.02 |
모듈 개발 틀 쉽게짜기
![]() | Xiso | 2011.08.03 |
비회원이 게시글 추천할수있게하는방법
[4]
![]() | 토끼매니아 | 2011.08.03 |
닉네임이나 이름의 뒷부분을 ** 처리로 숨기고픈 경우 [2] | sejin7940 | 2011.08.06 |
게시글 주소 아주 짧게 줄이기 [11] | 웹 엔진 | 2011.08.07 |
자체 우편번호 검색DB 사용하기 | 우진홈 | 2011.08.11 |
Vimeo, Youtube 자동 썸네일 생성법(TED 추가)
[47]
![]() | 마나풀 | 2011.08.12 |
계시판 확장변수에 대하여 여쭤봅니다. [1] | 마지막드론 | 2011.08.14 |
FTP에서 인코딩 때문에 애 먹으시는 분들?
![]() | 히피♬ | 2011.08.15 |
sejin7940 게시판에 소셜XE 댓글 다는 방법 [소스코드] [5] | Treasurej | 2011.08.16 |
XE 템플릿 구문 정리 [1] | 우진홈 | 2011.08.17 |
내 PC에서 XE 설치하는 방법
[2]
![]() | amd짱좋아 | 2011.08.17 |
nginx Tip 업로드시 [Error Code: HTTP Error, File name: 파일명, Message: 413] 뜰떄 [3] | leave | 2011.08.18 |
홈페이지 접속시 XE를 바로 실행하기 [7] | ezi | 2011.08.20 |
조회수 제한 풀고, 조회수 증가값을 더 크게 하는 소스 [7] | sejin7940 | 2011.08.21 |