확장변수의 기능을 편집/추가 하여 게시판에서 활용할 수 있게 하는 방법 입니다.


회사 홈페이지 작업하다가 필요하여 수정했습니다.


확장변수 수정할 파일의 경로는 


XE 설치된 곳의 classes/extravar/Extravar.class.php 파일 입니다.


그리고 lang 파일도 수정을 해야 합니다.


lang 파일의 위치는 common/lang/lang.xml 파일 입니다.


해당 파일들을 열어서 편집을 하면 됩니다.



예로 시간을 입력하는 부분을 select box로 구성해서 시/분 선택을 하는 폼을 만들어 보겠습니다.


lang.xml 파일을 열어서 <item name="date"> 부분을 찾아서 그 아래에 하나 추가해 줍니다.



<item name="date">

<value xml:lang="ko"><![CDATA[일자(연월일)]]></value>

<value xml:lang="en"><![CDATA[date(yyyy/mm/dd)]]></value>

<value xml:lang="jp"><![CDATA[日付(年月日)]]></value>

<value xml:lang="zh-CN"><![CDATA[日期(年月日)]]></value>

<value xml:lang="zh-TW"><![CDATA[日期(年月日)]]></value>

<value xml:lang="fr"><![CDATA[Jour(yyyy/mm/dd)]]></value>

<value xml:lang="de"><![CDATA[Datum(dd / mm /jjjj)]]></value>

<value xml:lang="ru"><![CDATA[Дата(гггг / мм / дд)]]></value>

<value xml:lang="es"><![CDATA[fecha(dd/mm/aaaa)]]></value>

<value xml:lang="tr"><![CDATA[tarih(gg/aa/yyyy)]]></value>

<value xml:lang="vi"><![CDATA[Ngày(yyyy/mm/dd)]]></value>

<value xml:lang="mn"><![CDATA[Онсар (Жил сар өдөр)]]></value>

</item>

<item name="s_time">

<value xml:lang="ko"><![CDATA[시간입력(시:분)]]></value>

<value xml:lang="en"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="jp"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="zh-CN"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="zh-TW"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="fr"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="de"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="ru"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="es"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="tr"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="vi"><![CDATA[Custom_Edit(Time_Input)]]></value>

<value xml:lang="mn"><![CDATA[Custom_Edit(Time_Input)]]></value>

</item>



위에 내용을 복사해서 똑같이 입력합니다. 이 부분이 확장변수 추가할 때 나올 화면/내용 입니다.


item name에는 본인이 사용할 이름/변수명 을 입력하면 됩니다. 저는 예로 작성하기에 s_time 으로 했습니다. 

아래에 value 값에 시간입력(시:분)으로 했습니다.

그 아래에 해당 언어별 표시될 나라별 언어인데 너무 귀찮아서 그냥 Custom이라고 적는 통일했습니다. 어차피 저만 사용할 것이라서 

나라별 또는 이렇게 대충 하는 것을 원치 않으시는 분은 그냥 구글번역기로 해당 나라별 언어로 작성하시면 됩니다.


그리고 저장!


그 다음 classes/extravar/Extravar.class.php 파일을 열어서 작업을 시작 합니다.


편집/추가를 해야하는 구간은 


function _getTypeValue($type, $value) 부분 (대략 197번 줄 쯤...)


function getValueHTML() 부분 (대략 400 줄 쯤 ...)


function getFormHTML() 부분 (대략 480 줄 쯤....)


위의 부분들을 찾아서 수정을 해야 합니다.



우선 시간을 입력/출력 하는 폼을 만들어 보겠습니다.


select box로 시 부분을 00 부터 23 까지 선택하는 부분과 분 선택하는 곳은 00 부터 59 까지 선택을 할 수 있는 폼 입니다.


getFormHTML() 부분으로 가서 


swith case 부분 중 중간에 하나 더 아래와 같이 삽입 합니다.


case 구분은 lang에서 설정했던 이름/변수명 s_time 으로 설정한 후 내용을 작성합니다.


