별 기능은 아니지만 http://www.chelsea.name/zbxe/board Free Board 라는 제목 효과를 볼 수 있습니다.

파일은 2개 입니다. flash.js , board_tit.swf

사용하는 스킨 JS폴더에 flash.js 복사
board_tit.swf 파일은 ZBXE폴더에 넣어주시면 됩니다.


zbxe/modules/board/skins/사용스킨 header.html 파일을 열고
<!--%import("js/flash.js")--> 추가



그 다음은 제목 부분에...
<script language="javascript">
flash('550','30','board_tit.swf?flash_gallery_txt={$module_info->title}');
</script> <br/>

이렇게 사용하시면 알파값이 천천히 밝아지면서 제목이 나옵니다.
바탕색과 상관없이 사용가능합니다.

flash.js ((-------IMAGE-------))
by Anna 안나 2008. 6. 1. 20:34
제로보드가 설치된 디렉토리를 기준으로 아래 경로에 이모티콘이 보관됩니다. modules/editor/components/emoticons/tpl/images/

위의 경로에 새 폴더를 만들고 이모티콘 이미지 파일을 넣으면 됩니다.
by Anna 안나 2008. 4. 5. 23:42
예를들어 글쓰기창에서 확장변수1과 2만 쓰기권한을 관리자로 주고 싶을 때
아래와 같이 해결했습니다. 개인적으로는 상당히 유용하네요.

(아래의 소스는 write_form.html 문서에 적용하는 소스입니다.)
view plaincopy to clipboardprint? <!--@foreach($module_info->extra_vars as $key => $val)--> <!--@if($val->name && !($key == 1 && !$grant->manager || $key == 2 && !$grant->manager))--> <!-- 확장변수 --> {$val->name} <!--@if($val->is_required=='Y')-->*<!--@end--> <!-- 확장변수(extra_var)의 type에 따른 form을 출력하기 위해서 특별히 제작된 파일을 include 한다 --> <!--#include("./extra_var_form.html")--> <!--@end--> <!--@end--> <!--@foreach($module_info->extra_vars as $key => $val)--> <!--@if($val->name && !($key == 1 && !$grant->manager || $key == 2 && !$grant->manager))--> <!-- 확장변수 --> {$val->name} <!--@if($val->is_required=='Y')-->*<!--@end--> <!-- 확장변수(extra_var)의 type에 따른 form을 출력하기 위해서 특별히 제작된 파일을 include 한다 --> <!--#include("./extra_var_form.html")--> <!--@end--> <!--@end-->
* 위의 소스는 확장변수1과 2의 사용을 허가했을 때 확장변수1과 2는 관리자만 작성권한을 주는 것이고, 나머지 확장변수들은 쓰기권한제한이 없습니다.

알고 계실지도 모르지만 이번에는 view_document.html에 원하는 확장변수의 번호를 각각 불러올 수 있는 것에 대한 설명입니다.

위의 소스를 응용해서 아래와 같이 해봤습니다.
view plaincopy to clipboardprint? <!--@if($oDocument->isSecret() && !$oDocument->isGranted())--><!--@else--> <!--@if($oDocument->isExtraVarsExists())--> <!--@foreach($module_info->extra_vars as $key => $val)--> <!--@if($val->name == $module_info->extra_vars[1]->name && $oDocument->getExtraValue(1) || $val->name == $module_info->extra_vars[2]->name && $oDocument->getExtraValue(2))--> {$val->name} : <!-- 확장변수(extra_var)의 type에 따른 값을 출력하기 위해서 특별히 제작된 파일을 include 한다 --><!--#include("./extra_var_value.html")--> <!--@end--> <!--@end--> <!--@end--> <!--@end--> <!--@if($oDocument->isSecret() && !$oDocument->isGranted())--><!--@else--> <!--@if($oDocument->isExtraVarsExists())--> <!--@foreach($module_info->extra_vars as $key => $val)--> <!--@if($val->name == $module_info->extra_vars[1]->name && $oDocument->getExtraValue(1) || $val->name == $module_info->extra_vars[2]->name && $oDocument->getExtraValue(2))--> {$val->name} : <!-- 확장변수(extra_var)의 type에 따른 값을 출력하기 위해서 특별히 제작된 파일을 include 한다 --><!--#include("./extra_var_value.html")--> <!--@end--> <!--@end--> <!--@end--> <!--@end-->
* 위의 소스는 관리자가 설정창에서 지정한 변수의 성질(?)대로 내용화면에 불러오고 싶어서 일부러 foreach를 이용하여 출력한 것입니다.
그런 이유가 아니었다면 나쁜머리를 굴릴 필요도 없었다는.. orz...

그리고 제일 첫줄에 있는 함수는 비밀글일 때 내용화면에서 비밀글 읽기 권한이 있는 사람만 작성된 확장변수를 볼 수 있게 하기 위한 것이니 삭제하셔도 됩니다.

* 삭제하시려면 첫줄의 <!--@if($oDocument->isSecret() && !$oDocument->isGranted())--><!--@else--> 이것과 끝줄의 <!--@end--> 이것을 삭제하셔야 합니다.

확장변수의 이름이 있어도 해당 확장변수에 내용이 없으면 내용화면에 항목을 출력하지 않기위해서
$val->name == $module_info->extra_vars[1]->name && $oDocument->getExtraValue(1) 이렇게 했는데요..

더 간단한 방법이 없을까요?

저는 이렇게 해서 확장변수 1~4, 11~14는 내용 상단에 / 5,15는 내용 오른쪽 또는 왼쪽에 / 6~10, 16~18, 20 은 내용아래에 / 19는 코멘트창 바로 위에 출력하여 사용하고 있습니다.
by Anna 안나 2008. 4. 5. 23:26
아시는 분들 많겠지만, 접속 주소의 www 유무에 따라서 페이지 이동시 로그인이 풀리는 경우가 있곤 합니다.

(www 없는 주소로 접속해서 로그인을 한 후, www 있는 페이지로 접속하면 로그인이 풀리는 현상 - 반대의 경우도 마찬가지)

그러던중 SCM 로그관리를 검색하다가 새로운 문제 하나를 알게되었는데요. (사실은 문제랄 것 까지는 없지만...)

저는 주로 게시물들의 RSS 전문 공개를 해두는 편이랍니다. 그래서 구글이나 야후 등에서 게시물이 검색될 수 있도록 말이죠.

그런데 문제는 게시물이 검색될 때의 링크 주소가 항상 www 붙은 형태는 아니라는 것입니다. 이게 왜 문제인지 예를 들어보면요.

만일 누군가 검색을 하다가 제 사이트의 게시물이 검색 되어서 읽어보려고 클릭하면 바로 그 글이 떠야하지 않겠습니까?

그런데 만일 검색된 링크의 주소에 www 가 없다면 자동으로 www 를 붙이면서 그 글이 아닌 메인페이지로 접속이 되어버립니다.

그럼 그 누군가는 순간 당황스러울 수밖에 있겠죠. 정작 보려던 글은 나오지 않고, 사이트 메인페이지가 나타났으니 말입니다.

그 글을 보려면, 메인화면에서 다시 그 글을 찾기위해 검색을 해야한다는 말인데... 이렇게 할 사람은 거의 없겠죠.


그래서 SCM 로그관리를 살펴보니, 검색로봇이 긁어간 주소들 중에 www 없이 링크되어 있는 곳이 꽤 많더군요.

왜 그런지 잘 모르겠네요. 어떤 게시물은 www 와 함께 링크되어 있고, 어떤 것은 www 없이 링크되어 있었습니다.

여하튼 이래선 안되겠다 싶어 일단 다시 똑띠님의 팁을 해제하고 다른 방법들을 알아봤는데요.

물론 가장 좋은 건 회원분들께서 '로그인 유지' 기능을 사용하시는거죠. 그러면 www 유무에 관계없이 늘 로그인이 유지되니까요.

그런데 신규회원의 경우나 그 기능을 이용하지 않으시는 분들은 여전히 www 없이 접속하셨다가 로그인 풀림으로 문제를 겪곤 하셨죠.


그래서 인터넷을 한참을 돌아다니다가 결국 한 가지 팁을 찾아서 적용시켜보았더니 문제가 해결되었습니다.


방법은 간단합니다. 레이아웃 편집에서 아래 스크립트를 적당한 곳에 붙여주기만 하면 됩니다.

적당한 곳이 애매하신 분은 로그인창에 보이는 '편집' 누르신 후 레이아웃 편집창 가장 상단에 붙여주시면 되겠습니다. ^^


<script language="JavaScript" type="text/javascript">
var host = location.host.toLowerCase();
var currentAddress = location.href;
if (host.indexOf("www") == -1)
{
currentAddress = currentAddress.replace("//","//www.");
location.href = currentAddress;
}
</script>


위 스크립트가 삽입된 레이아웃은 www 없이 접속을 해도 자동으로 www 로 변경이 됩니다.

물론 서브 메뉴의 주소에도 www 가 자동으로 붙으면서 검색사이트 링크에 www 없는 경우에도 제 페이지를 보여줍니다.


