001002003004005006007008009010011012013014015016017018019020021022023024025026027028029030031032033034035036037038039040041042043044045046047048049050051052053054055056057058059060061062063064065066067068069070071072073074075076077078079080081082083084085086087088089090091092093094095096097098099100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
<?php // (2020.11.29, 차재복, Cha Jae Bok, cjbword@gmailcom) function multi_path_rows($id,$m_temp1,$dbi) { # 해당 no 및 id 유무 별로 multi cur_path 찾기 // 용어 항목 // if (!empty($m_temp1) and !empty($id)) { if (!empty($m_temp1) ) { $query = "select id,path2node from (select no,tree_id from book_idx where no=$m_temp1) a left join gubun_tree_v2 b on a.tree_id=b.id"; $result=mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $multi_rows=array(); while ( $matched=mysqli_fetch_assoc($result) ) { if (!empty($id) and $id == $matched[id]) { array_unshift($multi_rows,$matched); } else { $multi_rows[] = $matched; } } // 분류 항목 (1개) } else if (empty($m_temp1) and !empty($id)) { // $query = "select id,path2node from gubun_tree_v2 where id=$id"; $query = "select id,concat('0,',replace(substring_index(getpath_v2(id),'|',-1),'::',',')) as path2node from gubun_tree_v2 where id=$id"; $result=mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $matched=mysqli_fetch_assoc($result); $multi_rows[0] = $matched; // 에러 방지 } else if (empty($m_temp1) and empty($id)) { $multi_rows[0] = array('id'=>0,'path2node'=>'0'); } // echo 'count($multi_rows)='.count($multi_rows)."<br>"; // echo "<pre>";print_r($multi_rows);echo "</pre>"; return $multi_rows; } # 각 id별 세부 용어 항목명 보이기 function detail_items_display($id,$temp,$m_temp1,$dbi,$choice) { $query="select titlename,no,list_ord,tree_id as id from book_idx where tree_id=$id order by list_ord, titlename"; $result = mysqli_query($dbi,$query); $cnt = mysqli_num_rows($result); $n=1; while ( $matched=mysqli_fetch_assoc($result) ) { if(!empty($choice)) { echo ($choice=='contents' ? " " : " "); echo " $n. "; if ( $matched[no] == $m_temp1 ) echo "<b>"; echo "<a href='view.php?nav=2&id=".$id."&m_temp1=".$matched[no]."'>"; echo $matched[titlename]; echo "</a>"; if ( $matched[no] == $m_temp1 ) echo "</b>"; echo "<br>"; } $arr[] = array('no'=>$matched[no],'titlename'=>$matched[titlename]); $n=$n+1; } return $arr; } function db_qry ($cur_path,$cur_id,$dbi) { // echo '$cur_path='.$cur_path."<br>"; # 쿼리문 // 각 레별별 해당 노드들 쿼리 $query = "select a.id,a.parent,a.sub_seq,a.name,a.linked_num,@path:=getpath_v2(a.id), @pre_ord:=substring_index(substring_index(@path,'|',2),'|',-1) as pre_ord, char_length(@pre_ord)-char_length(replace(@pre_ord,'.','')) as depth, substring_index(@path,'|',-1) as path_id, substring_index(substring_index(@path,'|',-2),'|',1) as path_str ,count(b.id) as sub_cnt from gubun_tree_v2 a left join gubun_tree_v2 b on a.id=b.parent where a.id<>0 and a.parent in (".$cur_path.") group by a.id order by pre_ord" ; $result=mysqli_query($dbi,$query); if (mysqli_errno($dbi)) { echo mysqli_errno($dbi)." : ".mysqli_error($dbi)."\n";} $prev=1; $i=0; while ( $matched = mysqli_fetch_assoc($result) ) { // 쿼리 결과 레코드를 배열화 $set[] = $matched; // $set에서 현재 $cur_id의 배열 index 확인 if ($cur_id == $matched[id]) $cur_row = $matched; // cur_path 항목별로, 직속 자식들 별도 array 확보 if ( strpos($cur_path.',',$matched[parent].',') !== false ) { $per_parent_rows[$matched[parent]][] = $matched; } // 마지막 cur_id도 포함 // if ($matched[id]==$cur_id and $matched[depth]) $per_parent_rows[$matched[id]][] = $matched; $i=$i+1; } //echo $cur_id."<br>"; //echo $cur_path."<br>"; //echo 'count($per_parent_rows)='.count($per_parent_rows)."<br>"; // return array('set' => $set, 'cur_idx' => $cur_idx, 'parent_idx_list' => $parent_idx_list); return array('set' => $set, 'cur_row'=> $cur_row,'per_parent_rows' => $per_parent_rows); } # 각 path별 1 라인 출력 function path2line ($per_parent_rows,$row,$m_temp1,$dbi) { // path to node 의 id,str 추출 $pid_list = explode('::',$row[path_id]); array_unshift($pid_list,'0'); // 루트 id도 포함시킴 $pstr_list = explode('::',$row[path_str]); array_unshift($pstr_list,'Top'); // 루트 str도 포함시킴 // path to node ( Top > 타이틀1 > ... ) 형태로 Tooltip 구현 for ($i=0;$i<=$row[depth];$i++) { echo "<span class='sub_list_container'>"; // ( Top > 타이틀1 > ... ) 형태로 클릭 대상 보여줌 echo "<a href='view.php?nav=2&id=".$pid_list[$i]."' >"; echo $pstr_list[$i]; echo "</a>"; if ($i<$row[depth]) echo " > "; // Tooltip echo "<span class='sub_list_text'>"; if ($row[linked_num] > 0) { $temp_arr = detail_items_display($pid_list[$i],$num,$m_temp1,$dbi,"path"); if ($i==$row[depth]) $cur_sub_list = $temp_arr; } if (count($per_parent_rows[$pid_list[$i]]) > 0) { foreach($per_parent_rows[$pid_list[$i]] as $key => $value) { echo " [<a href='view.php?nav=2&id=".$value[id]."' >".$value[name]."</a>]"; echo "<br>"; } } echo "</span>"; // } echo "</span>"; } return $cur_sub_list; } ?>