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)} </td>
<!--@end-->
</tr>
<!--@end-->
</tbody>
</table>
Context::set()으로 템플릿에 전달한 extra_key_list와 oDocumentItemList를 받아 html table의 head와 body를 만드는 코드입니다.
위 클래스와 템플릿 파일명이 명시가 안되어있네요.
예제파일을 다운받으면 되긴하지만 여기도 적혀있는게 좋을듯...^^
감사합니다.