ExtJS JSON Store Class
Posted On 2008/07/09 23:15, Filed Under WEB/ExtJS
ExtJS 그리드를 만들때마다 store 를 작성해야 하는데,
헤더랑 포맷 맞추기가 귀찮다.
필드와 데이터만 넣어주면 ExtJS 예제에 나오는 형식과 같은 형식으로 배열을 만들어준다.
헤더랑 포맷 맞추기가 귀찮다.
필드와 데이터만 넣어주면 ExtJS 예제에 나오는 형식과 같은 형식으로 배열을 만들어준다.
<?php
/**
* EXTJS JSON STORE Formatting Class
*/
class ExtStore {
/**
* json 으로 출력하기 위한 데이터
*/
private $_data = array();
/**
* 데이터의 fields 목록
*/
private $_fields = array();
/**
* 데이터 fields 수
*/
private $_fields_count = 0;
/**
* 클래스 생성자.
* json 출력 데이터의 헤더를 설정한다.
*
* @return void
*/
public function __construct() {
$this->_data['metaData']['totalProperty'] = 'results';
$this->_data['metaData']['root'] = 'rows';
$this->_data['metaData']['id'] = 'id';
$this->_data['metaData']['fields'] = array();
$this->_data['results'] = 0;
$this->_data['rows'] = array();
}
/**
* id, fields 를 설정한다.
*
* @param string $name - 값을 저장하기 위한 식별자
* @param string $data - 클래스 내부의 변수에 지정할 데이터
* @return void
*/
private function __set( $name, $data ) {
switch( $name ) {
case 'id':
$this->_data['metaData']['id'] = $data;
break;
case 'fields':
$this->_data['metaData']['fields'][]['name'] = $data;
$this->_fields[] = $data;
$this->_fields_count++;
break;
}
}
/**
* ext로 출력하기 위한 배열을 받아 형식에 맞추어 저장한다.
* 배열은 2차 배열 키가 fields 에 등록한 값과 같아야 한다.
*
* @param array $data - 실제 데이터 배열
* @return void
*/
public function data( $data ) {
if (is_array($data) === true) {
$iDataLength = count( $data );
$this->_data['results'] = $iDataLength;
for ($iLoop = 0; $iLoop < $iDataLength; $iLoop++) {
for ($iLoopSub = 0; $iLoopSub < $this->_fields_count; $iLoopSub++) {
$field = $this->_fields[$iLoopSub];
$this->_data['rows'][$iLoop][$field] = $data[$iLoop][$field];
}
}
}
}
/**
* 등록된 데이터를 json 으로 인코딩하여 반환한다.
*
* @return string $JSON_DATA
*/
public function display() {
$JSON_DATA = json_encode( $this->_data);
return $JSON_DATA;
}
}
?>