웹마스터 팁
로그인 정보 폼에 읽지 않은 쪽지 개수 보이기.
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 14:08
위젯으로 따로 만들면 좋을거 같네요 -
무얼까
2011.07.24 17:00
음. 이미 있는 위젯에 코드 몇 줄 추가한 거라 굳이 위젯을 따로 만들 필요는 없을 것 같아요.;; 그리고, 위젯 만들려면 머리 아파요. ^^; -
웹 엔진
2011.08.05 20:54
아주 잘 되네요.
↑독도 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개 이상일 경우에만 나타납니다.
-
CMD
2011.09.29 06:28
좋은 팁 감사드립니다^^
-
sound4u
2011.09.29 06:30
저도 감사합니다. 좋은 댓글은 항상 사람을 즐겁게 하지요. ^^
-
한마음^^
2012.01.22 09:47
이 팁이 새로 바뀐 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만 삭제해도 될 것 같기는 한데 정확하지는 않습니다;;
제목 | 글쓴이 | 날짜 |
---|---|---|
제로보드XE 1.4 -> 1.5 초간단 업그레이드 [10] | 행복돌이 | 2012.05.15 |
소셜로그인 이메일 입력시 SSL 사용 | 패시브 | 2012.07.27 |
로그인 정보 폼에 읽지 않은 쪽지 개수 보이기. [21] | 무얼까 | 2011.07.23 |
관리자의 회원포인트목록 에서 ID/닉네임 등으로 검색하는 소스 추가 [3] | sejin7940 | 2012.06.25 |
socialxe 페이스북에서 SSL timeout 해결법 및 자체 서버사용시 500 문제해결 [1] | spi-ca | 2012.05.16 |
관리자 글 등록시 비번 입력하게 만들기 [5] | 우진♡아빠 | 2010.04.28 |
Xe 1.5.1로 사이트 꾸미기 part 1 [25] | 황비 | 2011.12.04 |
조회수 클릭때마다 올라가기(1.4.5.7 버전에서 되네요) [2] | 아네모네 | 2011.06.20 |
phpmyadmin 로그인시 아래와 같은 에러나올경우 해결방법 [1] | 때린데 또때려 | 2012.03.12 |
XE 도쿠위키 세션으로 연동 [5] | 도라란 | 2011.11.17 |
Xe 1.5.0.9 사용자 설치메뉴얼 제2부 [22] | 황비 | 2011.11.22 |
일반 페이지에 로그인(세션) 정보 활용하기 [13] | noirzo | 2008.11.07 |
외부페이지 로그인 연동 [10] | 응삼 | 2011.02.28 |
여러도메인으로 접속시 무조건 하나의 도메인으로 이동시키기 | squarehacker | 2012.02.02 |
XE 1.5.1 업그레이드시 조심해야 [1] | 소걸음 | 2011.12.23 |
제로보드4에서 XE로 넘어와 헤메는 분들을 위해서(1편)-Xe개념이해와 설치 [16] | 황비 | 2010.03.18 |
무분별한 스팸글 등록으로부터 임시해결 팁 [15] | 라르게덴 | 2010.08.12 |
1.5 에서 기존 로그인 스킨 이메일 로그인 구동시키기 [1] | 쿨키드 | 2011.11.01 |
다운로드 필요 포인트가 0 인 모듈에서의 비회원 다운로드 권한 부여 [2] | 키네시스 | 2011.02.09 |
비회원도 추천가능하게 하기 (1.5기준설명) [3] | 빽짱구 | 2011.11.18 |