head	1.6;
access;
symbols;
locks
	root:1.6; strict;
comment	@# @;


1.6
date	2010.03.22.09.25.41;	author root;	state Exp;
branches;
next	1.5;

1.5
date	2009.12.08.01.06.41;	author root;	state Exp;
branches;
next	1.4;

1.4
date	2009.12.08.00.19.11;	author root;	state Exp;
branches;
next	1.3;

1.3
date	2009.12.08.00.18.35;	author root;	state Exp;
branches;
next	1.2;

1.2
date	2009.12.08.00.17.37;	author root;	state Exp;
branches;
next	1.1;

1.1
date	2009.11.24.02.03.15;	author root;	state Exp;
branches;
next	;


desc
@/opt/nforge/var/wiki/easylogiclib/data/text/php_2elang_2eData
@


1.6
log
@124.111.236.22;;cyberuls easylogic ;;
@
text
@= 생성 =
{{{#!vim php
<?php
$data = data_($connector, $fields, $rows);
or
$data = new Data($connector, $fields, $rows);
?>
}}}

== fields, rows ==
 * fields 는 필드 이름 리스트이고 순서는 정확해야한다. 
 * rows는 레코드 전체 데이타이며 2차 배열이다.

== fields 구성하기 ==
{{{#!vim php 
<?php 

// 배열형태로 구성 
$data->setFields(array("이름","국어","영어","수학"));  

// 낱개 형태로 구성 
$data->addField("이름"); 
$data->addField("국어");
$data->addField("영어");
$data->addField("수학");
?>
}}}

== rows 구성하기 ==
rows는 2차원 배열이다. 필드명을 키로 가지고 있는다. 
{{{#!vim php  
<?php 
 $array = array(
    array("이름" => "박진호", "국어" => 20, "영어" => 3, "수학" => 4),
    array("이름" => "박소영", "국어" => 22, "영어" => 30, "수학" => 4),
    array("이름" => "박양수", "국어" => 25, "영어" => 32, "수학" => 5),
    array("이름" => "성대용", "국어" => 200, "영어" => 33, "수학" => 0),
 );
?>
}}}

위와 같은 데이타를 setRows() 메소드를 이용해서 넣으면 된다. 

{{{#!vim php 
<?php $data->setRows($array); ?>
}}}

'''[주의] 이렇게 하면 원래 있던 데이타는 모두 없어지고 새로 들어온 데이타로 셋팅이 된다. '''
데이타를 변경하지 않고 추가를 하고 싶으면 아래와 같이 하면 된다. 
{{{#!vim php 
<?php 
$data->setRows($array, true);
or 
$data->appendRows($array);  // 구현 예정 

 ?>
}}}

이전 데이타는 그대로 보존이 되고 이전 데이타에 현재 데이타를 그대로 추가시킨다.

== rows 구성하기 2번째 == 
한개의 레코드를 따로 따로 등록하는 방법이다. 

{{{#!vim php 
<?php
$array = array(
    array("이름" => "박진호", "국어" => 20, "영어" => 3, "수학" => 4),
    array("이름" => "박소영", "국어" => 22, "영어" => 30, "수학" => 4),
    array("이름" => "박양수", "국어" => 25, "영어" => 32, "수학" => 5),
    array("이름" => "성대용", "국어" => 200, "영어" => 33, "수학" => 0),
);
foreach ($array as $record) { 
   $data->add($record);
}
?>
}}}

레코드를 마지막에 계속 추가한다. 기존 데이타는 그대로 보존이 된다.

== 리스트 조회 ==
Data 객체에서 각각의 record가 있는 부분은 index 로서 표현이 되고 아무것도 가리키고 있지 않을 때는 -1, 첫번째 레코드 인덱스는 0 이 된다. 
기본 배열의 인덱스 개념이랑 같다. 


==  값 얻어오기 == 
최초 Data 객체를 생성한 후 값을 얻어오면 아무것도 얻어 올 수가 없다. 왜냐하면 index가 -1을 가리키고 있기 때문이다. 

{{{#!vim php
<?php
$data = data_($connector, array(....), array(...));
$국어 = $data->get("국어");
echo $국어; 
?>
}}}

위의 소스는 아무것도 안 찍힐 것이다. 이럴때는 인덱스를 한칸 전진 시키면 값이 나온다. 인덱스가 실제로 레코드의 위치를 가르켜야 하기 때문이다. 

{{{#!vim php
<?php
$data->next(); // 인덱스를 한칸 전진 시킨다 
echo $data->get("국어"); 
?>
}}}

데이타가 잘 나온다.

== 값 얻어오기 2번째 == 
일단 값을 얻어 오는 방법은 

