위젯의 동작이해
위젯은 페이지 모듈이나 관리자가 직접 입력한 레이아웃에 <img /> 저장됩니다. 위젯코드가 웹페이지 호출시에 Display Class 의 display.before 부분에서 trigger를 이용하여 widgetController::triggerWidgetCompile() 이 <img />로 저장된 코드가 해당 위젯의 proc()가 실행 됩니다. 이때 <img />의 attribute 값들이 해당 위젯의 Class의 member method proc()의 arguments로 전달되어 템플릿 코드가 html으로 변환되어 보여 지게 됩니다.
값을 받기 위한 extra_vars
위젯에도 관리자가 동적으로 추가하는 부분이 생기게 됩니다. 예를 들어 위젯 스킨은 white로 또는 black으로 타이틀의 색은 파란색으로, 또는 어떤 게시판, 이미지 출력시에는 가로 넓이가 몇 사이즈 등 입력해야할 항목이 있습니다. 이런 부분들에 대해 Widget의 conf/info.xml에서 <extra_vars>에 추가하면 자동으로 입력폼을 만들어 줍니다.
- text
- textarea
- select
- select-multi-order
- mid
- mid_list
- menu
text/textarea
html의 <input="text"> 와 <textarea>로 생각하면 되는 타입니다.
<var id="확장변수의 변수명">
<type>text</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
select
selectbox의 option을 위한 <options>가 추가 되어 있습니다.
<var id="확장변수의 변수명">
<type>select</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
<options>
<value>선택1의 값</value>
<name xml:lang="ko">선택1의 출력될 이름</name>
</options>
<options>
<value>선택2의 값</value>
<name xml:lang="ko">선택2의 출력될 이름</name>
</options>
</var>
select-multi-order
mutli select방식으로 다중 선택 및 순서를 받을 때 사용합니다.
<options>에 init atturibute 값이 true이면 초기값으로, default atturibute 값이 true이면 그 항목은 꼭 선택되어야 하는 항목입니다.
<var id="확장변수의 변수명">
<type>select-multi-order</type>
<name xml:lang="ko">타이틀 이름</name>
<options default="false" init="true">
<value>선택1의 값</value>
<name xml:lang="ko">선택1의 출력될 이름</name>
</options>
<options>
<value>선택2의 값</value>
<name xml:lang="ko">선택2의 출력될 이름</name>
</options>
<options init="true">
<value>선택3의 값</value>
<name xml:lang="ko">선택3의 출력될 이름</name>
</options>
</vars>
mid
특정 mid 하나를 받는 타입입니다.
<var id="확장변수의 변수명">
<type>mid</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
module_srl_list
content 위젯과 같이 어려 게시판 등을 선택할때 사용합니다. 특정 여러개의 module_srl를 받는 타입입니다.
<var id="확장변수의 변수명">
<type>module_srl_list</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
menu
navigation 위젯과 같이 menu를 선택하기 위한 타입입니다.
<var id="확장변수의 변수명">
<type>menu</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
위젯 class 규칙
WidgetHandler를 상속하는 위젯명으로 class를 선언합니다. member method proc를 만들고 proc의 argument는 extra_vars로 설정된 값들이 stdClass로 들어오게 됩니다. 예를 들어에서 info.xml에 <extra_vars>에 지정한 값이 selected_module_srl와 extra_vars_list 는 각각 $args->selected_module_srl과 $args->extra_vars_list로 들어옵니다. 그리고 스킨(skin)값도 들어오게 됩니다.
또 proc의 return은 template 핸들러로 템플릿을 컴파일하여 html를 string으로 리턴하면 됩니다.
<?
class 위젯명 extends WidgetHandler{
function proc($args){
.. 위젯 구현 ..
// 템플릿의 스킨 경로를 지정 (skin, colorset에 따른 값을 설정)
$tpl_path = sprintf('%sskins/%s', $this->widget_path, $args->skin);
Context::set('colorset', $args->colorset);
// 템플릿 파일명
$tpl_file = 'html확장자를 제외한 템플릿 파일명';
$oTemplate = &TemplateHandler::getInstance();
return $oTemplate->compile($tpl_path, $tpl_file);
}
}
?>