이것저것

ZBXE 팁

ForceCore 2008. 12. 28. 17:58
다른 곳에 쓴 내부 문서인데 긁어왔다.
또 쓰기 귀찮아서.



우선은 홈페이지 레이아웃을 만들어야 한다.
레이아웃이 뭔지, 홈페이지 레이아웃은 어떻게 만드는지는 하찮아서(?) 다루지 않겠다.
다만 현재 레이아웃은 나름 잘 만들었다고 믿기 때문에 잘 보존하라고 당부하고 싶다.

zbxe/layouts/force
zbxe/layouts/current -> zbxe/layouts/force
이렇게 되어있다.
왜 이렇게 했는가...

zbxe/layouts/layout1
zbxe/layouts/layout2
zbxe/layouts/layout3
...
이렇게 여러가지 레이아웃이 있다고 하자.
제로보드XE의 관리페이지에서 홈페이지의 레이아웃을  바꿀 수도 있지만 그게 생각보다 만만치 않다. 자칫 잘못하면 노가다를 해서 다 바꿔줘야 하는 상황이 올 수도 있다.
그런 것보다는, current소프트링크의 대상을 바꿔주는 방향으로 가기로 결정해서 저렇게 한 것이다.

레이아웃에서는 메뉴의 위치가 결정된다. 그리고 각 메뉴 항목이 어떻게 출력될지도 결정된다.
어떤 메뉴가 있을지 자체를 결정하진 않는다(관리자들만 보이는 메뉴를 빼곤!)

layout.html을 보자.

상단 메뉴는 이렇게 뜬다:
<!--GNB-->                                                                                                                    <div class="gnb">                                                                                                                 <!-- main_menu 1차 시작 -->
            <!--@foreach($main_menu->list as $key => $val)-->
                <!--@if($val['text'])-->
                    <!--@if($val['selected'])-->
                        {@ $menu_1st = $val }
                    <!--@end-->
                    <img src="images/default/i.png" class="iePngFix" align="middle"/>
                    <a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end--> >{$val['text']}</a>

            <!--@end--><!--@end-->
            <!-- main_menu 1차 끝 -->
        </div>                                                                                                               
        <!--GNB-->
코드 분석은 뭐 대충... ZBXE layout 코딩 문법에 의해 if else, while, for 이런게 있는 거다 -0-;;
그 중에서도 포인트는 $foreach( $main_menu-> 어쩌구 하는 부분이다.
메인메뉴 항목을 forloop으로 돌면서 적절한 형식으로 출력하라는 내용이다.
$main_menu에 뭐가 있을지는... 제로보드 자체의 기능이 결정한다.
http://zbxe.springnote.com/pages/396083
ZBXE의 공식 매뉴얼을 따르면 되겠죠 ㅋ0ㅋ;;
메뉴가 무엇이 어떤 tree 구조로 있을지는 저기서 하면 되는데, 그것을 레이아웃과 연동하는 것은 다른 문제이다.

관리페이지에서 관리모듈 -> 레이아웃 에 들어간다.

이런 식으로 하게 된다.
메뉴를 구성한 것을 "상단 메뉴" "하단 메뉴"에서 정해준다. -_-;;

메뉴 수정을 하는 것을 보면 그래픽 메뉴도 지정할 수 있는 것 처럼 되어 있는데 실제로 그래픽 메뉴를 제대로 사용하는 레이아웃은 보지 못했다 :(
현 레이아웃에서도 생각보다 깔끔하지 못하고 더러워서 그냥 텍스트로 가고 있지만 코드 자체는 comment로 연구되어 있다.

<!--GNB2-->
<!--// 그래픽 버튼 쓰는 법 <a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end--> ><img src="{$val['normal_btn']}"></a> -->
<div id="gnb2" class="round_white">
    <div class="interior">
    <!-- main_menu 2차 시작 -->
    <!--@foreach($bottom_menu->list as $key => $val)-->
        <!--@if($val['selected'])-->
            {@ $menu_2nd = $val }
        <!--@end-->
        <!--//<img src="images/default/i.png" class="iePngFix" align="middle"/>-->
        <a href="{$val['href']}" <!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end--> >{$val['text']}</a>
        <br>
    <!--@end-->
    <!-- main_menu 2차 끝 -->
    </div>
</div>
<!--GNB2-->
2차메뉴...
<!--@if($val['open_window']=='Y')-->onclick="window.open(this.href);return false;"<!--@end--> ><img src="{$val['normal_btn']}"></a> -->
이 부분이 그래픽을 출력하는 곳이다.
{$val['normal_btn']} 이것이 핵심 variable.

또 한. 레이아웃을 메인화면용만 조금 다르다고 새로 레이아웃을 만들어버리면, 리뉴얼 때 레이아웃 변경할 때 매우 힘들 것이다. 그런 고로... 이것도 현재 있는 페이지의 "모듈 명"에 의해 특정 항목이 출력되게 혹은 출력되지 않게 할 수 있다.

<!--//@if($module_info->mid == "main")-->
이런 코드를 쓰면 된다.

마지막으로 회원 레벨에 의해 보이고 안 보이는 항목 (staff 메뉴 같은)을 지정할 수도 있다.
<!--// 관리자만 보이게 하자 -->
<!--// forloop으로 grouplist를 돌아서 502가 발견되면 관리자. -->
{@ $logged_info = Context::get("logged_info") }
<!--@if( $logged_info ) -->
<!--@foreach($logged_info->group_list as $key => $val)-->
<!--@if( $val == "502" )-->
<div id="gnb3" class="round_white">
    <div class="interior">
        나는야 관리자 ㅋ<br>
        <a href="/zbxe/staff_board">관리자 게시판</a>
    </div>
</div>
<!--@end-->
<!--@end-->
<!--@end-->
요렇게!




그 다음으로 알아야 할 것은 widget이다.
현재 메인화면에 공지사항 그림과 제목을 띄우는 것... 이게 위젯이 하는 일이다.
(공지사항 게시판에서 가장 최근 글 한 개를 뽑아서 그 미리보기 그림을 크게 하나 띄우고, 그 제목을 띄우는 역할을 하는 위젯임)
또한, 전단지를 랜덤으로 뿌려주는 "아무거나"메뉴도 위젯에 의존한다.
이 위젯은, 게시판의 글 중 하나를 랜덤으로 뽑아서 화면에 위와 비슷하게 출력해준다.

but... 왜 위젯에 의존하느냐?
제로보드의 게시판 data를 읽어들이는 작업이 필요하기 때문이다.
MySQL을 잘 이용하는 수도 있지만 그보다는 ZBXE의 API를 이용하자는 것이다. 그러기 위해 widget이 존재하는 것이기도 하다.

모듈 작성법도... 사실은 나도 잘 모른다.
그 때문에 뭐라고 설명해주지는 못하겠고,
가장 비슷한 모듈을 찾아서 컨닝하거나, 조금만 수정하거나 하라고 권하고 싶다.save