WP2 글쓰기 페이지의 DBX를 메뉴에 적용시켰습니다. 원 저작자 사이트(brothercake)에 가면 최신 버전인 2.0.4가 있으며, 저는 wp-include/안에 있는 2.0.1을 사용하였습니다. 저작자의 sample code나 처음부터 DBX가 적용된 CrimsonMilk 테마만큼은 아니라도 몇개의 에러를 제외하면 무난합니다. (테스트좀 해 주시고 의견 부탁해요 ^_^)

DBX는 플러그인이 아닙니다. 직접 스크립트를 링크하시고 스킨을 꾸미셔야 합니다. ^-^ (플러그인으로 만들어 볼까 했지만 능력이 부족해서 -_-)


1. 테마의 header에 추가 할 것

1
2
3
4
5
6
<!-- Docking boxes (dbx) by brothercake - http://www.brothercake.com/ -->
<script type="text/javascript" src="<?php bloginfo('wpurl'); ?>/wp-includes/js/dbx.js"></script>
<!-- dbx configuration script -->
<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/js/dbx-key.js"></script>
<!-- dbx stylesheet -->
<link rel="stylesheet" type="text/css" href="<?php bloginfo('template_directory'); ?>/styles/dbx.css" media="screen, projection" /></link>

말씀드린대로 dbx.js는 WP2에 기본으로 포함되어 있는 ‘wp-includes/js/’내의 파일을 사용합니다. 또 dbx-key.js와 dbx.css파일을 받으셔서 적당한 곳에 업로드 하시고 해당 주소로 링크 하셔야 합니다.(저는 테마파일의 js 폴더에 넣었습니다.) 만약 WP2이전 버전을 사용하시거나 dbx.js가 없는 환경에서 DBX를 구현하셔야 하면 dbx.js 파일을 같이 업로드 하시기 바랍니다.

DBX 관련 파일 다운받기: [brothercake] [this blog]

2. dbx-key.js의 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//initialise the docking boxes manager
var manager = new dbxManager('main'); 	//session ID [/-_a-zA-Z0-9/]
 
//create new docking boxes group
var purple = new dbxGroup(
	'purple', 		// container ID [/-_a-zA-Z0-9/]
	'vertical', 		// orientation ['vertical'|'horizontal']
	'7', 			// drag threshold ['n' pixels]
	'no',			// restrict drag movement to container axis ['yes'|'no']
	'10', 			// animate re-ordering [frames per transition, or '0' for no effect]
	'yes', 			// include open/close toggle buttons ['yes'|'no']
	'open', 		// default state ['open'|'closed']
	'open', 		// word for "open", as in "open this box"
	'close', 		// word for "close", as in "close this box"
	'click-down and drag to move this box', // sentence for "move this box" by mouse
	'click to %toggle% this box', // pattern-match sentence for "(open|close) this box" by mouse
	'use the arrow keys to move this box', // sentence for "move this box" by keyboard
	', or press the enter key to %toggle% it',  // pattern-match sentence-fragment for "(open|close) this box" by keyboard
	'%mytitle%  [%dbxtitle%]' // pattern-match syntax for title-attribute conflicts
);

sessionID와 containerID는 그대로 사용하셔도 상관은 없지만, 적절히 바꾸어 주시는게 좋습니다. (특히 한 페이지에 여러개의 DBX를 적용하시려면 적용할 DBX 파트의 갯수만큼 container를 따로 만드셔야 하며 containerID는 dbx-group을 구분하는 id가 됩니다. 나중에 다시 말씀 드리겠습니다.) 그것 외에는 파라미터 부분이니 주석을 보시면 쉽게 아실 것입니다.

dbx-key.js는 session과 container를 정의 하는 것 정도로 제 할일이 끝나고 직접적인 동작은 dbx.js에서 처리하죠. (다행이 dbx.js는 손대지 않으셔도 좋습니다. ^-^) 잊지 마셔야 할 것은 원하시는 환경에 따라 session과 container를 바꾸셔야 한다는 겁니다.