{{{#!vim php
<?php
// 메소드 형태 
$data->get("국어"); 

// 필드 형태 
$data->국어;

// 배열 형태 
$data["국어"]; 
?>
}}}

위와 같은 3가지 방법이 있다. 

 * 첫번째 get() 메소드로 얻어 오는 방법은 기본값을 지정할 수 있다. 
{{{#!vim php
<?php $data->get("국어", 10);?>
}}}
 
이렇게 하면 ''국어'' 필드에 대한 값이 없을 때 ''10'' 이란 값을 리턴해준다. 

 * 두번째 필드명으로 바로 얻어 오는 방법은 
__get 메소드를 불러서 내부적으로 get 메소드를 다시 부르는 형태이다. 즉, get() 메소드랑 같은 형태이다.다만 값이 없으면 '''공백'''으로 리턴해준다. 
''(__get 메소드는 클래스에 없는 속성 또는 공개되지 않는 속성 (public이 아닌 속성) 을 부를 때 자동으로 실행해주는 메소드이다. php 5.0 부터 추가되었다.)''

 * 세번째 필드명을 배열형태로 쓰는 방법은 두번째와 마찬가지로 get() 메소드를 호출 하면서 이루어진다. (이 기능은 ArrayAccess 인터페이스를 구현함으로써 자동으로 구현된다. php5 기능이다.)

=== 값얻어오기 3번째 ===
{{{#!vim php
<?php
$arr = $data->gets(); 
echo $arr["국어"];
?>
}}}

현재 인덱스에서 레코드의 배열을 바로 얻어올려면 gets() 메소드를 사용하면 된다. 
연관배열 형태로 데이타를 가지고 오며 배열에 있는 기본 인덱스는 소문자로 구현된다.

{{{#!vim php
<?php
// index 0번째 레코드 리턴 
$data->getRows(0); 

// 첫번째 레코드 리턴 
$data->getFirst(); 

// 마지막 레코드 리턴 
$data->getLast(); 
?>
}}}

=== 리스트 순회 === 
{{{#!vim php
<?php
// 1. 메소드 사용하기 
while($data->next()) { 
   echo $data->get("love");
   $data->set("love", 5);
}

// 2. 속성 사용하기 
while($data->next()) { 
   echo $data->love;
   $data->love = 5;
}
?>
}}}

== 리스트 순회 2번째 ==
{{{#!vim php
<?php
// index -1 로 이동 
$data->init();

// index 0으로 이동 
$data->moveFirst(); 

// 마지막 index로 이동
$data->moveLast(); 
?>
}}}

=== 레코드 현재 위치 검색하기 === 
{{{#!vim php
<?php
// 현재 위치 검색, -1 이면 커서가 움직이지 않은 상태 
echo $data->getIndex();

// 인덱스가 -1 인지 체크 
echo $data->isInit();

// 인덱스가 0 인지 체크 
echo $data->isFirst();

// 인덱스가 마지막 레코드 인지 체크 
echo $data->isLast();
?>
}}}


== 리스트 조회 두번째 (유용한 부가기능) ==

여기서는 Data 클래스의 기본 기능 이외의 좀 더 Database 관점에서 사용 할 수 있는 몇가지 부가기능을 소개합니다. 부족하지만 많이 봐주세요. 

=== 특정 필드값 리스트(배열) 얻어오기 ===
{{{#!vim php
<?php
// 숫자를 인덱스로 하는 배열 
// array("값1", "값2", "값3");
echo $data->getColumnList("value_field");

// 데이타가 key, value 쌍으로 이루어져 있는 배열을 리턴 
// array("필드1" => "값1", "필드2" => "값2", "필드3" => "값3");
echo $data->getColumnList("value_field", "key_field");
?>
}}}

=== 템플릿으로 구성하기 ===
{{{#!vim php
<?php
// 현재 레코드 위치에서 '''국어''' 필드와 '''수학''' 필드의 값을 적용한 문자열을 돌려준다. 
// 예를 들어 국어 = 10, 수학 = 20 일 때 
// 리턴되는 결과값은 "10-20" 이라는 문자열을 리턴해준다. 
echo $data->template("{국어}-{수학}");   // "10-20"
?>
}}}

필드는 {필드} 중괄호 형태로 구분한다.

=== 템플릿 실행된 값 얻어오기 ===

run 메소드를 사용해서 실제 php 문법의 계산식으로 구성된 템플릿을 실행한 값을 리턴해준다. 

