제로보드4는 공식적으로 더 이상 개발되지도 배포되지도 않습니다.
제로보드4를 사용하기 위한 팁보다 제로보드4를 안전하고 무사히 다른 툴로 이전하는 팁들을 게재해주시면 감사하겠습니다.
시간이 오래 지난 만큼 오래된 프로그램은 보안 및 사용성에 있어 문제가 많으니 이해 바랍니다.
글 수 4,549

*원문 페이지: http://youngwhan.com/bbs/zboard.php?id=y_zero&page=1&page_num=20&select_arrange=headnum&desc=&sn=off&ss=on&sc=on&keyword=&no=7&category=1
Introduction
Zeroboard 에서 Firefox 브라우저로 보면, 위의 캡쳐화면과 같이 이름 클릭시에 나타나는 Layer(레이어)가 뜨지 않는다. 이유는 zeroboard 가 W3C 규칙을 제대로 지키고 있지 않는데에 있다. 이를 해결 하기 위해서는 zeroboard의 소스코드의 몇 부분을 건드려 주어야 한다.
다음은 수정되어야 할 코드에 대해서 설명한다.
* 여기서는 zeroboard가 설치된 디렉토리가 bbs라고 가정한다.
1. bbs/script/script_zbLayer.php
-------------------------------------------------------------------
function ZB_layerAction(name,status[T_y_h_yellow],myEvent[/T]) {
[T_y_h_yellow]var obj=document.getElementById(name);[/T]
var _tmpx,_tmpy[T_y_h_yellow], _marginx, _marginy;[/T]
_tmpx = [T_y_h_yellow]myEvent.[/T]clientX + parseInt(obj.offsetWidth);
_tmpy = [T_y_h_yellow]myEvent.[/T]clientY + parseInt(obj.offsetHeight);
_marginx = document.body.clientWidth - _tmpx;
_marginy = document.body.clientHeight - _tmpy;
if(_marginx < 0)
_tmpx = [T_y_h_yellow]myEvent.[/T]clientX + document.body.scrollLeft + _marginx ;
else
_tmpx = [T_y_h_yellow]myEvent.[/T]clientX + document.body.scrollLeft ;
if(_marginy < 0)
_tmpy = [T_y_h_yellow]myEvent.[/T]clientY + document.body.scrollTop + _marginy +20;
else
_tmpy = [T_y_h_yellow]myEvent.[/T]clientY + document.body.scrollTop ;
obj.style[T_y_h_yellow].left=[/T]_tmpx-13;
obj.style[T_y_h_yellow].top=[/T]_tmpy-12;
if(status=='visible') {
if(select_obj) {
select_obj.style.visibility='hidden';
select_obj=null;
}
select_obj=obj;
}else{
select_obj=null;
}
obj.style.visibility=status;
}
--------------------------------------------------------------------
위의 소스중에 노란색으로 Highlight 된 곳과 같이 수정하도록 한다. (원래 소스와 위의 소스중에 다른부분을 노란색으로 Highlight 했다.)
2. bbs/view.php
화일을 열고, "ZB_layerAction" keyword로 찾는다. 다음을 참고하기 바란다.
대략 98행, $prev_name 변수 수정
$prev_name = "<span $show_ip onMousedown="ZB_layerAction('zbLayer$_zbCheckNum','visible'[T_y_h_yellow],event[/T])" style=cursor:pointer>$prev_name</span>";
역시 노란색으로 highlight 처리된 곳을 처리한다.
대략 141행, $next_name 변수 수정
$next_name = "<span $show_ip onMousedown="ZB_layerAction('zbLayer$_zbCheckNum','visible',event)" style=cursor:pointer>$next_name</span>";
대략 290행, $comment_name 변수 수정
$comment_name = "<span $show_ip onMousedown="ZB_layerAction('zbLayer$_zbCheckNum','visible'+ '+ ',event)" style=cursor:pointer>$comment_name</span>";
3. bbs/include/list_check.php
대략 333행, $name 변수 수정
$name = "<span onMousedown="ZB_layerAction('zbLayer$_zbCheckNum','visible', event)" style="cursor:pointer;">$name</span>";
4. bbs/script/script_zbLayer.php
이 화일은 1번에서 수정했던 파일이다. (여기 굳이 다시 쓰는 이유는 1번 수정된것으로 인해 2,3,4번이 바뀌어야 하는 당위성에 있다.)
대략 67행, printHeader 변수 수정
var printHeader = "<d i v id='"+name+"' style='position:absolute; left:10px; top:25px; width:127; height: "+printHeight+"; z-index:1; visibility: hidden' onMousedown=ZB_layerAction('"+name+"','hidden',event)><table border=0><tr><td colspan=3 onMouseover=ZB_layerAction('"+name+"','hidden',event) height=3></td></tr><tr><td width=5 onMouseover=ZB_layerAction('"+name+"','hidden',event) rowspan=2></td><td height=5></td></tr><tr><td><table style=cursor:pointerborder='0'+ ' cellspacing='1' cellpadding='0' bgcolor='black' width=100% height=100%><tr><td valign=top bgcolor=white><table border=0 cellspacing=0 cellpadding=3 width=100% height=100%>";
*여기서 div tag가 먹혀서 한칸씩 띄웠습니다. 바로 위의 소스를 카피하실때, div로 바꿔주시기 바랍니다.
대략 68행, printFooter 변수 수정
var printFooter = "</table></td></tr></table></td><td width=5 rowspan=2 onMouseover=ZB_layerAction('"+name+"','hidden',event)></td></tr><tr><td colspan=3 height=10 onMouseover=ZB_layerAction('"+name+"','hidden',event)></td></tr></table>
Source 설명
1번 파일의 첫번째 highlight된 "document.getElementById(name);" 부분이 ID를 읽어오는 표준이다. zeroboard는 document.all[name] 과 같이 처리했으나, 이는 IE만 알아듣는 것으로 표준이 아니다.
또한 browser에 event object 는 인자를 통해 반드시 전달해 주어야, event 에 관련한 Property를 처리할 수 있다. zeroboard에서는 event.clientX 와 같이 직접 이용하여 마우서의 현재 x 위치를 읽어 오지만, 이것은 브라우저가 지원하느냐 그렇지 않느냐에 따라 실행이 되기도하고, 그렇지 않기도 한다. 따라서, event 관련한것을 쓰고 싶으면, event를 인자로 넘겨주는 방법으로 javascript를 처리해야 한다. 그래서 ZB_layerAction 함수에 myEvent라는 인자를 받아들이도록 했고, 이를 위해 ZB_layerAction를 부르는 모든 소스를 수정해야 했던 것이다. ZB_layerAction를 부르는 소스는 필자가 검색한 결과로는 위의 세가지 뿐이었다.
이로써, 어떤 브라우저에도 영향을 받지 않고도 위에 캡쳐된 화면과 같이 이름클릭했을때 뜨는 레이어 (Layer)의 처리가 가능해 졌다.
* 위의 설명중에 노란색으로 Highlight 된 부분은 여기게시판의 특성상 표시 할 수 없었으므로, 혹시 보고 싶으신 분은 원문 ( http://youngwhan.com/bbs/zboard.php?id=y_zero&page=1&page_num=20&select_arrange=headnum&desc=&sn=off&ss=on&sc=on&keyword=&no=7&category=1 )을 참고하시기 바랍니다.
헉.. 저는 원본 링크 따라가서 그 대로 수정했는데.. 파폭에서 제대로 레이어 나옵니다.
http://sojeong.com/<- 확인해보세여.. 은근히.. 홈페이지 홍보?ㅡㅡ;
http://sojeong.com/<- 확인해보세여.. 은근히.. 홈페이지 홍보?ㅡㅡ;
덤으로, cursor:hand라고 된 곳을 모두 cursor:pointer로 고치시면 마우스 포인터도 손가락 모양으로 잘 나오게 됩니다.
그나저나,, 저도 방금 이 작업 혼자 알아내느라 무지하게 고생해서 성공했더니만, 글을 쓰려고 보니 이미... OTL OTL OTL...
어떻게 변수 이름만 다르고 거의 똑같은 겁니까?? ㅠㅠ;;; (전 myEvent 대신 e로 썼죠.. 그리고 obj.style.posLeft를 obj.style.left로 고쳐야 한다는 걸 알아내는 데 시간이 좀 걸렸죠... 그리고 가장 고생했던, list_chekc.php에 $name 설정 코드가 있다는 사실도...)
어쨌든 추천 한 방 날리고 갑니다...
그나저나,, 저도 방금 이 작업 혼자 알아내느라 무지하게 고생해서 성공했더니만, 글을 쓰려고 보니 이미... OTL OTL OTL...
어떻게 변수 이름만 다르고 거의 똑같은 겁니까?? ㅠㅠ;;; (전 myEvent 대신 e로 썼죠.. 그리고 obj.style.posLeft를 obj.style.left로 고쳐야 한다는 걸 알아내는 데 시간이 좀 걸렸죠... 그리고 가장 고생했던, list_chekc.php에 $name 설정 코드가 있다는 사실도...)
어쨌든 추천 한 방 날리고 갑니다...
안건형님, 제 사이트에서 똑같은 질문 주셨죠? 혹시 몰라 여기에 똑같은 답변을 드립니다.
----------------------------------
글쎄요. 왜 안될까요. 혹시 3번에서 333행이 아니고, 아마도 님께서 가진 소스에서는 다른 행일 수 있습니다. 제가 가진 소스에서는 그렇게 길어졌는데, 원래소스에는 그렇게 길지 않을 것입니다.
고쳐야 할 부분을 가져오면,
// 폼메일을 사용하고 관련메뉴가 생성이 되면 레이어오픈
if($_zbCount&&$setup[use_formmail]) {
$name = "< s p a n onMousedown=\"ZB_layerAction('zbLayer$_zbCheckNum','visible', event)\" style=\"cursor:pointer;\">$name< / s p a n >";
// 폼메일을 사용안할 경우 무조건 메일링크
} else {
위와 같은 부분에서 $name = 이라고 되어 있는 부분을 위의 3번과 같이 바꿔주시면 됩니다. list_check.php를 여시고, 위와 같이 되어 있는 부분을 찾으셔서 $name을 바꿔보시지요. 그래도 안되시면, 또 연락주세요. ^^;
* 위에서 span 태그가 먹혀서 스페이스를 사이에 두었습니다. span을 제대로 쓰시고 해보시기 바랍니다.
----------------------
----------------------------------
글쎄요. 왜 안될까요. 혹시 3번에서 333행이 아니고, 아마도 님께서 가진 소스에서는 다른 행일 수 있습니다. 제가 가진 소스에서는 그렇게 길어졌는데, 원래소스에는 그렇게 길지 않을 것입니다.
고쳐야 할 부분을 가져오면,
// 폼메일을 사용하고 관련메뉴가 생성이 되면 레이어오픈
if($_zbCount&&$setup[use_formmail]) {
$name = "< s p a n onMousedown=\"ZB_layerAction('zbLayer$_zbCheckNum','visible', event)\" style=\"cursor:pointer;\">$name< / s p a n >";
// 폼메일을 사용안할 경우 무조건 메일링크
} else {
위와 같은 부분에서 $name = 이라고 되어 있는 부분을 위의 3번과 같이 바꿔주시면 됩니다. list_check.php를 여시고, 위와 같이 되어 있는 부분을 찾으셔서 $name을 바꿔보시지요. 그래도 안되시면, 또 연락주세요. ^^;
* 위에서 span 태그가 먹혀서 스페이스를 사이에 두었습니다. span을 제대로 쓰시고 해보시기 바랍니다.
----------------------
버젼이 달라서 문제인가요? 저는 제로보드 4.1 pl7을 쓰고 있거든요.
제 사이트에 오셔서 확인하셨겠지만, 제대로 동작하죠? FF를 썼을 경우에 말이죠.
제가 소스를 본다면, 더 좋겠지만, 제가 말씀 드릴 수 있는 것은,
ZB_layerAction 을 수정해야 하고, 여기에 인자를 받아들였으므로, zeroboard 전체에서 ZB_layerAction 함수를 쓰는 곳은 전부 바꾸어야 한다는 것입니다. 그리고, 전체 소스중에서 cursor:hand 도 cursor:point 로 바꾸어야 하구요.
위와 같이 하실수 있으시다면, 더 좋겠는데요. 해결 되었으면 좋겠습니다.
제 사이트에 오셔서 확인하셨겠지만, 제대로 동작하죠? FF를 썼을 경우에 말이죠.
제가 소스를 본다면, 더 좋겠지만, 제가 말씀 드릴 수 있는 것은,
ZB_layerAction 을 수정해야 하고, 여기에 인자를 받아들였으므로, zeroboard 전체에서 ZB_layerAction 함수를 쓰는 곳은 전부 바꾸어야 한다는 것입니다. 그리고, 전체 소스중에서 cursor:hand 도 cursor:point 로 바꾸어야 하구요.
위와 같이 하실수 있으시다면, 더 좋겠는데요. 해결 되었으면 좋겠습니다.
