================================================================================ type=textarea 기능 업데이트 가이드 갤러리 스타일2 뷰페이지 + 입력폼 헬퍼 모달창 ================================================================================ [개요] - 여분필드에 |type=textarea 설정 시 HTML 코드를 그대로 렌더링 - 테이블 구조 밖에 별도 출력 (타이틀 없이 심플하게) - 입력폼에 help_li, help_테이블 버튼으로 HTML 생성 모달 제공 ================================================================================ 1. view.skin.php - hycs_render_block_field_for_view 함수 수정 ================================================================================ [1-1] 타입 감지 부분 수정 (약 144-150행 부근) 기존: count($parts) > 2 일때만 type 체크 수정: 모든 parts에서 type= 찾기 ---코드 시작--- $parts = explode('|', $config); $parts_config = $parts; $type = 'text'; // 모든 파트에서 type= 찾기 (제품특징|type=textarea 형식 지원) foreach ($parts as $a) { if (strpos($a, 'type=') === 0) { $type = explode('/', substr($a, 5))[0]; break; } } ---코드 끝--- [1-2] textarea/html 타입 처리 추가 (else 분기 전에 추가) 위치: } else { $label = trim(mSubj($i)); 이 부분 바로 앞에 추가 ---코드 시작--- } elseif ($type === 'textarea' || $type === 'html') { // textarea/html 타입: 심플 박스로 HTML 코드를 그대로 출력 (테이블/타이틀 없이) $field_name = 'wr_' . $i; $value = isset($view[$field_name]) ? $view[$field_name] : ''; $value_check = trim(strip_tags($value)); // 빈 값이거나 기본 텍스트면 출력하지 않음 if ($value_check === '' || strpos($value_check, '내용에 아무것도 안나오면 자동등록된 기본내용입니다') !== false) { return array('row' => '', 'extra' => '', 'force_row' => ''); } $extra_html .= '
' . $value . '
'; // textarea/html 타입은 extra에만 출력하고 row/force_row는 빈값으로 바로 반환 return array('row' => '', 'extra' => $extra_html, 'force_row' => ''); } else { ---코드 끝--- ================================================================================ 2. view2.skin.php - 갤러리 스타일2 뷰페이지 ================================================================================ [2-1] textarea extras 별도 수집 변수 추가 위치: $hycs_sections = hycs_get_section_field_lists(...) 다음 줄 ---코드 시작--- $textarea_extras_v2 = ''; // textarea/html 타입은 블록 바깥에 별도 출력 ---코드 끝--- [2-2] foreach 루프 안에서 textarea extra 분리 저장 위치: $rendered = hycs_render_block_field_for_view(...) 호출 후 extra 처리 부분 기존: $block_extras .= $rendered['extra']; 수정: ---코드 시작--- // textarea/html 타입 extra는 별도 저장 if (strpos($rendered['extra'], 'view-textarea-box') !== false) { $textarea_extras_v2 .= $rendered['extra']; } else { $block_extras .= $rendered['extra']; } ---코드 끝--- [2-3] 블록 루프 끝난 후 textarea extras 출력 위치: foreach ($hycs_sections ...) 루프가 끝난 직후, 첨부파일 출력 전 ---코드 시작--- // textarea/html 타입 필드는 블록 바깥에 별도 출력 if (trim($textarea_extras_v2) !== '') { echo $textarea_extras_v2; } ---코드 끝--- ================================================================================ 3. view_detail.php - 동일한 textarea/html 처리 추가 ================================================================================ view.skin.php의 [1-1], [1-2]와 동일하게 수정 (hycs_render_block_field_for_view_detail 함수 내) ================================================================================ 4. style_view.css - 뷰 페이지 스타일 추가 ================================================================================ 파일 끝에 추가: ---코드 시작--- /* textarea/html 타입 여분필드 박스 */ .view-textarea-box { display: block; padding: 0; background: none; margin-top: 30px; line-height: 1.8; overflow: hidden; clear: both; width: 100%; box-sizing: border-box; } .view-textarea-box + .view-textarea-box { margin-top: 30px; } .view-textarea-box ul { margin: 0; padding-left: 20px; list-style-position: inside; } .view-textarea-box li { margin-bottom: 8px; } .view-textarea-box > * { max-width: 100%; } .view-textarea-box table { width: 100%; border-collapse: collapse; margin: 10px 0; } .view-textarea-box table th, .view-textarea-box table td { border: 1px solid #ddd; padding: 8px 12px; text-align: center; } .view-textarea-box table th { background: #f0f0f0; font-weight: 600; } .view-textarea-box table tr:nth-child(even) { background: #fafafa; } /* COM_li 리스트 스타일 */ .view-textarea-box .COM_li ul { margin: 0; padding: 0; list-style: none; } .view-textarea-box .COM_li li { list-style: none; } .view-textarea-box .COM_li.li-1d > ul.dot > li { position: relative; padding-left: 16px; margin-bottom: 8px; font-weight: 500; line-height: 1.6; } .view-textarea-box .COM_li.li-1d > ul.dot > li::before { content: "•"; position: absolute; left: 0; } .view-textarea-box .COM_li.li-2d { margin-top: 4px; } .view-textarea-box .COM_li.li-2d > ul.dash > li { position: relative; padding-left: 20px; margin-bottom: 4px; font-weight: 400; color: #666; font-size: 0.92em; line-height: 1.5; } .view-textarea-box .COM_li.li-2d > ul.dash > li::before { content: "-"; position: absolute; left: 8px; } ---코드 끝--- ================================================================================ 5. write.skin.php - 입력폼 헬퍼 모달창 ================================================================================ [5-1] 파일 맨 끝 태그 다음에 모달 HTML 추가: ---코드 시작--- ---코드 끝--- ================================================================================ 6. mandoo.function.php - textarea 입력폼에 헬퍼 버튼 추가 ================================================================================ textarea 타입 case 부분에서 버튼 추가: ---코드 시작--- case 'textarea': $v = $value; $textarea_id = $id ? $id : 'textarea_' . $i; $html .= "
"; $html .= ""; $html .= ""; $html .= "
"; $html .= "{$unit}"; break; ---코드 끝--- mView 함수에도 textarea/html 타입 처리 추가: ---코드 시작--- case 'textarea': case 'html': // textarea/html 타입: HTML 코드를 그대로 출력 $output = $value; break; ---코드 끝--- ================================================================================ 적용 순서 ================================================================================ 1. style_view.css 먼저 수정 (CSS 추가) 2. view.skin.php 수정 (핵심 함수) 3. view2.skin.php 수정 (갤러리 스타일2) 4. view_detail.php 수정 (상세뷰) 5. write.skin.php 수정 (모달창 추가) 6. mandoo.function.php 수정 (헬퍼 버튼) ================================================================================ 테스트 방법 ================================================================================ 1. 게시판 관리에서 여분필드 설정: 제품특징|type=textarea 2. 글쓰기에서 help_li, help_테이블 버튼 클릭하여 HTML 생성 3. 글보기(갤러리 스타일2)에서 테이블 밖에 심플하게 출력되는지 확인 ================================================================================ 7. 첨부파일 삭제 기능 추가 (write.skin.php, write_edit.php) ================================================================================ [문제] - 그누보드 get_file() 함수가 캐시 문제로 파일 정보를 제대로 가져오지 못함 - 수정 페이지에서 기존 첨부파일이 보이지 않아 삭제 불가 [해결] - get_file() 대신 DB에서 직접 조회하도록 변경 [7-1] write.skin.php - 첨부파일 조회 코드 수정 위치: 첨부파일 섹션 시작 부분 (attach-section 내부) ---코드 시작--- 0); ?> 0) { global $g5; $sql = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table = '$bo_table' AND wr_id = '$wr_id' ORDER BY bf_no"; $result = sql_query($sql); while ($row = sql_fetch_array($result)) { $bf_no = (int)$row['bf_no']; $existing_files[$bf_no] = $row; } } ?> ---코드 끝--- [7-2] 첨부파일 행에 기존 파일 정보 + 삭제 체크박스 표시 위치: foreach ($attach_files as $idx => $file_title) 루프 내부 ---코드 시작--- $file_title): $file_idx = $file_counter; // 실제 파일 저장 인덱스 ?>
( bytes)
* 새 파일을 선택하면 기존 파일이 교체됩니다.
---코드 끝--- [7-3] write_edit.php - 관리자 수정 페이지도 동일하게 수정 변수명만 다름: $existing_files_edit, $file_counter_edit, $file_idx_edit ---코드 시작--- 0) { global $g5; $sql = "SELECT * FROM {$g5['board_file_table']} WHERE bo_table = '$bo_table' AND wr_id = '$wr_id' ORDER BY bf_no"; $result = sql_query($sql); while ($row = sql_fetch_array($result)) { $bf_no = (int)$row['bf_no']; $existing_files_edit[$bf_no] = $row; } } ?> ---코드 끝--- [동작 방식] 1. 수정 페이지 진입 시 DB에서 해당 글의 첨부파일 목록 조회 2. bf_no (파일 인덱스)를 키로 하여 $existing_files 배열에 저장 3. 첨부파일 영역에서 해당 인덱스에 파일이 있으면: - 초록색 박스로 파일명 표시 - 다운로드 링크 제공 - 빨간색 "삭제" 체크박스 표시 4. 삭제 체크 후 저장하면 그누보드 기본 처리로 파일 삭제됨 5. 새 파일 선택 시 기존 파일 교체 ================================================================================ 8. 리스트 HTML 생성기 출력 형식 (help_li) ================================================================================ 리스트 생성기에서 출력되는 HTML 형식: ---코드 시작---
---코드 끝--- 클래스 설명: - w500, w400: 폰트 굵기 - em-w500: 강조 텍스트 굵기 - li_pl_20: 리스트 왼쪽 패딩 - f_sm: 작은 폰트 크기 - lh120, lh110: 줄간격 - scale-09, scale-08: 스케일 조절 - gray666: 회색 텍스트 ================================================================================ 작성일: 2024년 ================================================================================