확장변수 출력(extra_vars) 위젯 class 만들기

documentModel의 인스턴스를 받아 documentModel::getDocumentList()를 이용해 선택된 게시판의 최근 목록과 documentModel::getExtraKeys()를 이용해 확장변수 키들을 가져와 알맞게 가공하여 Context::set() 함수로 템플릿에 전달합니다.

확정변수 출력 위젯은 게시판 확장변수의 키 이름확장변수 값 목록을 구하는 두가지를 구현하면 됩니다.

./widgets/extra_vars/extra_vars.class.php

<?php
    /**
     * @class extra_var
     * @author sol (sol@ngleader.com)
     * @brief extar_var를 출력하는 위젯
     * @version 0.1
     **/

    class extra_vars extends WidgetHandler {

        /**
         * @brief 위젯의 실행 부분
         *
         * ./widgets/위젯/conf/info.xml 에 선언한 extra_vars를 args로 받는다
         * 결과를 만든후 print가 아니라 return 해주어야 한다
         **/

        function proc($args) {

            // 출력된 목록 수
            $args->list_count = (int)$args->list_count;
            if(!$args->list_count) $args->list_count = 5;

            // 게시물을 가져옴
            $obj->module_srl = $args->selected_module_srl;
            $obj->list_count = $args->list_count;

            $oDocumentModel = &getModel('document');
            $output = $oDocumentModel->getDocumentList($obj, true);
            if(!$output->toBool()) return ''+ ';
            Context::set('oDocumentItemList'+ ',$output->data);


            // 확장변수 정보를 가져옴
            $selected_extra_keys = explode(',',$args->extra_vars_list);
            $selected_extra_keys_list = array();
            $extra_keys = $oDocumentModel->getExtraKeys($module_srl);
            if($extra_keys){
                foreach($extra_keys as $k => $extra_key){
                    $i = array_search($extra_key->eid, $selected_extra_keys);
                    if($i!==false){
                        $selected_extra_key_list[$i] = $extra_key;
                    }  
                }  
            }  
            Context::set('extra_key_list',$selected_extra_key_list);

            // 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
            $tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
            Context::set('colorset', $args->colorset);

            // 템플릿 파일을 지정
            $tpl_file = 'extra_vars';

            // 템플릿 컴파일하여 html로 return
            $oTemplate = &TemplateHandler::getInstance();
            return $oTemplate->compile($tpl_path, $tpl_file);
        }  
    }  

?>

템플릿 파일 작성

레이아웃이나 모듈스킨을 만들 때와 같은 방법으로 템플릿 문법을 이용하여 작성하면 됩니다.

./widgets/extra_vars/skins/스킨명/extra_vars.html

<table>
    <thead>
    <tr>
        <!--@foreach($extra_key_list as $j => $extra_key)-->
        <td>{$extra_key->name}</td>
        <!--@end-->
    </tr>
    </thead>
    <tbody>
    <!--@foreach($oDocumentItemList as $i => $oDocument)-->
    <tr>
        <!--@foreach($extra_key_list as $j => $extra_key)-->
        <td>{$oDocument->getExtraEidValue($extra_key->eid)}&nbsp;</td>
        <!--@end-->
    </tr>
    <!--@end-->
    </tbody>
</table>

Context::set()으로 템플릿에 전달한 extra_key_list와 oDocumentItemList를 받아 html table의 head와 body를 만드는 코드입니다.


profile

씨지

2010.11.25 12:13:18
*.10.175.181

위 클래스와 템플릿 파일명이 명시가 안되어있네요.
예제파일을 다운받으면 되긴하지만 여기도 적혀있는게 좋을듯...^^

감사합니다.

profile

씨지

2010.11.25 12:35:15
*.10.175.181

core 1.4.4.1 에다가 ~r7883 설치해봤는데..
페이지모듈에서 작동시켜보니 아무런 내용이 표시되지 않고있습니다.

음...