625 lines
22 KiB
PHP
625 lines
22 KiB
PHP
<?php
|
|
class kcate extends BaseCode {
|
|
public $dmax;
|
|
public $cate_table; //카테고리테이블
|
|
protected $cate_area; //카테고리구분
|
|
public $cate_auth;
|
|
|
|
public function __construct( $cate_table="" ){
|
|
parent::__construct();
|
|
|
|
$this->DB->query_record = false; //query log 기록 금지
|
|
|
|
if( $cate_table ){
|
|
$this->cate_table = $cate_table;
|
|
}else{
|
|
$this->cate_table = TB_cate;
|
|
}
|
|
$this->dmax = 4;
|
|
$this->cate_area = "";
|
|
$this->cate_auth = array("");
|
|
|
|
$this->DB->tableExists($this->cate_table);
|
|
}
|
|
|
|
public function set_cate_area($cate_area){
|
|
$this->cate_area = $cate_area;
|
|
}
|
|
|
|
public function get_cate_area(){
|
|
return $this->cate_area;
|
|
}
|
|
|
|
public function getAreaQry($where=""){
|
|
if( !$where ){
|
|
$where = new DB_where("and");
|
|
}
|
|
if( $this->cate_area ){
|
|
$where->add("cate_area = ?", $this->cate_area);
|
|
}
|
|
return $where;
|
|
}
|
|
|
|
public function getShowQry($where=""){
|
|
if( !$where ){
|
|
$where = new DB_where("and");
|
|
}
|
|
|
|
if( $this->cate_auth ){
|
|
$subwhere = $where->sub_where("or");
|
|
foreach( (array)$this->cate_auth as $val ){
|
|
$subwhere->add("cate_auth = ?", $val);
|
|
}
|
|
}
|
|
|
|
return $where;
|
|
|
|
/*
|
|
switch( $auth ){
|
|
case "1" :
|
|
$valrow = Array("Y","M","S","A");
|
|
break;
|
|
case "2" :
|
|
$valrow = Array("Y","M","S");
|
|
break;
|
|
case "3" :
|
|
$valrow = Array("Y","M");
|
|
break;
|
|
default :
|
|
$valrow = Array("Y");
|
|
break;
|
|
}
|
|
return " and cate_auth in ('".implode("','",$valrow)."') ";
|
|
*/
|
|
}
|
|
|
|
public function new_cate($pa_code, $where=""){ //새 카테고리 추가
|
|
//상위카테고리의 오류확인
|
|
$pa_code = (string)$pa_code;
|
|
$new_pa_code = $pa_code;
|
|
if( $pa_code != 0 && $pa_code != "" && $pa_code != "0" && strlen($pa_code) % $this->dmax != 0 ){
|
|
for( $i = 0 ; $i < $this->dmax - ( strlen($pa_code) % $this->dmax ) ; $i++ ){
|
|
$new_pa_code = "0{$new_pa_code}";
|
|
}
|
|
}
|
|
|
|
if( !$where ){
|
|
$where = $this->getAreaQry();
|
|
}
|
|
$where->add("cate_code like ?", "{$new_pa_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
//주어진 카테고리의 1단계 아래 카테고리 중 최대값 찾음
|
|
$next_len = strlen($new_pa_code) + $this->dmax;
|
|
|
|
$sql = "select max(SUBSTRING(cate_code,1,$next_len)) from {$this->cate_table} where {$whereqry}";
|
|
$pre_cate = $this->DB->queryFirstField($sql, $whererow);
|
|
if( !$pre_cate ){
|
|
$pre_cate = $new_pa_code;
|
|
}
|
|
|
|
//1단계 아래 카테고리가 없을때-Y, 있을-N
|
|
if( $pre_cate == $new_pa_code ){
|
|
for( $i = 0 ; $i < $this->dmax ; $i++ ){
|
|
$pre_cate = $pre_cate."0";
|
|
}
|
|
|
|
$last_up = (string)( (int)substr($pre_cate, -$this->dmax) + 1 );
|
|
$forlen = $this->dmax - ( strlen($last_up) % $this->dmax );
|
|
for( $i = 0 ; $i < $forlen ; $i++ ){
|
|
$last_up = "0".$last_up;
|
|
}
|
|
|
|
$pre_cate = substr($pre_cate, 0, -$this->dmax).$last_up;
|
|
$forlen = ( $this->dmax - ( strlen($pre_cate) % $this->dmax ) ) % $this->dmax;
|
|
for( $i = 0 ; $i < $forlen ; $i++ ){
|
|
$pre_cate = "0".$pre_cate;
|
|
}
|
|
return $pre_cate;
|
|
}else{
|
|
$last_up = (int)substr($pre_cate, -$this->dmax) + 1;
|
|
if( $last_up < pow(10, $this->dmax) ){
|
|
$last_up = (string)$last_up;
|
|
$cnt = $this->dmax - strlen($last_up);
|
|
for( $i = 0 ; $i < $cnt ; $i++ ){
|
|
$last_up = "0".$last_up;
|
|
}
|
|
|
|
$pre_cate = substr($pre_cate, 0, -$this->dmax).$last_up;
|
|
return $pre_cate;
|
|
}else{
|
|
alert("카테고리 허용한도가 초과되었습니다.");
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
public function up_cate($cate_code){ // 상위카테고리 리턴
|
|
return substr($cate_code, 0, strlen($cate_code) - $this->dmax);
|
|
}
|
|
|
|
public function sub_cate($cate_code){ // 하위카테고리 배열 리턴
|
|
$where = $this->getAreaQry();
|
|
$where = $this->getShowQry($where);
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
$where->add("cate_code != ?", $cate_code?:"");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry} order by cate_code";
|
|
$rst = $this->DB->qry($sql, $whererow);
|
|
$i = 0;
|
|
$re_row = Array();
|
|
|
|
while( $sub_obj = $this->DB->fetch_array($rst) ){
|
|
foreach( (array)$sub_obj as $key => $val ){
|
|
$re_row[$key][$i] = $val;
|
|
}
|
|
$i++;
|
|
}
|
|
return $re_row;
|
|
}
|
|
|
|
public function sub_direct_cate($cate_code){ // 1단계아래의 하위카테고리 배열만 리턴
|
|
$temp_ren = strlen($cate_code) + $this->dmax;
|
|
|
|
$where = $this->getAreaQry();
|
|
$where = $this->getShowQry($where);
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
$where->add("cate_code != ?", $cate_code);
|
|
$where->add("len(cate_code) = ?", $temp_ren);
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry} order by cate_code";
|
|
$rst = $this->DB->qry($sql, $whererow);
|
|
$i = 0;
|
|
$re_row = Array();
|
|
while( $sub_obj = $this->DB->fetch_array($rst) ){
|
|
foreach( $sub_obj as $key => $val ){
|
|
$re_row[$key][$i] = $val;
|
|
}
|
|
$i++;
|
|
}
|
|
return $re_row;
|
|
}
|
|
|
|
public function history_cate($cate_code){ // $cate_code 의 상위 카테고리 배열 리턴
|
|
$floor = strlen($cate_code) / $this->dmax;
|
|
for( $i = $floor ; $i > 0 ; $i-- ){
|
|
$info = $this->cate_info(substr($cate_code, 0, $this->dmax * $i));
|
|
if($info) foreach( $info as $key => $val ){
|
|
$re_row[$key][$i - 1] = $val;
|
|
}
|
|
}
|
|
return $re_row;
|
|
}
|
|
|
|
public function cate_info($cate_code, $where=""){ // 카테고리정보 리턴
|
|
if( !$where ){
|
|
$where = new DB_where("and");
|
|
}
|
|
$where = $this->getAreaQry($where);
|
|
$where->add("cate_code = ?", $cate_code);
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry}";
|
|
$row = $this->DB->queryFirstRow($sql, $whererow);
|
|
return $row;
|
|
}
|
|
|
|
public function cate_info_id($cate_id, $where=""){ // 카테고리정보 리턴 id
|
|
if( !$where ){
|
|
$where = new DB_where("and");
|
|
}
|
|
$where = $this->getAreaQry($where);
|
|
$where->add("cate_id = ?", $cate_id);
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry}";
|
|
$row = $this->DB->queryFirstRow($sql, $whererow);
|
|
return $row;
|
|
}
|
|
|
|
public function cate_info_data(){ // 카테고리정보 리턴 url
|
|
if( $_SERVER['REQUEST_URI'] != "/" ){
|
|
$where = $this->getAreaQry();
|
|
$where->add("charindex(?, cate_data) != 0", $_SERVER['REQUEST_URI']);
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
//$sql = "select * from {$this->cate_table} where cate_data is not null and cate_data != '' and {$whereqry} order by cate_code desc ".$this->DB->_limit(0,1);
|
|
$sql = $this->DB->addLimit("select * from {$this->cate_table} where cate_data is not null and cate_data != '' and {$whereqry}","cate_code desc",0,1);
|
|
$row = $this->DB->queryFirstRow($sql, $whererow);
|
|
return $row;
|
|
}
|
|
}
|
|
|
|
public function cate_name($cate_code, $field_name="cate_name"){ // 카테고리명 리턴
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code = ?", $cate_code);
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select {$field_name} from {$this->cate_table} where {$whereqry}";
|
|
return $this->DB->queryFirstField($sql, $whererow);
|
|
}
|
|
|
|
public function move_cate($cate_code, $dest_upcode){ // 카테고리 이동 (단순)
|
|
$temp_ren = strlen($cate_code)+1;
|
|
$new_code = $this->new_cate($dest_upcode);
|
|
$params = Array(
|
|
//"cate_code" => $this->DB->sqleval( "CONCAT('{$new_code}',SUBSTRING(cate_code,{$temp_ren},1000))" ),
|
|
"cate_code" => $this->DB->sqleval( "'{$new_code}' + SUBSTRING(cate_code,{$temp_ren},1000)" ),
|
|
);
|
|
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
return $this->DB->update($this->cate_table, $params, $whereqry, $whererow);
|
|
}
|
|
|
|
public function move_target_cate_id($cate_id,$dest_id,$pos_num){ // 카테고리 이동 _ id
|
|
$cinfo = $this->cate_info_id($cate_id);
|
|
$dinfo = $this->cate_info_id($dest_id);
|
|
$cate_code = $cinfo['cate_code'];
|
|
$dest_code = $dinfo['cate_code'];
|
|
|
|
//if( $this->up_cate($cate_code) == $dest_code && substr($cate_code,-$this->dmax) <= $pos_num ){ $pos_num++; }
|
|
|
|
return $this->move_target_cate($cate_code, $dest_code, $pos_num);
|
|
}
|
|
|
|
public function move_target_cate($cate_code,$dest_upcode,$pos_num){ // 카테고리 이동
|
|
$code_len = strlen($cate_code); //코드길이
|
|
$code_parent = substr($cate_code,0,-$this->dmax); //부모코드
|
|
$code_parlen = strlen($code_parent); //부모코드길이
|
|
$dest_len = strlen($dest_upcode); //대상코드길이
|
|
$dest_chilen = strlen($dest_upcode)+$this->dmax; //대상자식코드길이
|
|
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code != ?", "{$cate_code}");
|
|
$where->add("cate_code != ?", "{$dest_upcode}");
|
|
$where->add("cate_code like ?", "{$dest_upcode}%");
|
|
$where->add("len(cate_code) = ?", strlen($dest_upcode)+$this->dmax);
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
//$sql = "select cate_code from {$this->cate_table} where {$whereqry} order by cate_code asc ".$this->DB->_limit($pos_num,1);
|
|
$sql = $this->DB->addLimit("select cate_code from {$this->cate_table} where {$whereqry}","cate_code asc",$pos_num,1);
|
|
$dest_code = $this->DB->queryFirstField($sql, $whererow);
|
|
if( $dest_code ){ //대상위치에 존재하는 코드가 있으면
|
|
$tgt_num = (int)substr($dest_code,-$this->dmax);
|
|
}else{ //대상위치에 존재하는 코드가 없으면 마지막 코드 +1
|
|
$sql = $this->DB->addLimit("select cate_code from {$this->cate_table} where {$whereqry}","cate_code desc",0,1);
|
|
$dest_code = $this->DB->queryFirstField($sql, $whererow);
|
|
$tgt_num = (int)substr($dest_code,-$this->dmax) + 1;
|
|
}
|
|
|
|
if( strpos( $dest_upcode, $code_parent ) !== false && $dest_code > $cate_code ){ //같은 레벨 이동이거나 아래로 이동일 경우. (자신이 빠진것 만큼, 대상 부모의 자신의 레벨 부분을, -1만큼 보상해줘야 함.)
|
|
if( $dest_upcode == $code_parent ){ //같은 레벨 이동은 $tgt_num 이 바뀌고, 하위레벨로의 이동은 upcode 가 바뀐다.
|
|
$tgt_num--;
|
|
}else{
|
|
$code1 = substr($dest_upcode, 0, $code_len);
|
|
$code2 = substr($dest_upcode, $code_len);
|
|
$dest_upcode = substr($code1,0,-$this->dmax) . addzero((int)substr($code1,-$this->dmax) - 1, $this->dmax) . $code2;
|
|
}
|
|
}
|
|
$new_part = $dest_upcode.addzero($tgt_num,$this->dmax);
|
|
$params = Array(
|
|
//"cate_code" => $this->DB->sqleval( "CONCAT('xxxxxxxxxx',SUBSTRING(cate_code,".($code_len+1).",1000))" ),
|
|
"cate_code" => $this->DB->sqleval( "'xxxxxxxxxx' + SUBSTRING(cate_code,".($code_len+1).",1000)" ),
|
|
);
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$this->DB->update($this->cate_table, $params, $whereqry, $whererow); //대상 임시보관
|
|
|
|
|
|
$params = Array(
|
|
//"cate_code" => $this->DB->sqleval( "CONCAT(SUBSTRING(cate_code,1,{$code_parlen}),REPLICATE('0',".$this->dmax."-LEN(CONVERT(VARCHAR,SUBSTRING(cate_code,".($code_parlen+1).",".$this->dmax.")-1)))+CONVERT(VARCHAR,SUBSTRING(cate_code,".($code_parlen+1).",".$this->dmax.")-1),SUBSTRING(cate_code,".($code_len+1).",1000))" ),
|
|
"cate_code" => $this->DB->sqleval( "SUBSTRING(cate_code,1,{$code_parlen}) + REPLICATE('0',".$this->dmax."-LEN(CONVERT(VARCHAR,SUBSTRING(cate_code,".($code_parlen+1).",".$this->dmax.")-1)))+CONVERT(VARCHAR,SUBSTRING(cate_code,".($code_parlen+1).",".$this->dmax.")-1) + SUBSTRING(cate_code,".($code_len+1).",1000)" ),
|
|
);
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$code_parent}%");
|
|
$where->add("cate_code > ?", $cate_code);
|
|
$where->add("cate_code not like ?", "{$cate_code}%");
|
|
$where->add("cate_code not like ?", "xxxxxxxxxx%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$this->DB->update($this->cate_table, $params, $whereqry, $whererow); //원본 위치의 빠진공간 메움
|
|
|
|
|
|
$params = Array(
|
|
//"cate_code" => $this->DB->sqleval( "CONCAT(SUBSTRING(cate_code,1,{$dest_len}), REPLICATE('0', ".$this->dmax."-LEN(CONVERT(VARCHAR,SUBSTRING(cate_code,".($dest_len+1).",".$this->dmax.")+1)))+CONVERT(VARCHAR,SUBSTRING(cate_code,".($dest_len+1).",".$this->dmax.")+1), SUBSTRING(cate_code,".($dest_chilen+1).",1000))" ),
|
|
"cate_code" => $this->DB->sqleval( "SUBSTRING(cate_code,1,{$dest_len}) + REPLICATE('0', ".$this->dmax."-LEN(CONVERT(VARCHAR,SUBSTRING(cate_code,".($dest_len+1).",".$this->dmax.")+1)))+CONVERT(VARCHAR,SUBSTRING(cate_code,".($dest_len+1).",".$this->dmax.")+1) + SUBSTRING(cate_code,".($dest_chilen+1).",1000)" ),
|
|
);
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$dest_upcode}%");
|
|
$where->add("cate_code >= ?", $new_part);
|
|
$where->add("cate_code not like ?", "xxxxxxxxxx%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$this->DB->update($this->cate_table, $params, $whereqry, $whererow); //대상 위치의 공간확보
|
|
|
|
|
|
|
|
$params = Array(
|
|
//"cate_code" => $this->DB->sqleval( "CONCAT('{$dest_upcode}','{$new_part}',SUBSTRING(cate_code,11,1000))" ),
|
|
"cate_code" => $this->DB->sqleval( "'{$new_part}' + SUBSTRING(cate_code,11,1000)" ),
|
|
);
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "xxxxxxxxxx%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
return $this->DB->update($this->cate_table, $params, $whereqry, $whererow); //대상 위치로 이동
|
|
}
|
|
|
|
public function drop_cate($cate_code, $cate_save_dir=""){ // 카테고리 삭제
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
return $this->DB->delete($this->cate_table, $whereqry, $whererow);
|
|
}
|
|
|
|
public function level_cate($cate_code){ // 카테고리 레벨 - 몇번째 카테고리인지 리턴
|
|
return strlen($cate_code) / $this->dmax;
|
|
}
|
|
|
|
public function max_level_cate(){ // 최고카테고리 레벨
|
|
$where = $this->getAreaQry();
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select max(len(cate_code)) from {$this->cate_table} where {$whereqry}";
|
|
return $this->DB->queryFirstField($sql, $whererow) / $this->dmax;
|
|
}
|
|
|
|
public function tree_cate($cate_code){ // 카테고리 트리배열 리턴
|
|
$where = $this->getAreaQry();
|
|
$where = $this->getShowQry($where);
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry} order by cate_code";
|
|
$rst = $this->DB->qry($sql, $whererow);
|
|
return $this->tree_cate_exe($rst);
|
|
}
|
|
|
|
public function tree_cate_all($cate_code){ // 카테고리 트리배열 리턴. 조회방식과 무관
|
|
$where = $this->getAreaQry();
|
|
$where->add("cate_code like ?", "{$cate_code}%");
|
|
|
|
$wqry = $where->get_where();
|
|
$whereqry = $wqry['qry'];
|
|
$whererow = $wqry['val'];
|
|
|
|
$sql = "select * from {$this->cate_table} where {$whereqry} order by cate_code";
|
|
$rst = $this->DB->qry($sql, $whererow);
|
|
return $this->tree_cate_exe($rst);
|
|
}
|
|
|
|
public function tree_cate_exe($rst){
|
|
$i = 0;
|
|
$tree_row = Array();
|
|
while( $cate_obj = $this->DB->fetch_array($rst) ){
|
|
$sub_row = $this->sub_cate($cate_obj['cate_code']);
|
|
foreach( $cate_obj as $key => $val ){
|
|
$tree_row[$key][$i] = $val;
|
|
}
|
|
$tree_row['level'][$i] = $this->level_cate($cate_obj['cate_code']);
|
|
$tree_row['sub'][$i] = count((Array)$sub_row['cate_code']);
|
|
$i++;
|
|
}
|
|
return $tree_row;
|
|
}
|
|
|
|
public function draw_cate_all($cate_code, $page_url=""){ // 전체 카테고리 트리 작성
|
|
if( !$page_url ){
|
|
$page_url = $_SERVER['PHP_SELF'];
|
|
}
|
|
|
|
$tree_row = $this->tree_cate("");
|
|
$history_row = $this->history_cate($cate_code);
|
|
|
|
$all_num = count($tree_row['cate_code']);
|
|
$pre_level = 0;
|
|
$tree_html = "<div style='font-size:8pt;'><a href='{$page_url}'><img src='/img/folder_o.gif' align='absmiddle' border='0'>최상위</a></div>";
|
|
|
|
for( $i = 0 ; $i < $all_num ; $i++ ){
|
|
if( $pre_level >= $tree_row['level'][$i] ){
|
|
for( $k = 0 ; $k <= ( $pre_level - $tree_row['level'][$i] ) ; $k++ ){
|
|
$tree_html .= "\r\n</div>";
|
|
}
|
|
}
|
|
|
|
if( $cate_code == $tree_row['cate_code'][$i] or @in_array($tree_row['cate_code'][$i], $history_row['cate_code']) ){
|
|
$view_conv = "";
|
|
}else{
|
|
$view_conv = "none";
|
|
}
|
|
|
|
if( count($this->sub_direct_cate($tree_row['cate_code'][$i])) > 0 ){
|
|
$plus_img = "line_plus.gif";
|
|
}else{
|
|
$plus_img = "line_minus.gif";
|
|
}
|
|
|
|
if( $cate_code == $tree_row['cate_code'][$i] ){
|
|
$open_folder = "folder_o.gif";
|
|
$fg_col = 'font-weight:bold;color:#003366';
|
|
}else{
|
|
$open_folder = "folder_c.gif";
|
|
$fg_col = "";
|
|
}
|
|
|
|
$tree_html .= "\r\n<div style='font-size:8pt'>";
|
|
for( $ks = 0 ; $ks < $tree_row['level'][$i] ; $ks++ ){
|
|
$tree_html .= "<img src='/img/line.gif' align='absmiddle' border='0'>";
|
|
}
|
|
$tree_html .= "<a href='###'><img src='/img/{$plus_img}' align='absmiddle' border='0' id='{$tree_row['cate_code'][$i]}' class='Outline'></a><img src='/img/{$open_folder}' align='absmiddle' border='0' id='{$tree_row['cate_code'][$i]}' class='Outline'><a style='vertical-align:bottom' href='{$page_url}?cate_code={$tree_row['cate_code'][$i]}' style='{$fg_col}'>{$tree_row['cate_name'][$i]}</a></div>";
|
|
$tree_html .= "\r\n<div id='{$tree_row['cate_code'][$i]}_d' style='display:{$view_conv}'>";
|
|
$pre_level = $tree_row['level'][$i];
|
|
}
|
|
|
|
for( $i = 0 ; $i < $pre_level ; $i++ ){
|
|
$tree_html .= "\r\n</div>";
|
|
}
|
|
|
|
return $tree_html;
|
|
}
|
|
|
|
public function draw_cate_script($cate_code){ // 전체 카테고리 트리 작성(스크립트)
|
|
$tree_row = $this->tree_cate("");
|
|
$history_row = $this->history_cate($cate_code);
|
|
|
|
$all_num = count($tree_row['cate_code']);
|
|
$pre_level = 0;
|
|
$tree_html = "";
|
|
|
|
for( $i = 0 ; $i < $all_num ; $i++ ){
|
|
if( $pre_level >= $tree_row['level'][$i] ){
|
|
for( $k = 0 ; $k <= ( $pre_level - $tree_row['level'][$i] ) ; $k++ ){
|
|
$tree_html .= "\r\n</div>";
|
|
}
|
|
}
|
|
|
|
if( $cate_code == $tree_row['cate_code'][$i] or @in_array($tree_row['cate_code'][$i], $history_row['cate_code']) ){
|
|
$view_conv = "";
|
|
}else{
|
|
$view_conv = "none";
|
|
}
|
|
|
|
if( count($this->sub_direct_cate($tree_row['cate_code'][$i])) > 0 ){
|
|
$plus_img = "line_plus.gif";
|
|
}else{
|
|
$plus_img = "line_minus.gif";
|
|
}
|
|
|
|
if( $cate_code == $tree_row['cate_code'][$i] ){
|
|
$open_folder = "folder_o.gif";
|
|
$fg_col = 'font-weight:bold;color:#003366';
|
|
}else{
|
|
$open_folder = "folder_c.gif";
|
|
$fg_col = "";
|
|
}
|
|
|
|
$tree_html .= "\r\n<div>";
|
|
for( $ks = 0 ; $ks < $tree_row['level'][$i] ; $ks++ ){
|
|
$tree_html .= "<img src='/img/line.gif' align='absmiddle' border='0'>";
|
|
}
|
|
$tree_html .= "<a href='###'><img src='/img/{$plus_img}' align='absmiddle' border='0' id='{$tree_row['cate_code'][$i]}' class='Outline'></a><img src='/img/{$open_folder}' align='absmiddle' border='0' id='{$tree_row['cate_code'][$i]}' class='Outline'><a style='vertical-align:bottom' href='###' style='{$fg_col}'>{$tree_row['cate_name'][$i]}</a></div>";
|
|
$tree_html .= "\r\n<div id='{$tree_row['cate_code'][$i]}_d' style='display:{$view_conv}'>";
|
|
$pre_level = $tree_row['level'][$i];
|
|
}
|
|
|
|
for( $i = 0 ; $i < $pre_level ; $i++ ){
|
|
$tree_html .= "\r\n</div>";
|
|
}
|
|
|
|
return $tree_html;
|
|
}
|
|
|
|
public function list_cate($cate_code, $url, $spr){
|
|
$word = "<a href='###' onclick=\"location.href='{$url}'\" style='text-decoration:none'>최상위</a>";
|
|
|
|
$his_row = $this->history_cate($cate_code);
|
|
for( $i = 0 ; $i < count($his_row['cate_code']) ; $i++ ){
|
|
$word .= "{$spr}<a href='###' onclick=\"location.href='{$url}?cate_code={$his_row['cate_code'][$i]}'\" style='text-decoration:none'>{$his_row['menu_name'][$i]}</a>";
|
|
}
|
|
return $word;
|
|
}
|
|
|
|
public function get_cate($menu_id=""){
|
|
global $cmenu_id, $cmenu_cate, $d1n, $d2n, $d3n, $d4n;
|
|
if($menu_id){
|
|
$row = $this->cate_info_id($menu_id);
|
|
return $row['cate_code'];
|
|
}else if( $cmenu_id ){
|
|
$row = $this->cate_info_id($cmenu_id);
|
|
return $row['cate_code'];
|
|
}else if( $cmenu_cate ){
|
|
return $cmenu_cate;
|
|
}else if( $d1n ){/*이전방식 호환용*/
|
|
return ( ( $d1n )?addzero($d1n, $this->dmax):"" ).( ( $d2n )?addzero($d2n, $this->dmax):"" ).( ( $d3n )?addzero($d3n, $this->dmax):"" ).( ( $d4n )?addzero($d4n, $this->dmax):"" );
|
|
}else{
|
|
$row = $this->cate_info_data();
|
|
return $row['cate_code'];
|
|
}
|
|
}
|
|
|
|
function tree_by_parent( $row, $cd_fld, $pcd_fld, $pcd_val ){
|
|
$nrow = array_filter($row, function($v) use ($pcd_val, $pcd_fld, $cd_fld) {
|
|
return $pcd_val == $v[$pcd_fld] && !!$v[$cd_fld];
|
|
});
|
|
|
|
$arr = Array();
|
|
foreach( (Array)$nrow as $ar ){
|
|
$ar['children'] = $this->tree_by_parent($row, $cd_fld, $pcd_fld, $ar[$cd_fld]);
|
|
$arr[] = $ar;
|
|
}
|
|
return $arr;
|
|
}
|
|
|
|
public function __get($name){
|
|
$method = "get_{$name}";
|
|
if( method_exists($this, $method) ){
|
|
return $this->$method();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public function __set($name, $value){
|
|
$method = "set_{$name}";
|
|
if( method_exists($this, $method) ){
|
|
return $this->$method( $value );
|
|
}
|
|
return false;
|
|
}
|
|
}
|