소스 파일명 : knowhow.php
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<?php // (2017.2.5, 차재복, Cha Jae Bok, cjbword@gmailcom)

# 세션 스타트 (매 웹페이지 마다 필요)
	session_start();


# db 접속
	include_once "km_db_conn.php";


# html 헤더부 ------------------------------------------------------------

	// 캐릭터셋 : utf-8 
	echo "<meta http-equiv='content-type' content='text/html; charset=utf-8'>";

	// 모바일 여부 확인 루틴  (출처 : http://mobiledetect.net/)
	require_once '../../mobiledetect/Mobile_Detect.php';
	$detect = new Mobile_Detect;
	if ( $detect->isMobile() and !($detect->isTablet()) ) { // 순수 모바일 기기 (not tablet)
		echo "<meta name='viewport' content='user-scalable=yes, width=device-width, initial-scale=1.0' />";
	}


# 주요 함수(사용자 정의)들을 포함 ------------------------------------------

	include_once "editor_select.php";
	include_once "user_function.php";


# CSS style ---------------------------------------------------------

	echo "<link rel='stylesheet' type='text/css' href='css_code.css' />";

	if ( $detect->isMobile() and !($detect->isTablet()) ) { // 순수 모바일 기기 (not tablet)
			echo "<style type='text/css'> body { width : 200% ; } </style>";
	}


# 자바스크립트 -------------------------------------------------------------

	// jquery api 원본 다운로드
	echo "<script type='text/javascript' src='http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js'></script>";

	// jquery 기능 구현 소스 불러오기
	echo "<script type='text/javascript' src='jq_user.js' charset='UTF-8'></script>";


# 외부(클라리언트)의 전달 파라미터로부터 'php 변수 설정' 및 '해킹 방어' ------------------
	// 외부 전달 파라미터 : id, opt, parent, depth, action, editor_content

	include_once "km_parm_chk.php";


# UPDATE 실행 (편집자일 경우) -----------------------------------------------

	if ( !empty($_SESSION['user_name']) and isset($action) and isset($id) ) {
		include_once "item_update.php";
	}


# 데이터베이스 쿼리 및 퀘리결과집합을 php 배열화 ---------------------------------------------------------

	include_once "km_db_qry.php";

	// 쿼리 결과 추출 변수 (5)
		// $start (초기화면 여부,true/false)
		// $set (쿼리 결과 집합)
		// $cur_path (현재 선택된 node path)
		// $sub_list ($cur_path 항목별로, 직속 자식들 별도 array 확보)
		// $cur_idx ($set 배열 중 현재 행/레코드 번호)


# 페이지 최 상단 부 (헤더부) ---------------------------------------------------------------------
	// 전달 파라미터 : DB_NAME, $_SESSION

	include "km_top.php";

	echo "<hr style='clear:both;'>" ;


