위젯은 페이지 모듈이나 관리자가 직접 입력한 레이아웃에 <img /> 저장됩니다. 위젯코드가 웹페이지 호출시에 Display Class 의 display.before 부분에서 trigger를 이용하여 widgetController::triggerWidgetCompile() 이 <img />로 저장된 코드가 해당 위젯의 proc()가 실행 됩니다. 이때 <img />의 attribute 값들이 해당 위젯의 Class의 member method proc()의 arguments로 전달되어 템플릿 코드가 html으로 변환되어 보여 지게 됩니다.
위젯에도 관리자가 동적으로 추가하는 부분이 생기게 됩니다. 예를 들어 위젯 스킨은 white로 또는 black으로 타이틀의 색은 파란색으로, 또는 어떤 게시판, 이미지 출력시에는 가로 넓이가 몇 사이즈 등 입력해야할 항목이 있습니다. 이런 부분들에 대해 Widget의 conf/info.xml에서 <extra_vars>에 추가하면 자동으로 입력폼을 만들어 줍니다.
html의 <input="text"> 와 <textarea>로 생각하면 되는 타입니다.
<var id="확장변수의 변수명">
<type>text</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
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>
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 하나를 받는 타입입니다.
<var id="확장변수의 변수명">
<type>mid</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
content 위젯과 같이 어려 게시판 등을 선택할때 사용합니다. 특정 여러개의 module_srl를 받는 타입입니다.
<var id="확장변수의 변수명">
<type>module_srl_list</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
navigation 위젯과 같이 menu를 선택하기 위한 타입입니다.
<var id="확장변수의 변수명">
<type>menu</type>
<name xml:lang="ko">타이틀 이름</name>
<description xml:lang="ko">해당확장변수 설명</description>
</var>
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확장자를 제외한 템플릿 파일명';