3. dbx.css에 적용할 것들

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/****************************************************************
  docking boxes core CSS: YOU MUST NOT CHANGE OR OVERRIDE THESE
*****************************************************************/
.dbx-clone {
	position:absolute;
	visibility:hidden;
	}
.dbx-clone, .dbx-clone .dbx-handle-cursor {
	cursor:move !important;
	}
.dbx-dummy {
	display:block;
	width:0;
	height:0;
	overflow:hidden;
	}
.dbx-group, .dbx-box, .dbx-handle {
	position:relative;
	display:block;
	}
 
 
/****************************************************************
  avoid padding, margins or borders on dbx-box,
  to reduce visual discrepancies between it and the clone.
  overall, dbx-box is best left as visually unstyled as possible
*****************************************************************/
.dbx-box {
	margin:0;
	padding:0;
	border:none;
	}
 
 
/****************************************************************
  otherwise, do what you like :)
*****************************************************************/
 
/* handle cursors */
.dbx-handle-cursor {
	cursor:move;
	}

제가 사용하고 있는 CSS파일입니다. dbx.zip에 포함 되어 있는 녀석은 sample용 dbx.php에 맞춰진 녀석이라 애트리뷰트가 많으므로 다시 작성하시길 권합니다.

‘otherwise, do what you like’로 주석처리 된 곳까지는 Core CSS라며 brothercake에서 권장하는 필수 사항입니다. (영어로 매뉴얼이 잘 되어 있으니 자세히 얼렁뚱땅 읽어보시길.)

그리고 저는 예전 스킨의 디자인을 그대로 유지하기 위해 ‘dbx-handle-cursor’ 하나만 추가 시켰습니다. Core CSS만으로도 충분히 DBX는 동작합니다.

4. DBX를 HTML코드에 적용하기

위의 dbx-key.js에 적당한 sessionID와 containerID를 부여하셨고, dbx.css를 작성하셨다면 다음은 실제로 HTML에 적용하는 과정만 남았습니다. (그리 힘들지 않아요 ^-^)

중요한 애트리뷰트는 4가지입니다. (brothercake의 문서는 여기)

  1. dbx-group: 페이지에 들어갈 DBX의 container입니다. 수평이동이나 수직이동으로 구분되므로 위치나 동작에 따라 각각 group로 묶어줘야 합니다.
  2. dbx-box: 실제로 마우스로 이동시키게 되는 block을 구분합니다. 예를들어 해당 메뉴별로 dbx-box를 적용시키면 됩니다.
  3. dbx-handle: box를 움직일 수 있게 마우스 커서가 변하는 부분입니다. 이게 있어야 잡고 이동시킬 수 있습니다.
  4. dbx-content: box안의 내용을 구분하는 애트리뷰트 입니다.
1
2
3
4
5
6
<div class="dbx-group" id="containerID of dbx-key.js">
	<div class="dbx-box">
		<div class="dbx-handle">...</div>
		<div class="dbx-content">...</div>
	</div>
</div>

대략 위와 같이 사용합니다. div 태그는 element로 span이나 다른 어떤 태그도 상관없지만 일반적으로 div가 좋습니다. 잊지 마셔야 할 것은 ‘dbx-group’가 있는 div태그에 반드시 id로 dbx-key.js의 해당 containerID를 지정하셔야 합니다. (누누히 말씀드린 바로 필요 group만큼 dbx-key.js에서 설정해 두셔야 합니다.)

이제부터 실제 스킨의 디자인을 가능한 변경하지 않으면서 DBX를 쉽게 적용하는 방법을 알려드리겠습니다. (역시 본 블로그 이외에는 테스트를 해 본적이 없으므로 의견 부탁드립니다.)

먼저 원하시는 부분을 감싸는 최초의 div태그에 ‘dbx-group’를 적용시킵니다. 기존 ‘div class=어쩌고저쩌고’를 ‘div class=어쩌고저쩌고 dbx-group’처럼 기존 class 애트리뷰트 뒤에 빈칸 하나 넣으시고 ‘dbx-group’를 적으시면 됩니다. 다음으로 나머지 애트리뷰트를 적용시키는데, 위와 똑같이 기존 class에 빈칸 하나 추가 하시고 뒤에 해당 애트리뷰트를 넣으시면 됩니다. (뒤에 하셔야 합니다. 앞에 하시면 적용이 달라질 수 있습니다.)