물론 고수님들 보시기엔 정말 하찮은 팁일지도 모르겠고, 더 좋은 방법이 있을지도 모르겠으나 저같은 초보에겐 참 기쁜일이었답니다.

혹시 저처럼 www 유무로 인한 로그인풀림 문제로 고민하시는 분이 계시다면 위 글이 도움이 될 수 있기를 바랍니다. ^^
by Anna 안나 2008. 4. 5. 23:20
1) htaccess 파일을 만듭니다.

2) 파일에 아래의 내용을 기입합니다. RewriteEngine On
RewriteBase / RewriteCond %{ENV:REDIRECT_SURI} ^$ [OR]
RewriteCond %{ENV:REDIRECT_SURI} ^/$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /bbs/$1 [R] RewriteRule ^/$ /bbs/?mid=index [L]
RewriteRule ^$ /bbs/?mid=index [L]
단, 노란색 표시가 있는 것은 자신에 맞게 적당히 바꿔주셔야 합니다. bbs -> 자신의 제로보드 XE 디렉토리 경로, index -> 처음 보여질 모듈(페이지/게시판/블로그의 mid값.)

그리고 저장합니다.

3) 계정을 FTP로 접속합니다. 웹페이지가 놓이는 최상단 디렉토리로 들어가서 htaccess 파일을 업로드합니다.

4) 업로드한 htaccess 파일이름을 .htaccess로 고칩니다.

5) 테스트를 해봅니다.



유감스럽게도 아직 제 홈페이지는 업그레이드하지 못한 상태라서 보여드릴 수 있는 실제 작동 예는 보일 수 없습니다만... 테스트는 해보았으니 별 문제는 없을겁니다.

위의 룰이 최선의 방법은 아닙니다만 제로님이랑 이래저래 이야기 해봤는데 그나마 가장 나은 듯하네요. RewriteCond를 몇개 더 걸어서 더 엄격하게 검사할 수도 있긴 한데 괜히 정규식 파싱하는 것보단 이게 적절할 것 같습니다.



간단하게 위의 룰이 하는 일은 다음과 같습니다.

- 아울러 주소가 /인 경우에는 index 모듈로 자동 포워딩한다.
- 주소가 /에서 참조되는 파일은 해당 파일이 서버에 존재하지 않을 때에만 경로를 자동으로 bbs 하위로 변환한다. (이게 추가된 부분)

끗~
by Anna 안나 2008. 4. 5. 23:19
배너 랜덤추출 스크립트 입니다.


1. 아래 소스를 filename.js 파일로 저장해 주세요. // 배너랜덤출력
var banner=new Array();
banner[0]="<a href='배너1 링크 URL'><img src='배너1 이미지 경로' border='0'></a>";
banner[1]="<a href='배너2 링크 URL'><img src='배너2 이미지 경로' border='0'></a>";
banner[2]="<a href='배너3 링크 URL'><img src='배너3 이미지 경로' border='0'></a>";

var random_banner=Math.floor(Math.random()*(banner.length));

2. 적용하실 레이아웃 폴더 안의 js폴더에 업로드 합니다.

3. 적용하실 레이아웃의 편집버튼을 누르시고 상단에 아래 소스를 추가하세요. <!--%import("js/filename.js")-->
4. 레이아웃에 배너를 출력하고 싶은 부분을 찾아 아래 소스를 추가하세요. <script>document.write(banner[random_banner]);</script>
5. 완성된 모습을 확인하세요.
by Anna 안나 2008. 4. 5. 23:17
플래시로 랜덤이미지 로드시키는 방법입니다.



먼저 플래시 만드는 방법 입니다.

1. 플래쉬에서 새로운 레이어를 만들고 최 하단으로 내립니다.
2. Ctrl+F8을 누르고 새로운 무비클립형태의 공백심볼을 만듭니다
3. 메인 프레임으로 넘어와서 공백심볼을 제일 아래에있는 레이어에 놓고 적당한 위치로 조절을 합니다. (x:0, y:0)
4. 하단의 속성에서 (Properties) 인스턴트 이름을 (Incetance name) bg 라고 이름을 정해줍니다.
5. 액션을 넣을 프레임을 생성하고 첫 프레임부분에 액션을 다음과 같이 넣습니다.

bg.loadMovie("http://절대경로/pic"+(random(6)+1)+".jpg");

(6) 은 이미지가 6개란 뜻 입니다. 3개만넣을경우 3으로 수정


1번 프레임 : 우측 방지 액션
2번 프레림 : 랜덤 이미지 로드 액션
3번 프레임 : bg 무비 심벌


6. 플래시 파일을(swf파일) 생성하시고난후 포토샵에서 파일을 pic1.jpg - pic6.jpg 까지 만듭니다.

7. ftp 로 플래시를 업로드 합니다 - 플래시에서 설정된 이미지 절대폴더에 이미지파일( pic1.jpg - pic6.jpg ) 파일을 넣어준다.
(이미지 경로는 다른곳에 업로드 하셔두 되요 단 플래시안의 절대경로값과 맞추어야 합니다)


기본 설정은 끝났습니다..

이제 페이지 수정하셔서 내용직접추가 - 멀티미디어추가 - swf 파일의 절대경로입력 - 가로세로 설정 - 추가

그리고 저장하시면 새로고침할때마다 이미지 랜덤으로보여집니다..



ps..
우측 마우스 금지 하실려면 레이어 하나 생성 하시고

Stage.showMenu = false;

라고 액션을 넣어 주세여~
by Anna 안나 2008. 4. 5. 23:17
생각 해보면 아주 간단합니다
각자의 레이아웃을 열어서.. (혹시 모를 오류를 대비하세요.. =ㅁ=;)

//레이아웃의 1차메뉴 출력
//다른것과 다른게.. $idx 카운트를 하죠.. 음.. 1차메뉴 갯수를 바로 뽑을수 있다면 필요 없겠죠.. 아직 모르니....
<ul id="gnb">
<!-- main_menu 1차 시작 -->
{@ $idx = 1 }
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--@if($val['selected'])-->
{@ $menu_1st = $val }
<!--@end--> <li onMouseOver="menu({$idx});" <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li> <!--@end-->
{@$idx++}
<!--@end-->
<!-- main_menu 1차 끝 -->
</ul>

//이 스크립트는 1차메뉴의 갯수를 지정하는 곳입니다.
<script language="javascript1.2">
var menuLen={$idx-1};
</script>

// 메뉴별로 2차 메뉴를 뽑아 내야 합니다.
// 위의 1차 메뉴에서는 만들기가 어려워서 한번 더 돌려야 합니다.
// 1차메뉴 출력부분을 빼고 2차 메뉴만 출력 하면 되지요..ㅎ.ㅎ