# 내용 출력 (화면 마다 그 구성이 달라짐) -------------------------------------------------------

	// [초기 화면] 조건없이 최초 호출시, 목차 타이틀 만 출력 화면
	if ($start == true) {	

		// 목차 jquery 기능 구현 소스 불러오기
		echo "<script type='text/javascript' src='km_jq_contents.js' charset='UTF-8'></script>";

		// 목차 타이틀
		echo "<font style='font-size:16px; font-weight:bold;'>[ 분 야 ]</font>";

/*
		// 목차 보기 선택 (`항목 기반` 또는 `페이지 기반`)
		echo str_repeat('&nbsp;',20);
			echo "< 출력형태 : ";
				echo "<a href='knowhow.php' style='font-weight:bold;'>ajax (항목 기반)</a> &nbsp; ";
				echo "<a href='' class='ajax_page'>ajax (페이지 기반)</a>";
			echo " >";
*/

		// 목차 분야별 출력하기
		echo "<div id='contents' >"; // style='margin-bottom:20px;'
			include_once "km_contents_display.php";
			contents_display ($set, $id, 'ajax_page', 'knowhow.php');
		echo "</div>";

	} 

	// [검색 화면] 검색 시 검색 결과 화면
	if ( (!$start or $opt==1) and !empty($m_search)  ) {
		include "search.php";
	}

	// [내용 화면] id 주어지고 호출하면 내용 출력 화면
	if ( !$start and !(!empty($m_search) or $opt==1) ) {

		// jquery 기능 구현 소스 불러오기
		echo "<script type='text/javascript' src='jq_user.js' charset='UTF-8'></script>";

		// 실제 항목 정보 레코드 셋팅
		$row = $set[$cur_idx]; // 현재 항목 레코드

				// 목차 jquery 기능 구현 소스 불러오기
				echo "<script type='text/javascript' src='km_jq_contents.js' charset='UTF-8'></script>";
				
				// 목차 클릭 버튼 
				echo "<button id='contents_click' ><strong>목 차 </strong></button> &nbsp; "; 
					// class='ajax_page'					
				
				// 항목 트리 path 순서적으로 보여주기
				echo "<div style='display:inline; margin-bottom:10px;'>";
					// 전달 변수 둘 : $row[], $sub_list[], $id
					include_once "km_tree_path.php";
				echo "</div>";

				// 목차 내용 출력하기
				echo "<div id='contents_wrap' class='contents' style='margin-bottom:10px; border-left:gray dashed 1px; border-right:gray dashed 1px;'>"; 

					// 목차 출력 div
					echo "<div id='contents'>";
						// 전달 변수 넷 : $set, $id, 출력 형태(static/dynamic/ajax_page), 호출 파일
						include_once "km_contents_display.php";
						contents_display ($set, $id, 'ajax_page', 'knowhow.php');
					echo "</div>";
	
					// 닫기 버튼
					echo "<div id='close_btn' style='border:black dotted 1px;margin:0; padding:0; text-align:center;'>목차 닫기</div>";
	
				echo "</div>";


			// 구분선 (상단 트리 및 타이틀 사이)
			echo "<hr style='border-top:gray dashed 1px; margin-bottom:15px;'>";


			// 타이틀 출력
			title ($row,$m_edit,$id,$m_edit_level);

			// 편집기 선택 form 버튼
			if ($id==$row[id] and !empty($_SESSION['user_name'])) {
					editor ($row,$m_edit);
			}

			// 항목 내용 출력 (content_div)
			echo "<div id='content_div' style='padding-top:10px; padding-bottom:15px; border-top:gray dashed 1px; border-bottom:gray dashed 1px;'>"; 

					// 항목 내용 출력, 타이틀 외 실제 내용 만 보여짐
					if ( empty($m_edit) and $id==$row[id] ) {
						// 빈 내용 이면,
						if (empty($row[abbr])) echo "<br><span style='color:gray;'> &nbsp;&nbsp; -- 빈 내용 -- </span><br>";
						// 빈 내용 아니면,
//						echo "<p style='clear:both;'>".$row[abbr]."</p>";
						echo $row[abbr];

					// froala 편집기 나타남
					} else if ( !empty($_SESSION['user_name']) and substr($m_edit,0,6)=='Froala' ) {
						froala ($row,$m_edit);
					// ckeditor 편집기 나타남
					} else if ( !empty($_SESSION['user_name']) and substr($m_edit,0,8)=='CKEditor' ) {
						ckeditor ($row,$m_edit);
					}

			echo "</div>";


			// 하위 항목 있으면 타이틀 출력
			if ($row[next_sub] > 0) {
				echo "<hr style='clear:both;>";

//				$sub_list = path ($row,$dbi); // 각 레벨 하위요소 정보들 가져오기

					$i = $row[depth];
					$cur_info = array( 'title' => $pstr_list[$i], 'id' => $pid_list[$i], 'depth' => $i);

					echo "<div id='d".$i."' style='margin:0; padding:0; margin-bottom:10px; font-size:13px; line-height:100%;'>";
						sub_elements ($sub_list,$cur_info,$dbi);
					echo "</div>";

				// 하위 항목 타이틀을 ajax 클릭하면 나타나는 div
				echo "<div id='ajax_sub_display'>";
				echo "</div>";
			}

	}


# 항목 관리 ---------------------------------
	if ( !empty($_SESSION['user_name']) and empty($m_search) ) {
		include_once "item_button.php";
	} 


# 페이지 하단부(Footer) 출력 ---------------------------------

		// 맨 하단 관리선
		echo "<hr style='clear:both; border-top:black solid 1px;'>";

		// 저작권
		echo "<a href='/index.php'><span style='color:blue;'>Copyrightⓒ written by 차재복 (Cha Jae Bok, cjbword@gmail.com)</span></a>";
		
		// 소스 개방
		echo "<br><br>";
		include "../base_utils/open.php";


# 접속 통계처리 요청 -----------------------------------------
	include "../base_utils/stat_utils.php";
	if ($_REQUEST[parm]=='onedrive') {
		html_access('onedrive',$dbi);
	} else {
		html_access('knowhow.php',$dbi);
	}

?>