{{{#!vim php
<?php
// 국어 = 10, 수학 = 20 일 경우 
// 10 -20 의 결과 값 -10 을 리턴해준다. 
// 들어가는 형태는 템플릿 문법이랑 같은 형태이다.  
echo $data->run("{국어}-{수학}");  // -10
?>
}}}
=== Data 객체 정렬하기 === 
{{{#!vim php
<?php
$data->sort(array("field1" => SORT_DESC, "field2" => SORT_ASC));
$data->sort(array("field1" => "desc", "field2" => "asc"));
?>
}}}

기본적으로 위와 같은 형태의 정렬만 지원을 한다. 필드는 몇개를 적어도 상관이 없고 그 나머지에 따른 정렬 방식만 지정해주면 된다. 
sort를 하면 내부적으로 데이타의 순서가 바뀌기 때문에 같은 데이타이면서 정렬된 데이타를 얻고 싶으면 따로 Data 객체를 생성해서 작업을 해야한다. 

{{{#!vim php
<?php
// 원본 
$data = data_(null, array(..), array(..)); 

// 정렬된 복사본 얻기 
$data2 = data_()->setData($data)->sort( .. 정렬옵션 .. );
?>
}}}

가끔 데이타베이스에 의존하지 않고 기존의 데이타를 정렬해야 할 필요가 있을 때 쓴다.

== 화면 출력 ==
{{{#!vim php
<?php
// 테이블 태그로 출력하기 
echo $data->toString();
or
echo $data;

// 쉘화면(점선형태)으로 출력하기 
echo $data->toScreen();
or
echo $data->screen();
?>
}}}

== 데이타 형태로 변환 == 
{{{#!vim php
<?php
// xml 형태로 출력 
echo $data->toXml();

// json 형태로 출력 
// { 'field' : [], 'row' : [{..},{..},{..}] }
echo $data->toJSON(); or echo $data->toJSON("all");

// 필드만 json 형태로 출력 
echo $data->toJSON("field");

// 레코드만 json 형태로 출력 
echo $data->toJSON("row");
?>
}}}

== GroupBy 형태로 데이타 생성 ==
 * 설명 부족 
@


1.5
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d228 1
a228 1
== 템플릿으로 구성하기 ===
@


1.4
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d7 1
@


1.3
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d106 1
a106 1
== '''값 얻어오기 2번째 '''== 
@


1.2
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d84 1
a84 1
==  '''값 얻어오기''' == 
@


1.1
log
@118.219.84.10;;cyberuls easylogic ;;
@
text
@d2 2
a3 2
 
<php>
d7 1
a7 1
</php>
d10 2
a11 2
 fields 는 필드 이름 리스트이고 순서는 정확해야한다. 
 rows는 레코드 전체 데이타이며 2차 배열이다.
d14 2
a15 2

<php>
d25 2
a26 1
</php>
a28 1

d30 2
a31 2
 
<php>
d38 2
a39 1
</php>
d43 3
a45 1
<php>$data->setRows($array); </php>
d49 5
d55 2
a56 1
<php>$data->setRows($array, true); </php>
a60 1

d63 2
a64 1
<php> 
d74 2
a75 1
</php>
a79 1

a84 2


d87 2
a88 1
<php> 
d92 2
a93 1
</php>
d97 2
a98 1
<php>
d101 2
a102 1
</php>
a106 2


d109 2
a110 1
<php> 
d119 2
a120 1
</php>
d124 4
a127 2
첫번째 get() 메소드로 얻어 오는 방법은 기본값을 지정할 수 있다. 
<php> $data->get("국어", 10);</php>
d131 1
a131 1
두번째 필드명으로 바로 얻어 오는 방법은 
d135 1
a135 1
세번째 필드명을 배열형태로 쓰는 방법은 두번째와 마찬가지로 get() 메소드를 호출 하면서 이루어진다. (이 기능은 ArrayAccess 인터페이스를 구현함으로써 자동으로 구현된다. php5 기능이다.)
d138 2
a139 2

<php> 
d142 2
a143 1
</php>
d148 2
a149 1
<php> 
d158 2
a159 1
</php>
d162 2
a163 1
<php>
d175 2
a176 1
</php>
d179 2
a180 2

<php> 
d189 2
a190 1
 </php>
d193 2
a194 2

<php>
d206 2
a207 1
</php>
d215 2
a216 3

<php>

a220 1

d224 2
a225 2

</php>
d228 2
a229 2

<php> 
d234 2
a235 1
</php>
d243 2
a244 2
<php>

d249 2
a250 3

</php>

d252 2
a253 2

<php>
d256 2
a257 1
</php>
d262 2
a263 1
<php>
d269 2
a270 1
</php>
d275 2
a276 2

<php>
d286 2
a287 2
</php>

d290 2
a291 2

<php>
d304 2
a305 1
</php>
d308 1
@