<!--히든 레이어 메뉴-->
<!-- main_menu 1차 시작 -->
{@ $idx = 1 }
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--2차메뉴-->
<div class="subMenu" id="subMenu_{$idx}" style="<!--@if($val['selected'])-->display:block;<!--@else-->display:none;<!--@end-->">
<!--@foreach($val['list'] as $key1 => $val1)--><!--@if($val1['text'])-->
<!--@if($val1['selected'])--><!--@end-->
<a id="lnb1" href="{$val1['href']}" <!--@if($val1['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val1['text']}</a>
<!--@end-->
<!--@end-->
</div>
<!--@end-->
{@$idx++}
<!--@end-->
<!-- main_menu 1차 끝 -->


//스크립트 부분
function menu(idx){
for (i=1;i<=menuLen;i++){
eval("document.getElementById('subMenu_"+i+"').style.display='none'");
}
eval("document.getElementById('subMenu_"+ idx +"').style.display='block'");
}

script에 요고 추가 하시면 위의 코드로도 충분히 돌아갑니다...
음..... 위치 지정은 css에서 하시면 되구요

행운이 있기를!


질문 하시는 분이 계셔서 추가.....

CSS에 추가 해야 할것이 뭣이냐 하면..

.subMenu{position:absolute; left:210px; top:120px; background-color:#FFFFFF;width:750px;height:24px;}
#lnb1{text-decoration:none;color:#000000;padding-left:10px; line-height:2em; position:relative;white-space:nowrap; }
#lnb1:hover,focus {color:#000000}

이 내용 입니다..
서브 메뉴의 위치를 설정 해 주셔야 이쁘게 되겠죠..
빨간색으로 된 부분 수정 하셔서 위치 지정 해 주시면 되요..




정리해서 올립니다.


layout.html 에서 수정해야 할부분... <ul id="gnb">
<!-- main_menu 1차 시작 -->
{@ $idx = 1 }
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--@if($val['selected'])-->
{@ $menu_1st = $val }
<!--@end--> <li onMouseOver="menu({$idx});" <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li> <!--@end-->
{@$idx++}
<!--@end-->
<!-- main_menu 1차 끝 -->
</ul>

<script language="javascript1.2">
var menuLen={$idx-1};
</script>

<!--히든 레이어 메뉴-->
<!-- main_menu 1차 시작 -->
{@ $idx = 1 }
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--2차메뉴-->
<div class="subMenu" id="subMenu_{$idx}" style="<!--@if($val['selected'])-->display:block;<!--@else-->display:none;<!--@end-->">
<!--@foreach($val['list'] as $key1 => $val1)--><!--@if($val1['text'])-->
<!--@if($val1['selected'])--><!--@end-->
<a id="lnb1" href="{$val1['href']}" <!--@if($val1['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val1['text']}</a>
<!--@end-->
<!--@end-->
</div>
<!--@end-->
{@$idx++}
<!--@end-->
<!-- main_menu 1차 끝 -->

script 부분 추가 해야 할 부분

위치 : layouts/해당레이아웃/js/?????.js
function menu(idx){
for (i=1;i<=menuLen;i++){
eval("document.getElementById('subMenu_"+i+"').style.display='none'");
}
eval("document.getElementById('subMenu_"+ idx +"').style.display='block'");
}
CSS 추가해야 할 부분

위치 : layout/해당레이아웃/css/?????.css
.subMenu{position:absolute; left:210px; top:120px; background-color:#FFFFFF;width:750px;height:24px;}
#lnb1{text-decoration:none;color:#000000;padding-left:10px; line-height:2em; position:relative;white-space:nowrap; }
#lnb1:hover,focus {color:#000000}
by Anna 안나 2008. 4. 5. 23:16
아직 Zbxe의 서버이전을 하실 일은 별로 없을 것 같지만 그래도 제가 해본 결과를 올립니다.

혹시 서버이전 하실 일 있으면 참조하세요.

[ Zbxe 서버이전 순서 ]

기존 서버를 A
옮길 서버를 B 라고 가정합니다.

1. 텔넷(시작-프로그램-보조프로그램-통신-하이퍼터미널)으로 A서버의 ZBXE폴더를 압축합니다.
cd public_html 후에(www면 cd www)

tar cvfpz zbxe.tar zbxe
cvfpz는 폴더의 모든폴더,파일과 퍼미션까지 압축, zbxe.tar은 생성되는 압축파일 이름(임의로 만듬),
zbxe는 계정에 있는 zbxe의 폴더명(만약 루트에서 public_html전체를 압축하려면 public_html를 기재해야함)

생성되어진 zbxe.tar를 ftp로 자신의 컴퓨터로 내려 받습니다.

2. A서버의 DB로 들어가서 ZBXE의 DB를 내려받기로 받습니다. - sql파일

a. 텔넷으로 내려받기

로긴해서 A서버에 접속이 되면
mysql 위치로 들어가야 한답니다.
whereis mysql하고 치면 mysql 경로를 가르쳐 줍니다.
저는 저렇게 치니까 /usr/local/mysql 이라고 나오더군요.. 다른분들은 조금 다를수도 있을듯 싶습니다.
경로를 확인하고 cd /usr/local/mysql이런식으로 자신의 경로에 맞게 칩니다.
mysql 로 들어갔으면 [어쩌구저쩌구 mysql] 이렇게 나오실 겁니다. 안도의 한숨을 쉬면서..
백업을 시작합니다.
./bin/mysqldump -u 아이디 -p DB 이름 > 백업할 파일 이름
이렇게 치면 mysql 패스워드를 묻습니다. 그리고 패스워드를 치면 조금있다가 백업이 됩니다.
백업할 파일 이름을 넣을때 그냥 backup.sql 이런식으로 넣으면 퍼미션 에러가 납니다. 자신의 홈 디렉토리에 넣어야 겠죠..
결국 만약에 자신의 아이디가 name 이고 db 이름도 name이라면
./bin/mysqldump -u name -p name > /home/name/public_html/name_backup.sql이렇게 치면 백업됩니다.
물론 뒤쪽에 붙은 /home/name/public_html/name_backup.sql이 경로는 자신의 경로에 맞게 수정하시면 될듯 싶습니다.

b. 어렵죠 그럼 쉬운, 직접 DB로 들어가 내려받기

계정을 관리하는 사이트에 보통 있습니다.
phpMyAdmin를 설치한 경우는 직접 접속해서 내려받기 하면 됩니다.

그럼 A서버로 부터 받을 것은 다 받았네요. 이제 B서버에 설치

3. B서버로 A서버에서 생성해서 자신의 컴에 보관한 sql파일을 import 합니다.

a. 텔넷으로 올리기
먼저 A서버에서 내려 받은 sql파일을 ftp를 이용해 B서버에 올립니다. 이때 접속해서 보이는 첫화면에 올려도 좋지만
그럼 텔넷이용시 디렉토리를 변경해야 하므로 상위 디렉토리를 선택하시면 편리
(보통 www 나 public_html의 상위 디렉토리가 되겠죠)
텔넷으로 B계정에 접속이 되면(상위디렉토리라고 가정)

mysql -u 아이디 -p 비밀번호 DB네임 < 백업파일명 (예; mysql -u name -p 1111 name < zbxe.sql)

그럼 DB작업 완료

b. 어렵죠 그럼 쉬운 직접 DB로 들어가 올리기

계정을 관리하는 사이트에 보통 있습니다.
phpMyAdmin를 설치한 경우는 직접 접속해서 import 하면 됩니다.

4. A서버에서 내려 받아 자신의 컴에 보관중인 압축파일 zbxe.tar 을 ftp를 이용해서 B서버에 올립니다.
이때도 public_html 전체를 압축했으면 루트에, zbxe폴더만 압축했다면 public_html 방안에 올립니다.

5. 텔넷으로 B계정에 접속해서 public_html 안에 zbxe폴더만 압축했다면 cd public_html 치고

tar xvfpz zbxe.tar zbxe

그럼 B서버의 이전도 완료되었네요.

6. B서버의 zbxe/files/config/db.config.php 파일을 삭제합니다.

8. B서버에 도메인으로 접속해서 (ex : http://도메인/zbxe) 설치환경을 시작합니다.
이때 DB네임이나 DB에 관계된 것은 당연히 바뀌어야 하나, 자신의 zbxe의 아이디나 비밀번호는 바뀌면 안됩니다.

9. 설치가 완료되었으면, 각 레이아웃 설정에 들어가서 홈페이지 URL 부분에 이전한 홈페이지 주소를 입력합니다.

그럼 이전 90% 완료입니다.

이전 되지 않는 것들(수동으로 일일히 변경)
- 파일첨부해서 본문삽입으로 올린 이미지들(파일의 경로는 올바르게 이전됨)이 A의 계정으로 남아있습니다.
갤러리로 올린 이미지들은 정상적으로 이전됨.
- 레이아웃편집으로 위젯설치한 경로 A계정으로 남아있습니다.
by Anna 안나 2008. 4. 5. 22:45
예제->> ((-------IMAGE-------))



학습목표
위 그림처럼 새 글일 때, New 아이콘 표시,
비밀글일 때, 비밀글 상태 표시,
현재 읽는 글 표시를 추가
조회 수별로 제목 색상 지정

※ 아이콘 표시 기능은 XE 0.1.7 부터 적용됩니다.

작업 파일
보드 모듈 스킨의 list.html 파일

90번대 줄의 제목 표시 줄

아래 소스를 원하는 위치에 삽입하세요.

New 아이콘 표시 방법
<!--@if((strtotime("now") - strtotime(zdate($document->getRegdate("YmdHis")))) < 24 * 3600)--><img src="./images/new.gif" align="absmiddle"><!--@end-->

24는 시간이며 24시간 이내의 글은 아이콘을 표시하는 예제
이미지 파일은 스킨/images/ 폴더에 복사 ((-------IMAGE-------))


비밀글 상태 표시 방법

<!--@if($document->isSecret())-->비밀 글이에요<!--@end-->


현재 읽는 글 표시 방법

<!--@if($document_srl == $document->document_srl)-->현재 읽고 있는 글이에요~<!--@end-->


조회수 별 제목 색상 지정

list.html 파일에 아래 소스 추가
<!--@if($document->get('readed_count') > 100)-->{@$color_read = "color_read_5"}
<!--@elseif($document->get('readed_count') > 80)-->{@$color_read = "color_read_4"}
<!--@elseif($document->get('readed_count') > 60)-->{@$color_read = "color_read_3"}
<!--@elseif($document->get('readed_count') > 40)-->{@$color_read = "color_read_2"}
<!--@elseif($document->get('readed_count') > 20)-->{@$color_read = "color_read_1"}
<!--@elseif($document->get('readed_count') > 0)-->{@$color_read = "color_read_0"}
<!--@end-->

제목 표시 줄을 아래 처럼 클래스 지정 후,
<a href="{getUrl('document_srl',$document->document_srl)}" class="{$color_read}">{$document->getTitleText($module_info->subject_cut_size)}</a>


CSS/common.css 파일에서 아래 스타일 추가

.boardList td.title a.color_read_5 {color:#FF3232}
.boardList td.title a.color_read_4 {color:#FF9632}
.boardList td.title a.color_read_3 {color:#C8C800}
.boardList td.title a.color_read_2 {color:#64C800}
.boardList td.title a.color_read_1 {color:#0096C8}
.boardList td.title a.color_read_0 {color:#C832C8}


※ 응용을 하여 Cool, Hot 아이콘을 표시하도록 할 수 있습니다.
by Anna 안나 2008. 4. 5. 22:44
<img> 태그를 쓴 png 이미지는 투명하게 만드는 방법은 여기 제로보드에도 쓰이고 있죠

그런데 Background 로 쓰기에는 그 스크립트가 안 통하죠.

그러나 CSS 로 쉽게 해결할수 있습니다.

뭐 아시는 분들은 이미 다 아시겠지만요 ㅎㅎ

레이아웃의 그림자 같은 경우 Background 로 지정해서 컨탠츠에 따라서 커지고 작아지고에 따라서 계속 보여지게 해야 하죠.

PNG 로 그 그림자를 지정하면 아주 깨끗하고 깔끔하게 나오기 때문에 PNG 를 쓰는게 좋죠.

아래 소스만 있으면 모든 브라우저에서 투명하게 나오게 됩니다

view plaincopy to clipboardprint? <style> <!-- #header_middle{ margin:auto; width:426px; background:url(images/box_02.png) repeat; background-position:center top; font-family:dotum; font-size:12px; padding:0px 30px 0px 30px; } * html #header_middle { background:url(images/blank.gif) no-repeat; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="images/box_02.png", sizingMethod="scale"); } --> </style> <style> <!-- #header_middle{ margin:auto; width:426px; background:url(images/box_02.png) repeat; background-position:center top; font-family:dotum; font-size:12px; padding:0px 30px 0px 30px; } * html #header_middle { background:url(images/blank.gif) no-repeat; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src="images/box_02.png", sizingMethod="scale"); } --> </style>

나와 있는대로 div 에 id 값을 지정해주면 투명 png 로 보여집니다.

또한 IE 6 에서 투명하게 나오기 위해산 *html #header_middle 이 작동하기 위해서는

blank.gif 투명 gif 가 있어야 합니다.

by Anna 안나 2008. 4. 5. 22:42
일반 사용자에게는 쓰기 폼만 보여주고 목록은 관리자만 보게 한다면
무언가를 센청 혹은 제출하는 메뉴를 매우 쉽게 만들 수 있습니다.

게시판 입장에서 보자면
일반 회원 - 쓰기만
관리자 - 모든 기능

이렇게 정리가 되는 것이죠.
제로보드 기본 스킨을 가지고 구현해 보겠습니다.

1. 쓰기 페이지의 주소
신청 게시판의 mid가 qna라면, 신청 메뉴에
/zbxe/?mid=qna&act=dispBoardWrite
이렇게 링크를 걸면 됩니다.

2. 권한 설정
게시판 권한 설정에서 쓰기를 제외한 모든 권한을 관리자에게만 줍니다.
이렇게 하지 않으면 위의 게시판의 경우 일반 사용자가
/zbxe/qna 이렇게 접속해서 다 볼 수도 있겠죠.

3. 스킨 수정 1 - 글 작성 후 안내 메시지
이제 일반 사용자가 글을 작성하면
쓰기 버튼을 누른 직후 어떠한 메시지도 없이
'권한이 없습니다'라는 메시지를 접하게 될 것입니다.
오류가 있거나 매우 불친절한 홈페이지라고 생각하게 되겠죠.
수정해봅시다.

기본 스킨의 board.js 파일을 열면 맨 먼저 나오는 함수가 completeDocumentInserted()입니다.
이 함수 마지막 줄에 location.href = url; 이라고 나오는 부분을 주석 처리합니다.
그리고 이렇게 써넣습니다.

//location.href = url;

alert('신청이 완료되었습니다.');
completeReload(ret_obj);

이제 사용자가 쓰기 버튼을 누르면 위에 적은 안내 문구가 뜬 후 다시 쓰기 페이지로 돌아오게 될 것입니다.


4. 스킨 수정 2 - 비밀번호 제거
이런 일회성 폼에는 비밀번호가 필요 없습니다.
제거하는 방법은 두가지가 있는데,
하나는 그냥 write_form.html에서 비밀번호 필드를 삭제하고
filter/insert.xml에서 패스워드 항목을 찾아 required="true"라는 부분을 제거하는 것입니다.
하지만 이렇게 해서 비밀번호 없는 게시물을 만든다는 게 별로 좋은 발상이 아닌 것 같습니다.
만에 하나 실수로 스킨을 변경한다거나 할 경우 무슨 일이 일어날지 모르기 때문입니다.
그래서 여기서는 다른 방법을 쓰겠습니다.
write_form.html을 열고

<input type="password" name="password" value="" id="userPw" class="userPw inputTypeText" />

이것을

<input type="hidden" name="password" value="{@$time = time()}{$time}" />

이렇게 바꿉니다.
또 is_secret 옵션을 입력받는 부분을 찾아

<input type="hidden" name="is_secret" value="Y" />
이렇게 바꿉니다.

이렇게 해 두면 올라오는 모든 게시물이 비밀글 & 다른 비밀번호를 가지게 되어
혹시라도 있을지 지 모르는 상황에서도 어느정도 게시물 내용을 보호할 수 있게 됩니다.
by Anna 안나 2008. 4. 5. 22:39
바로 전의 게시물인 "업로드된 그림 자동 출력" 소스를 이용하여 특정게시판에서 업로드된 그림을 자동으로 출력하는 방법입니다.

1. zbxe설치폴더/moudles/board/skins/xe_board/skin.xml파일의 ine 92아래줄에 소스를 삽입한다. <var name="auto_img_insert" type="select">
<title xml:lang="ko">본문 자동 이미지삽입</title>
<title xml:lang="jp">본문 자동 이미지삽입</title>
<title xml:lang="zh-CN">본문 자동 이미지삽입</title>
<title xml:lang="en">본문 자동 이미지삽입</title>
<default>N</default>
<default>Y</default>
<description xml:lang="ko">
첨부파일이 이미지 파일이면 자동으로 본문에 삽입하시겠습니까?
</description>
</var>
2. zbxe설치폴더/moudles/board/skins/xe_board/view_document.html파일의 line 105의 {$oDocument->getContent()}를 지우고 아래의 소스를 삽입한다. **** 이부분은 상단의 조건식만 제외하고 소마세월님의 "업로드된 그림 자동 출력" 소스 소스입니다***** <!--@if($module_info->auto_img_insert!='N')-->
{@ $uploaded_list = $oDocument->getUploadedFiles() }
<!--@foreach($uploaded_list as $key => $file)-->
{@$file_explode=explode(".",strtoupper($file->source_filename))}
<!--@if($file_explode[1]=="GIF" || $file_explode[1]=="JPG" || $file_explode[1]=="PNG" || $file_explode[1]=="BMP")-->
{@$picture.="<p align=center><img src='".$file->uploaded_filename."' style='' editor_component='image_link' /><br /></p>"}
<!--@end-->
<!--@end--> <!--@if($picture)-->
{@ $cont=$oDocument->get('content')}
{@ $oDocument->add('content',$cont.$picture)}
<!--@end--> {$oDocument->getContent()}
<!--@else-->
{$oDocument->getContent()}
<!--@end--> 3. 1.과2.의 과정을 수행하시고 게시판 설정에 가시면
((-------IMAGE-------))
본문 자동 이미지 삽입 에 "Y"로 하시면 첨부파일이 그림파일이면 자동으로 본문에 그림이 삽입됩니다.
by Anna 안나 2008. 4. 5. 22:38
안녕하세요..

업로드된 그림 자동출력 해주는 쏘스 입니다.

처음 소스 보다 더 편한 소스 입니다. 본문삽입 효과와 같은 쏘스 입니다.

소스는 간단합니다..
각 모듈의 스킨 디렉토리에 있는 view_document.html 파일 수정 하시면 되는데요

94번째 줄부터
<!--@else-->
{$oDocument->getContent()}
<!--@end-->
라는 소스가 있습니다..
여기를 수정하세요

기본 게시판 수정 하시는것 보다는 겔러리 스킨을 받으셨다면.. 거기에서 수정하세요

그냥 게시판에 했다가는 마음대로 글을 못쓰는 불행이 찾아 올지도.......
(무조껀 그림이 출력 되버리니 난감해질수밖에..=ㅁ=;)
<!--@else-->
{@ $uploaded_list = $oDocument->getUploadedFiles() }
<!--@foreach($uploaded_list as $key => $file)-->
{@$file_explode=explode(".",strtoupper($file->source_filename))}
<!--@if($file_explode[1]=="GIF" || $file_explode[1]=="JPG" || $file_explode[1]=="PNG" || $file_explode[1]=="BMP")-->
{@$picture.="<img src='".$file->uploaded_filename."' style='' editor_component='image_link' /><br />"}
<!--@end-->
<!--@end-->

<!--@if($picture)-->
{@ $cont=$oDocument->get('content')}
{@ $oDocument->add('content',$cont.$picture)}
<!--@end-->

{$oDocument->getContent()}
<!--@end-->

이렇게만 하면.. 본문 삽입과 같은 효과를 발휘 합니다.
그림파일이 들었으면 무조껀 출력합니다.
by Anna 안나 2008. 4. 5. 22:36
용도
게시판 목록에 확장 변수에 입력한 값을 출력할 필요가 있을 때

목록에 확장 변수 값을 최대 20개 까지 표시할 수 있습니다.

적용 방법
확장 변수 출력용 스킨을 새로 만듭니다.(xe_list 스킨 복사)
새로운 스킨명 예: xe_extra

1. skin.xml
<title>~~ 값을 바꿔 스킨 이름이 중복 되지 않도록 합니다.

최하단의 </var> 밑에 아래의 새로운 옵션을 추가합니다.
<var name="display_extra_value1" type="select">
<title xml:lang="ko">확장 변수 표시</title>
<default>N</default>
<default>1</default>
<default>2</default>
<default>3</default>
<default>4</default>
<default>5</default>
<default>6</default>
<default>7</default>
<default>8</default>
<default>9</default>
<default>10</default>
<default>11</default>
<default>12</default>
<default>13</default>
<default>14</default>
<default>15</default>
<default>16</default>
<default>17</default>
<default>18</default>
<default>19</default>
<default>20</default>
<description />
</var>


2. list.html
줄 번호는 다를 수 있으므로 소스(출력 순서)를 잘 보고 삽입에 주의하세요.

17번 줄에 다음 줄을 삽입합니다.
<!--@if(is_int($module_info->display_extra_value1))--><col width="70" /><!--@end-->

삽입 후 50번대 줄에 다음 줄을 삽입합니다.
<!--@if($module_info->display_extra_value1!='N')--><th class="extra" scope="col">{$module_info->extra_vars[1]->name}</th><!--@end-->

삽입 후 115번 줄에 다음 줄을 삽입합니다.
<!--@if($module_info->display_extra_value1!='N')--><td class="extra">{$document->getExtraValue(1)}</td><!--@end-->


3. css/common.css
다음 두 줄을 적당한 곳에 삽입하세요.
.boardList th.extra { white-space:nowrap; }
.boardList td.extra { font:1em Tahoma; color:#999999; text-align:center;}


※ 사용 방법

스킨을 업로드 후, 모듈의 스킨을 변경합니다(예: xe_extra)

1. 확장 변수 편집에서 변수를 설정합니다.(권장: TEXT, SELECT, URL 등 한 줄 텍스트 입력이 있는 폼)
((-------IMAGE-------))


2. 스킨 관리 탭에서 출력을 원하는 확장 변수 번호를 선택합니다.
((-------IMAGE-------))
by Anna 안나 2008. 4. 5. 22:33
사이트 좌측에 있는 2차메뉴를 만드는 방법입니다.

1. 먼저 사용하는 스킨의 zbxe/layouts/사용스킨/layout.html 을 편집기로 열어서 아래의 부분을 찾아서 바꿉니다.
변경전 파일은 xe_official의 default.css를 예로 들었습니다.

[변경전]
<!-- 왼쪽 2차 메뉴 -->
<img src="./images/blank.gif" alt="" class="mask" />
<!--@if($menu_1st)-->
<ol id="lnb">
{@ $idx = 1 }
<!--@foreach($menu_1st['list'] as $key => $val)--><!--@if($val['link'])-->
<li <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['link']}</a>
<!-- main_menu 3차 시작 -->
<!--@if($val['list'] && ($val['expand']=='Y'||$val['selected']) )-->
<ul>
<!--@foreach($val['list'] as $k => $v)--><!--@if($v['link'])-->
<li <!--@if($v['selected'])-->class="on"<!--@end-->><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$v['link']}</a></li>
<!--@end--><!--@end-->
</ul>
<!--@end-->
</li>
{@$idx++}
<!--@end--><!--@end-->
</ol>
<!--@end-->
[변경후] - 수정됨
<!-- 왼쪽 2차 메뉴 -->
<div id="lnb_t">
&nbsp;&nbsp;&nbsp;{$menu_1st['text']}
</div>

<!--@if($menu_1st)-->
<ol id="lnb">
{@ $idx = 1 }
<!--@foreach($menu_1st['list'] as $key => $val)--><!--@if($val['text'])-->
<li <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->><img src="./images/default/bullet14.gif" align="absmiddle">&nbsp;{$val['text']}</a>
<!-- main_menu 3차 시작 -->
<!--@if($val['list'])-->
<ul>
<!--@foreach($val['list'] as $k => $v)--><!--@if($v['text'])-->
<li <!--@if($v['selected'])-->class="on"<!--@end-->><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->><img src="./images/default/bulletD0.gif" align="absmiddle">&nbsp;{$v['text']}</a></li>
<!--@end--><!--@end-->
</ul>
<!--@end-->
</li>
{@$idx++}
<!--@end--><!--@end-->
</ol>

<div id="lnb_b">
</div>
2. 사용하는 스킨의 zbxe/layouts/사용스킨/css/해당칼라.css 을 편집기로 열어서 아래의 부분을 찾아서 바꿉니다.

[변경전]
#lnb { border-top:1px solid #dddddd; padding:4px 5px; width:190px;}
#lnb li { padding-bottom:4px; list-style:none; }
#lnb li a { padding:6px 5px 6px 13px; width:170px; display:block; border:1px solid #e8e8e8; background:url(../images/default/bgLnbOff.gif) repeat-x; color:#3e3e3e; position:relative; z-index:99; text-decoration:none;}
#lnb li a:hover,
#lnb li a:focus { color:#ffffff; background:#de4332; border:1px solid #de4332;}
#lnb li.on a { color:#ffffff; background:#de4332; border:1px solid #de4332;}
#lnb li.on a:hover,
#lnb li.on a:focus { font-weight:bold;}
#lnb li ul { display:block; position:relative; width:184px; padding:0 3px; position:relative; border-top:1px solid #ffffff; overflow:hidden;}
#lnb li.on ul { display:block;}
#lnb li ul li { padding:0; border-top:1px solid #f2f2f2; position:relative; top:-1px;}
#lnb li ul li a { padding:6px 5px 6px 10px; width:169px; color:#818181 !important; border:none; background:none !important; border:none !important;}
#lnb li ul li a:hover,
#lnb li ul li a:focus { font-weight:normal !important; color:#de4332 !important;}
#lnb li.on ul li.on a { color:#ff1a00 !important; font-weight:bold !important; background:url(../images/default/bulletLnb.gif) no-repeat 175px center !important;}
[변경후]
/* 하위2차메뉴 버턴이미지 */
#lnb_t { border-top:5px solid #fff; padding:25px 5px 0px 5px; width:190px; height:57px; background:url(../images/default/zt.gif) no-repeat; font-size:18px; font-weight:bold; text-decoration:none; color:#fff; font-family:"돋움", Dotum, "굴림", Gulim, AppleGothic, Sans-serif; }

#lnb { border-top:0px solid #dddddd; padding:0px 0px; width:200px; background:url(../images/default/zm.gif) repeat-y;}
#lnb li { padding-bottom:0px; list-style:none; }
#lnb li a { padding:10px px 5px 25px; width:175px; display:block; border:0px solid #000; color:#de4332; position:relative; z-index:99; text-decoration:none;}
#lnb li a:hover,
#lnb li a:focus { padding:10px 0px 0px 25px; width:175px; height:16px; display:block; border:0px solid #e8e8e8; background:url(../images/default/bgLnbOn.gif) no-repeat center; color:#f60; position:relative; z-index:99; text-decoration:none; }
#lnb li a { padding:10px 0px 0px 23px; width:177px; height:16px; display:block; border:0px solid #e8e8e8; background:url(../images/default/bgLnbOn.gif) no-repeat center; color:#090; position:relative; z-index:99; text-decoration:none; }
#lnb li.on a { padding:10px 0px 0px 25px; width:175px; height:16px; display:block; border:0px solid #e8e8e8; color:#f60; font-weight:bold; background:url(../images/default/bgLnbOn.gif) no-repeat center; position:relative; z-index:99; text-decoration:none; }

#lnb li ul { display:none; position:relative; width:200px; padding:0 0px; position:relative; border-top:0px solid #ffffff; overflow:hidden;}
#lnb li.on ul { display:block;}
#lnb li ul li { padding:0; border-top:0px solid #f2f2f2; position:relative; top:-1px;}
#lnb li ul li a { padding:10px 0px 0px 0px; width:200px; color:#C0C0C0 !important; border:none; background:none !important; border:none !important;}
#lnb li ul li a:hover,
#lnb li ul li a:focus { font-weight:normal !important; color:#de4332 !important;}
#lnb li.on ul li.on a { color:#808080 !important; font-weight:bold !important; !important;}

#lnb_b { border-top:0px solid #dddddd; padding:0px 5px 0px 5px; width:190px; height:34px; background:url(../images/default/zb.gif) no-repeat;}
3. 위의 내용에서 빨간색으로 표시된 부분들이 이미지들입니다. 샘플을 올리니 그대로 사용하셔도 되고 변형하셔도 됩니다.
bullet14.gif -- 2차메뉴앞 ((-------IMAGE-------))
bulletD0.gif -- 3차메뉴앞 ((-------IMAGE-------))
bgLnbOn.gif -- 메뉴아래 언더라인 (이것을 잘 변형하면 메뉴버턴형식으로 사용가능)((-------IMAGE-------))
((-------IMAGE-------))zt.gif -- 상단이미지
((-------IMAGE-------))zm.gif -- 중간이미지
((-------IMAGE-------))zb.gif -- 하단이미지
(클릭하시면 다운받습니다) board.psd 포토샵 이미지도 같이 올립니다.


# 2월14일 첨부 #

#lnb li a:focus { padding:10px 0px 0px 25px; width:175px; height:16px; display:block; border:0px solid #e8e8e8; background:url(../images/default/bgLnbOn.gif) no-repeat center; color:#f60; position:relative; z-index:97; text-decoration:none; }
#lnb li a { padding:10px 0px 0px 23px; width:177px; height:16px; display:block; border:0px solid #e8e8e8; background:url(../images/default/bgLnbOff.gif) no-repeat center; color:#090; position:relative; z-index:96; text-decoration:none; }
#lnb li.on a { padding:10px 0px 0px 25px; width:175px; height:16px; display:block; border:0px solid #e8e8e8; color:#f60; font-weight:bold; background:url(../images/default/bgLnbVr.gif) no-repeat center; position:relative; z-index:95; text-decoration:none; }

빨간색부분의 이미지들을 위와 같이 따로 만들어서 적용하면 마우스움직임따라 이미지가 변합니다. (이홈피에 적용)

* 수정버전에서 변경된부분 (알고나니 너무나 간단하네요*.*)
[변경전]
<!-- 왼쪽 2차 메뉴 -->
<ol id="lnb_t">
&nbsp;&nbsp;&nbsp;{$menu_1st['text']}
</ol>

중간부분 생락

<ol id="lnb_b">
</ol>
[변경후]
<!-- 왼쪽 2차 메뉴 -->
< div="lnb_t">
&nbsp;&nbsp;&nbsp;{$menu_1st['text']}
</div>

중간부분 생락

<div id="lnb_b">
</div>

by Anna 안나 2008. 4. 5. 22:21
빨갛게 표시된 부분만 잘 보시면 됩니다. 나머지는 잡설입니다.

제로보드 사이트를 잘 살펴보면 두 종류의 메뉴가 사용된 것을 알 수 있습니다. 방문자에게 컨텐츠를 제공하는 상단과 우측의 메뉴 한 종류와 홈페이지 운영과 관계된 내용을 연결하는 하단의 메뉴 한 종류 해서 두 가지 메뉴가 사용되고 있습니다.
이 팁에서는 이와같이 두 종류 이상의 메뉴를 생성하고 연결하는 방법을 기본 레이아웃인 xe_official과 제로보드 사이트를 예를 들어 소개하겠습니다.

보통 레이아웃과 메뉴를 연동하기 위해서는 다음의 과정을 거칩니다.
1. info.xml 에서 메뉴에 대한 변수를 설정
2. 관리자 페이지에서 메뉴를 생성
3. 레이아웃 생성시에 메뉴와 변수를 연결시킴
4. layout.html에서 변수를 불러옴

1번과 4번은 레이아웃 제작자가 신경 쓸 부분이고 2번과 3번은 레이아웃 사용자가 신경 써야 할 부분이죠.

0. 메뉴 구상
- 아래와 같이 제로보드 홈페이지 상단 및 좌측에 나타나는 컨텐츠와 연결되는 main menu 와
하단에 나타나는 사이트 운영과 관계된 bottom menu 로 메뉴로 구성할 예정입니다.
((-------IMAGE-------))

1. info.xml에서 메뉴 변수 설정
레이아웃을 만들 때 conf폴더에 있는 info.xml은 보통 별로 신경을 쓰지 않습니다. 하지만 이 파일에서
레이아웃에 필요한 여러가지 확장변수를 설정할 수 있으므로 잘 사용한다면 매우 유용할 것입니다.
여기서 우리가 다루게 될 메뉴 부분은 info.xml 파일내에 <menus>... </menus>로 구분되어 있습니다. <menus>
<menu name="main_menu" default="true">
<title xml:lang="ko">상단 메뉴</title>
<maxdepth>3</maxdepth>
</menu>
<menu name="bottom_menu">
<title xml:lang="ko">하단 메뉴 </title>
<maxdepth>1</maxdepth>
</menu>
</menus> 하위 메뉴를 포함하는 한 개의 메뉴집단(또는 덩어리?)은 <menu name="...">...</menu> 부분과 일대일 대응됩니다.
우리는 상단 및 우측 메뉴 와 하단 메뉴 이렇게 두 개의 메뉴를 사용 할 것이므로 <menu> 태그가 두 개 필요합니다.
더 많은 종류의 메뉴를 사용할 것이라면 여기에서 <menu> 부분을 그 만큼 더 정의해주면 됩니다.
menu태그의 name 속성은 중요합니다. 나중에 layout에서 불러 쓸 이름이 되므로 고유하게 붙여줘야 합니다.
(<menu> 태그의 name은 layout.html에서 사용될 변수명이라고 생각하시면 됩니다.)
default="true" 는 정확히 무슨 뜻인지 모르겠습니다만, 여기서는 있으나 없으나 별 차이 없을거 같은 생각이 듭니다.
<title>은 관리자페이지에서 레이아웃 생성시에 메뉴 항목에 표시되는 제목입니다.
레이아웃을 쓰는 사람이 알기 쉽게 하는 것이 좋겠네요.
<title> 부분 바로 아래에 <description xml:lang="ko">설명</description> 을 추가하여 제목에 설명서를 달아도 될거 같은데
해보지 않아서 정확하지 않습니다.
<maxdepth>3</maxdepth>는 메뉴의 단계(깊이?) 입니다. 즉 3단계까지의 메뉴를 만들거라는 이야기입니다.

2. 관리자 페이지에서 메뉴 생성하기
메뉴 생성하는 방법은 다들 아실거라고 생각되므로 따로 설명드리지 않겠습니다.
다만 '0.메뉴구상' 에서 보신 것같이 main, bottom 두 개의 메뉴를 만들어 주면 됩니다.
이 때 메뉴 이름은 위의 name에서 정한 것과 일치하지 않아도 됩니다. 자신이 알기쉽게 붙여주면 됩니다.

3. 레이아웃 생성시에 메뉴와 변수를 연길시키기
((-------IMAGE-------))
관리자페이지에서 레이아웃을 생성하면 위와같은 설정화면이 나옵니다. 위 설정화면의 내용은 info.xml에 따라서
달라집니다. 위 그림의 표시된 부분이 info.xml에서 정의한 변수와 생성시킨 메뉴를 각각 연결시켜주는 모습입니다.
"상단 메뉴"는 info.xml의 title에서 정의해준 것이고 그 아래 괄호에 있는 main_menu는 <menu>태그의 name임을
쉽게 알 수 있습니다. 그 옆에 나온 것은 메뉴관리에서 만들어준 메뉴의 이름입니다. 이름을 똑같이 만들었더니
연결하기가 편합니다. <menu>태그를 더 많이 만든다면 "하단 메뉴" 아래로 그 내용이 더 나올 것입니다.

4. layout.html 에서 메뉴 불러다 쓰기
기본 레이아웃인 xe_official의 layout.html중간에 다음과 같은 부분이 있습니다. <!--@foreach($main_menu->list as $key => $val)--> 위의 코드가 바로 info.xml에서 지정한 name을 이용해서 레이아웃 생성시에 연결시킨 메뉴를 불러오는 것입니다.
이제는 붉게 표시된 것이 name에서 정한 이름임을 말하지 않아도 아실 겁니다.
그리고 layout.html 마지막 부분에는 아래와 같은 코드가 있습니다. <!--@foreach($bottom_menu->list as $key => $val)--> 보시다시피 $main_menu 와 $bottom_menu는 생성시킨 메뉴와 연결되는 열쇠가 됩니다.
다른 반복제어문을 쓰더라도 이것들만 있으면 얼마든지 메뉴를 가져다가 쓸 수 있습니다.

지금까지가 메뉴를 가져오는 방법에 대한 설명이었습니다.
"어디다가 어떻게 붙일 것인가"라는 것은 디자인을 어떻게 하고 반복-제어문을 어떻게 다룰 것인가의 문제입니다.
by Anna 안나 2008. 4. 5. 22:13
레이아웃을 조금 수정하고, xml파일에 top_menu 항목을 집어넣어서~
레이아웃에서 톱메뉴 항목을 만들어서 관리할 수 있게 만드는 방법입니다.

아래 그림과 같이 톱메뉴 만드는 방법입니다.

((-------IMAGE-------))

우선 레이아웃의 info.xml 파일을 열어서
맨끝으로 이동하면 그림과 같이 <menus> 관련 스크립트가 있습니다.
그곳에 그림과 같이 만듭니다.

((-------IMAGE-------))

다음으로 Layout.html파일을 수정합니다.

((-------IMAGE-------))

수정/삽입하였으면, 관리자 설정화면으로 가서
메뉴관리에~ 상단톱메뉴를 만들 메뉴항목을 만듭니다.

((-------IMAGE-------))

레이아웃 수정된 곳에 메뉴를 보시면, 아래와 같이 최상단메뉴가 활성화 되어서 나타납니다.
그곳에 위의 top메뉴를 설정하시면, 맨 위에서 보시는바와 같이 나옵니다.

((-------IMAGE-------))

-끝-^_^
by Anna 안나 2008. 4. 5. 22:11
아이디어 게시판에 아래의 기능은 원하는 분들이 있어 올립니다.


지금 현재 카테고리를 사용하는 게시판 모듈에서 글을 작성 할 경우 굳이 카테고리를 지정하여 주지 않아도 글작성이 가능합니다.
글작성시 반드시 카테고리를 선택하게 하는 초 간단 팁입니다.

단. 이팁은 게시판 설정에서 카테고리사용을 체크하시고 분류명(카테고리)을 추가하지 않을경우 글 작성시 논리적인 오류로 글 등록이 되지안습니다.


zbxe/moudles/board/skins/xe_board/filter/insert.xml line 2의 아래부분에 부분의 소스를 삽입한다.
<form>
<node target="nick_name" required="true" />
<node target="password" required="true" />
<node target="email_address" maxlength="250" />
<node target="homepage" maxlength="250"/>
<node target="title" required="true" minlength="1" maxlength="250" />
<node target="content" required="true" />
<node target="category_srl" required="true" />
</form>


-대암지기 님-
by Anna 안나 2008. 2. 26. 14:44
DB를 수정하면 된다는말을 듣고..
phpMyAdmin이 있다는것만 알고 다룰줄은 모르는 초보가..=,.=;;
그냥..도움이라도 될까해서 올려봅니다. (0.2.8이였습니다 ㅇ_ㅇ)



일단 DB관리하러 ((-------IMAGE-------))로 들어갑니다..
자기 DB를 클릭하시구요.
((-------IMAGE-------))((-------IMAGE-------))((-------IMAGE-------))((-------IMAGE-------))

이상..ㅋㅋ;;
내용만 길어보이려고 스샷까지 하는군요.. -,.-;;;;
이만.. 감사합니다. ㅎㅎ

오류나는건 없었네요..ㅎ
by Anna 안나 2008. 2. 26. 14:42
오늘은 메뉴를 설정하고 활용하는 방법에 대해 올립니다.
미리 말씀드리는데 많이 빈약합니다;


들어가기 전에.. ( if 문을 아시면 건너뛰세요 )
내용 보기... 닫기
혹시나 해서 if문에 대한 간단한 예제 하나 들어보고 가겠습니다.


<!--@if($layout_info->title)-->홈타이틀이 등록 되어 있습니다.<!--@end-->

무슨 뜻일까요. $layout_info->title 의 내용이 있으면 "홈타이틀이 등록 되어 있습니다." 라는 문구가 출력됩니다.


<!--@if(!$layout_info->title)-->홈타이틀이 등록 되어 있지 않습니다.<!--@end-->

$layout_info->title 의 내용이 없으면 "홈타이틀이 등록 되어 있지 않습니다." 라는 문구가 출력됩니다.


하나로 합쳐 볼까요?

<!--@if($layout_info->title)-->
홈타이틀이 등록 되어 있습니다.
홈타이틀은 "{$layout_info->title}" 입니다.
<!--@else-->
홈타이틀이 등록 되어 있지 않습니다.
<!--@end-->


하나 더 예를 들겠습니다.

{@ $a = "10" }
{@ $b = "5" }

$a = {$a}
$b = {$b}

$a + $b = {$a + $b}
$a - $b = {$a - $b}
$a * $b = {$a * $b}
$a / $b = {$a / $b}

<!--@if($a > $b)-->
{@ $c = $a - $b }
$a가 $b보다 {$c} 만큼 큽니다.
<!--@elseif($a == $b)-->
$a와 $b는 같습니다.
<!--@else-->
{@ $c = $b - $a }
$b가 $a보다 {$c} 만큼 큽니다.
<!--@end-->


여기까지 하고 이제 메뉴를 다뤄 보도록 하겠습니다. 직접 작성해 보시면 쉽습니다.


zbxe 레이아웃에서 메뉴 사용 절차.

(1) chochobo 레이아웃의 info.xml 에서 사용할 메뉴의 정보을 작성.

(2) chochobo 레이아웃관리페이지에서 미리 구성된 메뉴를 연결.

(3) layout.html 에서 등록한 메뉴를 불러온 후, 입맛(?)에 맞게 수정하여 사용.



위 세 단계만 거치면 됩니다. 차례대로 자세히 알아보죠.

(1) chochobo 레이아웃의 info.xml 에서 사용할 메뉴의 정보을 작성합니다.

zbxe/chochobo/conf/info.xml 파일을 열어 밑 부분을 보시면,
<menus>
<menu name="main_menu" default="true">
<title xml:lang="ko">메인 메뉴</title>
<maxdepth>3</maxdepth>
</menu>
</menus>

위 부분이 있습니다. <extra_vars>와 </extra_vars> 사이에 내용물 리스트 추가 했던거 기억 나시죠?
메뉴도 <menus>와 </menus> 사이에 비슷한 방식으로 추가 작성하면 됩니다.
대충 살펴 볼까요?

name은 영문으로 작성하시되 다른 <menu>의 name과 중복되면 안됩니다. 이 name을 이용해 메뉴를 불러와야 하니까요.
default=true 는 레이아웃에 사용할 기본메뉴라는 것을 말하는 것이고요, 기본메뉴는 하나면 되겠죠?
maxdepth 는 레이아웃에서 지원하는 메뉴의 최대 단계(depth)를 말합니다.

홈 (1단계메뉴)
커뮤니티 (2단계뉴)
자유게시판 (3단계메뉴)
질답게시판 (3단계메뉴)

이런 메뉴가 있다면 depth가 3 입니다.

가령, depth가 1인 하단 메뉴(name: bottom_menu)를 추가한다면 아래와 같이 작성 하시면 됩니다.

<menus>
<menu name="main_menu" default="true">
<title xml:lang="ko">메인 메뉴</title>
<maxdepth>3</maxdepth>
</menu>
<menu name="bottom_menu">
<title xml:lang="ko">하단 메뉴</title>
<maxdepth>1</maxdepth>
</menu>
</menus>


이렇듯 메뉴의 수가 많으면 레이아웃 작성하는데 손은 고생하겠지만 레이아웃에서 사용할 수 있는 메뉴의 수는 제한이 없다고 할 수 있습니다.


(2) chochobo 레이아웃관리페이지에서 미리 구성된 메뉴를 연결.

info.xml에서 지정한 name 을 가진 메뉴에 연결할 메뉴를 선택하시고 저장 하세요.
여기까지면 기본적인 설정은 끝이고 layout.html에서 불러와서 사용하는 것만 남았습니다.


(3) layout.html 에서 등록한 메뉴를 불러온 후, 입맛(?)에 맞게 수정하여 사용.

메뉴를 구성하는 부분에 대한 설명 부분인데 내용이 많이 빈약합니다.
(4)로 바로 가셔서 몇 개의 메뉴 타입 중 필요한 것만 복사-붙이기 신공으로 이용하셔도 되겠습니다.

먼저 우리가 info.xml 에서 등록한 main_menu 라는 name 을 가진 메뉴를 불러오도록 하겠습니다.
우선 가장 기본적인 형태의 1단계 메뉴를 불러오는 공식입니다.

<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<a href="{$val['href']}">{$val['text']}</a>
<!--@end--><!--@end-->
일단, foreach 문은 배열값을 가진 변수를 이용한 반복문인데요(정확할라나;;;;) 가장 중요한 것은 빨간 글씨 부분입니다. info.xml에서 지정해줬던 name 값을 그대로 적어 주셔야 합니다. 그리고 foreach도 if와 같이, 쓸 때는 꼭 <!--@end-->로 끝을 알려줘야 합니다. 두 사항만 조심하시고
나머지 메뉴의 사용과 관련해 여러분들이 주로 이용할 부분은 흰색 바탕의 많이 보던 태그 부분 입니다.

위 공식 3 줄만 작성하면
예전에는 아래처럼 손수 작성해야할
메인메뉴를 구성하는 모든 메뉴의 정보와 링크가 자동으로 생성 됩니다.

<a href="http://chochobo.com/zbxe/">홈</a>
<a href="http://chochobo.com/zbxe/notice">공지사항</a>
<a href="http://chochobo.com/zbxe/freeboard">자유게시판</a>

편리하죠? 메뉴의 수가 많아질수록 그 위력을 발휘할 것입니다.

공식에서 info.xml 에서 작성한 다른 name 으로만 바꾼다면 해당되는 메뉴의 리스트가 출력됩니다.

메뉴를 다루는데 있어 여러분이 알아두면 유용한 변수가 몇 가지 있습니다.
$val['node_srl'] : 메뉴의 노드 시리얼 (자신이 속한 상위메뉴를 지정할 때 사용할 수 있다. 트리메뉴 응용 및 적용시 유용하다.)
$val['text'] : 메뉴의 이름 (ex. 자유게시판)
$val['href'] : 메뉴의 경로 (ex. http://chochobo.com/zbxe/mid=freeboard)
$val['url'] : 메뉴의 mid 값 (ex. freeboard)
$val['seleted'] : 사용자에 의해 선택된(클릭된) 메뉴인가를 알수 있게 해준다.
$val['expand'] : 메뉴 "펼침" 옵션이 체크된 상태인가. 펼침 체크 됐으면 Y , 아니면 N 값을 갖으며 N 가 기본값.
$val['open_window'] : 메뉴 "새창 열기" 옵션이 체크된 상태인가. 새창 열기 체크 됐으면 Y , 아니면 N 값을 갖으며 N 가 기본값.
$val['normal_btn'] : 해당 메뉴의 일반 이미지 경로.
$val['hover_btn'] : 해당 메뉴의 마우스오버 이미지 경로.
$val['active_btn'] : 해당 메뉴의 선택시 이미지 경로.
참고. 현재 zbxe는 아직 자체적으로 이미지메뉴기능을 제공하고 있지는 않습니다. 하지만 레이아웃 제작자가 지원할 수는 있습니다. 시간이 된다면 이미지메뉴 지원하는 메뉴 부분을 구성해보도록 하겠습니다.


이 정도만 둘러보기로 하구요, 메뉴를 좀 더 알아보고 싶은 분은 아래 내용보기을 클릭하고 보세요. 초초보님들 천천히 읽어보시고 이해안되면 그냥 스킵하세요. 어차피 메뉴 부분은 css 조금만 알면 복사-붙이기 신공으로 얼마든지 커버 가능합니다.

더 보기... 닫기
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<a href="{$val['href']}">{$val['text']}</a>
<!--@end--><!--@end-->

1) 위 기본 공식에 앞 시간에 링크를 통해 소개했던 리스트를 표현하는 태그인 <ul>, <li> 태그만 추가하면

<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}">{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

위와 같이 변형됩니다. 메뉴도 일종의 리스트니 ul li 태그를 이용해서 묶습니다. 각각의 li 에 background 나 a 속성을 지정해줄 수 있어 얼마든지 변화무쌍한 활용이 가능합니다.

2) <!--@if($val['selected'])-->class="on"<!--@end--> 무슨 뜻일까요? 만약 이 메뉴를 선택한다면(클릭한다면) class 이름이 on 인 스타일을 적용하라는 뜻입니다. chobo.css 파일에서 on 클래스의 스타일을 지정 해주면 됩니다. 그래서

<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}">{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

이렇게 바뀝니다. 메뉴를 선택해도 메뉴 모양을 바꾸고 싶지 않을 때는 사용하지 않는 부분 입니다.

3) <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end--> 무슨 뜻일까요? 만약 새창 열기 값이 Y (freeboard 메뉴 작성시 새창 열기에 체크 했으면) 이면 새창으로 여는 스크립트를 출력하라는 것입니다. 이것도 적용해보면,

<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li <!--@if($val['selected'])-->class="on"<!--@end-->><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

4) 지금 메인메뉴는 1단계 밖에 없는데, 2단계, 3단계 메뉴를 추가로 넣으면 어떻게 불러 오나요?
일단, 단순화 시켜서 예를 들겠습니다.

1차메뉴 :

<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
{@ $menu_1st = $val }
<li><a href="{$val['href']}">{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

2차 메뉴 :

<ul>
<!--@foreach($menu_1st['list'] as $key => $val)--><!--@if($val['text'])-->
{@ $menu_2nd = $val }
<li><a href="{$val['href']}">{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

3차 메뉴 :

<ul>
<!--@foreach($menu_2nd['list'] as $key => $val)--><!--@if($val['text'])-->
{@ $menu_3rd = $val }
<li><a href="{$val['href']}">{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>

이제 공식이 보이죠? 여기까지 해서 메뉴가 출력되는 부분에 대해서 대충 이해하도록 하구요, 아래 여러가지 메뉴 타입을 참고로 잘 활용하시기 바랍니다.

(4) 여러 가지 메뉴 타입 제시.

info.xml 에 name 이 "main_menu" 인 3단계로 구성된 메뉴를 기준으로 작성합니다.


1) 1단계 타입 : 제로보드 홈페이지의 하단 메뉴처럼 1단계 메뉴만 사용하실 때 쓰시면 됩니다.


<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>


2) 1단계 - 2,3 단계 타입1 : 제로보드의 메인메뉴에 쓰이는 메뉴 형태 입니다. 2차 메뉴를 선택해야 3차 메뉴가 나오죠.

<!-- main_menu 1차 시작 -->
<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--@if($val['selected'])-->{@ $menu_1st = $val }<!--@end-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>
<!-- main_menu 2차 시작 -->
<!--@if($menu_1st)-->
<ul>
<!--@foreach($menu_1st['list'] as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a>

<!-- main_menu 3차 시작 -->
<!--@if($val['selected'])-->
<!--@foreach($val['list'] as $k => $v)--><!--@if($v['text'])-->
<li><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$v['text']}</a></li>

<!--@end--><!--@end-->
<!--@end-->
</li>
<!--@end--><!--@end-->
</ul>
<!--@end-->


3) 1단계 - 2,3단계 타입2 : 제로보드의 메인메뉴에 쓰이는 메뉴 형태지만 2차 메뉴 선택에 상관 없이 3차 메뉴가 모두 출력됩니다.

<!-- main_menu 1차 시작 -->
<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<!--@if($val['selected'])-->{@ $menu_1st = $val }<!--@end-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>
<!-- main_menu 2차 시작 -->
<!--@if($menu_1st)-->
<ul>
<!--@foreach($menu_1st['list'] as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a>

<!-- main_menu 3차 시작 -->
<!--@if($val['list'])-->
<!--@foreach($val['list'] as $k => $v)--><!--@if($v['text'])-->
<li><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$v['text']}</a></li>
<!--@end--><!--@end-->
<!--@end-->
</li>
<!--@end--><!--@end-->
</ul>
<!--@end-->


4) 1,2 단계 - 3단계 타입 : 1,2단계는 먼저 보여주고, 2단계 메뉴를 선택하면 선택한 2단계 메뉴에 속한 3단계 메뉴를 따로 보여줍니다.

<!-- main_menu 1차 시작 -->
<ul>
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a>

<!-- main_menu 2차 시작 -->
<!--@if($val['list'])-->
<!--@foreach($val['list'] as $k => $v)--><!--@if($v['text'])-->
<!--@if($v['selected'])-->
{@ $menu_2nd = $v }
<!--@end-->
<li><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$v['text']}</a></li>

<!--@end--><!--@end-->
<!--@end-->
</li>
<!--@end--><!--@end-->
</ul>
<!-- main_menu 3차 시작 -->
<!--@if($menu_2nd)-->
<ul>
<!--@foreach($menu_2nd['list'] as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a></li>
<!--@end--><!--@end-->
</ul>
<!--@end-->

5) 1,2,3 단계 타입 : 모든 메뉴리스트를 순서대로 출력합니다. 트리메뉴를 만드는데 유용한 타입 입니다.

<ul>
<!-- 1단계 메뉴 시작 -->
<!--@foreach($main_menu->list as $key => $val)--><!--@if($val['text'])-->
<li><a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$val['text']}</a>

<!-- 2단계 메뉴 시작 -->
<!--@foreach($val['list'] as $ke => $va)--><!--@if($va['text'])-->
<li><a href="{$va['href']}" <!--@if($va['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$va['text']}</a>

<!-- 3단계 메뉴 시작 -->
<!--@foreach($va['list'] as $k => $v)--><!--@if($v['text'])-->
<li><a href="{$v['href']}" <!--@if($v['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end-->>{$v['text']}</a></li>

<!--@end--><!--@end-->
</li>
<!--@end--><!--@end-->
</li>
<!--@end--><!--@end-->
</ul>

또 어떤 형태가 더 있을까요? 올려주시면 작성해 넣도록 하겠습니다.

보기에 복잡하지만, 여러분들이 손댈 것은
1. 1단계 메뉴에 info.xml 에서 지정한 메뉴의 name 을 정확히 기재하는 것과
2. 각 타입의 회색 바탕의 3줄 정도의 내용을 활용하는 것입니다.

이번에는 조금이라도 쉽게 설명 드리기가 너무 어렵네요. ㅠㅠ

초초보레이아웃의 메뉴를 3단계까지 구성하시고 위의 몇가지 타입의 코드들을 layout.html에 복사-붙이기 하신 후 잘나오나 직접 확인해 보세요. 미리보기 클릭

다음 시간에는 본문 불러오는 방법과 가장 기본적인 레이아웃 하나 예시하고 팁 게시를 마치도록 하겠습니다.
기본적인 레이아웃을 보면 메뉴에 대해 감이 더 올거라 생각합니다.
by Anna 안나 2008. 1. 23. 17:14
| 1 2 |