모바일홈 사이드뷰 수정하는데 수정된 내용이 적용이 안되요 도와주세요
본문
진서기님의 g4m 모바일 사용중입니다.
사이드뷰에서 아이디로 검색만 나오게 하고 싶어 js/sideview.js 를 수정하는데
피씨에서는 제대로 수정이 되었으나 모바일 홈에서는 수정된 내용이 적용이 안되네요(아이디로 검색 외에 다른 '전체 검색' '쪽지 보내기' 등이 나옵니다.)
어느부분을 더 삭제해야하는지 봐주세요(빨간색 부분이 제가 삭제한 부분)
m/js/sideview.js 에서
if (typeof(SIDEVIEW_JS) == 'undefined') // 한번만 실행
{
if (typeof g4_is_member == 'undefined')
alert('g4_is_member 변수가 선언되지 않았습니다. js/sideview.js');
if (typeof g4_path == 'undefined')
alert('g4_path 변수가 선언되지 않았습니다. js/sideview.js');
if (typeof g4m_path == 'undefined')
alert('g4m_path 변수가 선언되지 않았습니다. js/sideview.js');
var SIDEVIEW_JS = true;
// 아래의 소스코드는 daum.net 카페의 자바스크립트를 참고하였습니다.
// 회원이름 클릭시 회원정보등을 보여주는 레이어
function insertHead(name, text, evt){
var idx = this.heads.length;
var row = new SideViewRow(-idx, name, text, evt);
this.heads[idx] = row;
return row;
}
function insertTail(name, evt) {
var idx = this.tails.length;
var row = new SideViewRow(idx, name, evt);
this.tails[idx] = row;
return row;
}
function SideViewRow(idx, name, onclickEvent) {
this.idx = idx;
this.name = name;
this.onclickEvent = onclickEvent;
this.renderRow = renderRow;
this.isVisible = true;
this.isDim = false;
}
function renderRow() {
if (!this.isVisible)
return "";
var str = "<tr><td id='sideViewRow_"+this.name+"'>"+this.onclickEvent+"</td></tr>";
return str;
}
function showSideView(curObj, mb_id, name, email, homepage) {
var sideView = new SideView('nameContextMenu', curObj, mb_id, name, email, homepage);
sideView.showLayer();
}
function SideView(targetObj, curObj, mb_id, name, email, homepage) {
this.targetObj = targetObj;
this.curObj = curObj;
this.mb_id = mb_id;
name = name.replace(/…/g,"");
this.name = name;
this.email = email;
this.homepage = homepage;
this.showLayer = showLayer;
this.makeNameContextMenus = makeNameContextMenus;
this.heads = new Array();
this.insertHead = insertHead;
this.tails = new Array();
this.insertTail = insertTail;
this.getRow = getRow;
this.hideRow = hideRow;
this.dimRow = dimRow;
// 회원이라면 // (비회원의 경우 검색 없음)
//if (g4_is_member) {
// 쪽지보내기 // 불여우 자바스크립트창이 뜨는 오류를 수정
if (mb_id)
this.insertTail("memo", "<a href=\""+g4m_path+"/" + g4m_bbs + "/memo_form.php?me_recv_mb_id="+mb_id+"\">쪽지보내기</a>");
// 메일보내기
if (email)
this.insertTail("mail", "<a href=\"javascript:;\" onclick=\"m_formmail('"+mb_id+"','"+name+"','"+email+"');\">메일보내기</a>");
// 홈페이지
if (homepage)
this.insertTail("homepage", "<a href=\"javascript:;\" onclick=\"window.open('"+homepage+"');\">홈페이지</a>");
// 자기소개
if (mb_id)
this.insertTail("info", "<a href=\"javascript:;\" onclick=\"win_profile('"+mb_id+"');\">자기소개</a>");
//}
// 게시판테이블 아이디가 넘어왔을 경우
if (g4_bo_table) {
if (mb_id) // 회원일 경우 아이디로 검색
this.insertTail("mb_id", "<a href='"+g4m_path+"/" + g4m_bbs + "/board.php?bo_table="+g4_bo_table+"&sca="+g4_sca+"&sfl=mb_id,1&stx="+mb_id+"'>아이디로 검색</a>");
else // 비회원일 경우 이름으로 검색
this.insertTail("name", "<a href='"+g4m_path+"/" + g4m_bbs + "/board.php?bo_table="+g4_bo_table+"&sca="+g4_sca+"&sfl=wr_name,1&stx="+name+"'>이름으로 검색</a>");
}
if (mb_id)
this.insertTail("new", "<a href='"+g4m_path + "/" + g4m_bbs + "/new.php?mb_id="+mb_id+"'>전체게시물</a>");
/*
// 최고관리자일 경우
if (g4_is_admin == "super") {
// 회원정보변경
if (mb_id)
this.insertTail("modify", "<a href='"+g4_path+"/" + g4_admin + "/member_form.php?w=u&mb_id="+mb_id+"' target='_blank'>회원정보변경</a>");
// 포인트내역
if (mb_id)
this.insertTail("point", "<a href='"+g4_path+"/" + g4_admin + "/point_list.php?sfl=mb_id&stx="+mb_id+"' target='_blank'>포인트내역</a>");
}
*/
}
function showLayer() {
clickAreaCheck = true;
var oSideViewLayer = document.getElementById(this.targetObj);
var oBody = document.body;
if (oSideViewLayer == null) {
oSideViewLayer = document.createElement("DIV");
oSideViewLayer.id = this.targetObj;
oSideViewLayer.style.position = 'absolute';
oBody.appendChild(oSideViewLayer);
}
oSideViewLayer.innerHTML = this.makeNameContextMenus();
if (getAbsoluteTop(this.curObj) + this.curObj.offsetHeight + oSideViewLayer.scrollHeight + 5 > oBody.scrollHeight)
oSideViewLayer.style.top = getAbsoluteTop(this.curObj) - oSideViewLayer.scrollHeight;
else
oSideViewLayer.style.top = getAbsoluteTop(this.curObj) + this.curObj.offsetHeight + 'px';
oSideViewLayer.style.left = getAbsoluteLeft(this.curObj) - this.curObj.offsetWidth + 14 + 'px';
divDisplay(this.targetObj, 'block');
selectBoxHidden(this.targetObj);
}
function getAbsoluteTop(oNode){
var oCurrentNode=oNode;
var iTop=0;
while(oCurrentNode.tagName!="BODY") {
iTop+=oCurrentNode.offsetTop - oCurrentNode.scrollTop;
oCurrentNode=oCurrentNode.offsetParent;
}
return iTop;
}
function getAbsoluteLeft(oNode){
var oCurrentNode=oNode;
var iLeft=0;
iLeft+=oCurrentNode.offsetWidth;
while(oCurrentNode.tagName!="BODY") {
iLeft+=oCurrentNode.offsetLeft;
oCurrentNode=oCurrentNode.offsetParent;
}
return iLeft;
}
function makeNameContextMenus() {
var str = "<table border='0' cellpadding='0' cellspacing='0' width='120' style='border:1px solid #E0E0E0;' bgcolor='#F9FBFB'>";
var i=0;
for (i=this.heads.length - 1; i >= 0; i--)
str += this.heads[i].renderRow();
var j=0;
for (j=0; j < this.tails.length; j++)
str += this.tails[j].renderRow();
str += "</table>";
return str;
}
function getRow(name) {
var i = 0;
var row = null;
for (i=0; i<this.heads.length; ++i)
{
row = this.heads[i];
if (row.name == name) return row;
}
for (i=0; i<this.tails.length; ++i)
{
row = this.tails[i];
if (row.name == name) return row;
}
return row;
}
function hideRow(name){
var row = this.getRow(name);
if (row != null)
row.isVisible = false;
}
function dimRow(name) {
var row = this.getRow(name);
if (row != null)
row.isDim = true;
}
// Internet Explorer에서 셀렉트박스와 레이어가 겹칠시 레이어가 셀렉트 박스 뒤로 숨는 현상을 해결하는 함수
// 레이어가 셀렉트 박스를 침범하면 셀렉트 박스를 hidden 시킴
// <div id=LayerID style="display:none; position:absolute;" onpropertychange="selectBoxHidden('LayerID')">
function selectBoxHidden(layer_id) {
//var ly = eval(layer_id);
var ly = document.getElementById(layer_id);
// 레이어 좌표
var ly_left = ly.offsetLeft;
var ly_top = ly.offsetTop;
var ly_right = ly.offsetLeft + ly.offsetWidth;
var ly_bottom = ly.offsetTop + ly.offsetHeight;
// 셀렉트박스의 좌표
var el;
for (i=0; i<document.forms.length; i++) {
for (k=0; k<document.forms[i].length; k++) {
el = document.forms[i].elements[k];
if (el.type == "select-one") {
var el_left = el_top = 0;
var obj = el;
if (obj.offsetParent) {
while (obj.offsetParent) {
el_left += obj.offsetLeft;
el_top += obj.offsetTop;
obj = obj.offsetParent;
}
}
el_left += el.clientLeft;
el_top += el.clientTop;
el_right = el_left + el.clientWidth;
el_bottom = el_top + el.clientHeight;
// 좌표를 따져 레이어가 셀렉트 박스를 침범했으면 셀렉트 박스를 hidden 시킴
if ( (el_left >= ly_left && el_top >= ly_top && el_left <= ly_right && el_top <= ly_bottom) ||
(el_right >= ly_left && el_right <= ly_right && el_top >= ly_top && el_top <= ly_bottom) ||
(el_left >= ly_left && el_bottom >= ly_top && el_right <= ly_right && el_bottom <= ly_bottom) ||
(el_left >= ly_left && el_left <= ly_right && el_bottom >= ly_top && el_bottom <= ly_bottom) ||
(el_top <= ly_bottom && el_left <= ly_left && el_right >= ly_right)
)
el.style.visibility = 'hidden';
}
}
}
}
// 감추어진 셀렉트 박스를 모두 보이게 함
function selectBoxVisible() {
for (i=0; i<document.forms.length; i++) {
for (k=0; k<document.forms[i].length; k++) {
el = document.forms[i].elements[k];
if (el.type == "select-one" && el.style.visibility == 'hidden')
el.style.visibility = 'visible';
}
}
}
function divDisplay(id, act) {
selectBoxVisible();
document.getElementById(id).style.display = act;
}
function hideSideView() {
if (document.getElementById("nameContextMenu"))
divDisplay ("nameContextMenu", 'none');
}
var clickAreaCheck = false;
document.onclick = function() {
if (!clickAreaCheck)
hideSideView();
else
clickAreaCheck = false;
}
}
답변 1
sideview가 아마 lib 파일에도 설정 되있을겁니다.
모바일빌더의 lib파일 이름은 잘모르겠지만... lib 폴더안에 xxx.lib 이런식으로 되있는 파일중에 "쪽지보내기"이걸로 검색하시면 걸리는 파일이 하나있을겁니다. 아마 거기서도 처리를 해주셔야 할꺼에요.