제 스킨의 소스를 예를 들어보겠습니다.

DBX 적용전

1
2
3
4
5
6
7
8
9
<div class="secondary">
	...
	<div class="sb_categories"><h2>갈래</h2>
		<ul>
			<?php list_cats(0, '', 'name', 'asc', '', 1, 0, 1, 1, 1, 1, 0,'','','','','') ?>
		</ul>
	</div>
	...
</div>

DBX 적용후

1
2
3
4
5
6
7
8
9
<div id="sidebar" class="secondary dbx-group">
	...
	<div class="sb_categories dbx-box"><h2 class="dbx-handle">갈래</h2>
		<ul class="dbx-content">
			<?php list_cats(0, '', 'name', 'asc', '', 1, 0, 1, 1, 1, 1, 0,'','','','','') ?>
		</ul>
	</div>
	...
</div>

5. 주의할 부분

  1. dbx-group안의 모든 부분이 dbx-box로 block화 되어야 합니다. 예를 들어 메뉴바에 적용시킨다면 해당 메뉴 항목 모두 DBX를 적용시켜야 하는거죠. 혹시라도 적용 안된 부분이 있다면 DBX가 로드된 시점에 DBX가 적용된 메뉴들이 적용 안된 메뉴의 아래로 모두 이동해 버립니다. 그리고 group안에 적용 안된 부분이 있을 경우 처음 페이지를 실행할 경우 DBX에 에러가 나서 드래그는 되지만 block간 이동이 되지 않습니다. (새로고침을 해야 원활이 동작하죠)
  2. dbx-handle은 마우스로 block을 잡기 위해 반드시 필요합니다. handle이 없을 경우 수동적으로 옮겨지긴 하지만, 사용자가 이동시킬 수는 없습니다.
  3. dbx-content애트리뷰트는 없어도 상관 없습니다. 메뉴가 아닌 이미지에 적용할 경우 dbx-handle만 있어도 상관없습니다.
  4. 구글 애드센스가 포함된 dbx-box block을 이동시키는 경우 파이어폭스에서는 문제가 없으나 IE에서는 에러가 발행후 강제종료됩니다. 아무래도 스크립트 언어를 이동시키는데서 에러가 나는것 같으니 주의하시기 바랍니다.

포스트가 유익했다면 구독 어떠세요? ( Subscribe in a reader | Add to Google Reader or Homepage | 한RSS에 추가 )




2개의 의견 @ “Docking Boxes를 메뉴바에 적용”

  1. 1 unfusion   Korea (South) 

    예전에 DBX를 Kubrick 테마의 사이드 바에 잠깐 테스트 적용만 해보고 잊어버리고 있었는데 이렇게 상세하게 설명해 주신걸 보니 다시 시도해 보고 싶어집니다. :) 워드프레스의 편집창에서 처럼 펼침 기능까지 있으면 더 좋을것 같은데요.

  2. 2 park   Korea (South) 

    unfusion// 절망클럽의 unfusion님이시군요. 영어 읽기가 귀찮아서 한글 설명을 찾느라 구글을 뒤지다가 포스트를 봤었습니다. ^-^

    펼침 기능은 dbx-key.js에서 그룹 파라미터만 조정하면 바로 됩니다. 직접 html소스에서 고칠 필요도 없죠…

    전 082님의 AJAX 스포일러를 한번 적용시켜 볼까 해서 일부로 꺼둔거라서요. 근데 귀차니즘에 손 놓고 있습죠 :D

의견 남기기

:mrgreen: :neutral: :shock: :smile: :???: :cool: :evil: :grin: :oops: :razz: :roll: :wink: :cry: :eek: :mad: :sad:

스팸방지 정책상 최초의 의견등록시 운영자의 승인후 목록에 공개됩니다


태그 알림 쓸 수 있는 HTML 태그:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="">