case 's_time' :

//$default 는 사용자정의 기본값 배열로 , 게시판에서 사용자정의 추가후 내용구분을 , 표시로 입력한 Array

//$value 는 array로 입력 되었던 값이 저장된 Array

//저는 게시판에서 00부터 수동으로 개별적으로 입력하는 것이 아니라 자동으로 생성되게 작업 했습니다.


$default = array(); // 변수 배열 초기화


//for 문으로 시 부분을 만들었습니다. 0 부터 24까지 루프 돌면서 배열에 순서대로 입력

for($i=0;$i<24;$i++)

{

//0부터 9사이의 i 값이면 보기 좋게 두자리로 표기하기 위해 한자리 수 0~9는 앞에 0을 붙여서 00, 01, 02 으로 입력되게 처리

if($i<=9)

{

$ie = "0".$i;

}

else

{

$ie = $i;

}


array_push($default, $ie);

}

$buff[] = '<select name="' . $column_name . '[]" class="select">';

$buff[] = '  <option value="">--</option>';

foreach($default as $v)

{

$selected = '';

if($value[0] && trim($v) == $value[0])

{

$selected = ' selected="selected"';

}

$buff[] = '  <option value="' . $v . '" ' . $selected . '>' . $v . '</option>';

}

$buff[] = '</select><span> 시 &nbsp; : &nbsp; </span>';


$buff[] = '<select name="' . $column_name . '[]" class="select">';

$buff[] = '  <option value="">--</option>';


//아래는 분을 위해서 다시 배열 초기화 후 루프로 0 부터 59까지 배열입력


$default = array();


for($i=0;$i<60;$i++)

{

if($i<=9)

{

$ie = "0".$i;

}

else

{

$ie = $i;

}

array_push($default, $ie);

}


foreach($default as $v)

{

$selected = '';

if($value[1] && trim($v) == $value[1])

{

$selected = ' selected="selected"';

}

$buff[] = '  <option value="' . $v . '" ' . $selected . '>' . $v . '</option>';

}

$buff[] = '</select><span> 분</span>';


//$buff[] = '<p>value 값:</p><p>' . $value[1] . '</p>';

//$buff[] = '<p>defualt 값:</p><p>' . $default . '</p>';


break;




위와 같이 입력 후 다음 처리할 부분으로 넘어 갑니다.


다음으로 이동 할 곳 은 getValueHTML() 부분으로 이동합니다.


넘어온 배열 값을 출력해주는 부분으로 s_tiem의 경우 시, 분 만 표시해주면 되기에 이 곳도 동일하게 switch case구분 중 중간에 하나 더 추가해 줍니다.


case 's_time' : // s_time 시간기능 추가


return sprintf('%s:%s', $value[0], $value[1]);


넘어온 값을 %s:%s 되어 있는 곳에 $value[0], $value[1] 식으로 시, 분값으로 넘어와 %s 에 순서대로 출력이 됩니다.


" %s 시  : %s 분 " 이렇게 해도 됩니다.



그리고 다음으로 _getTypeValue($type, $value) 부분으로 가서 switch case 부분에 case를 하나 더 추가 합니다.


값을 가지고 와서 배열에 어떻게 저장해서 넘길지 처리 하는 부분 입니다.


case 's_time' : //s_time 시간기능 추가


if(is_array($value))

{

$values = $value;

}

elseif(strpos($value, '|@|') !== FALSE)

{

$values = explode('|@|', $value);

}

elseif(strpos($value, ',') !== FALSE)

{

$values = explode(',', $value);

}


//echo "value 값 : ".$values[0]; //테스트 할 때 값이 어떻게 오나 확인하려고 했던 부분 입니다. 주석처리!!


return $values;



위와 같이 하나 추가하면 끝이 납니다.


그리고 게시판에 자신이 만든 폼을 추가해서 테스트 하면 됩니다.


위와 같이 활용하면 다양하게 만들 수 있습니다.



?

로그인 후 사용가능 합니다.CLOSE