# common_slat.php 개발자 가이드 ## 📋 개요 `common_slat.php`는 방화셔터 견적 시스템의 철재 스라트 견적 테이블을 동적으로 생성하는 핵심 PHP 컴포넌트입니다. 이 파일은 스크린 견적과 유사하지만 철재 특화 기능을 포함하며, 철재 스라트 견적서 작성에 필요한 모든 컬럼과 기능을 제공합니다. ## 🏗️ 파일 구조 ### 📁 파일 위치 ``` /estimate/common/common_slat.php ``` ### 📊 파일 정보 - **파일 크기**: 8.9KB (227 lines) - **주요 언어**: PHP + HTML - **의존성**: Bootstrap, Bootstrap Icons - **주요 함수**: `generateTableSection_slat()` ## 🔧 핵심 기능 ### 1. 메인 함수: `generateTableSection_slat()` ```php function generateTableSection_slat($id, $title, $badgeClass = 'bg-success', $user_idtem= '', $process=null, $mode) ``` #### 매개변수 - `$id`: 테이블의 고유 식별자 (예: 'estimateSlat') - `$title`: 테이블 섹션 제목 - `$badgeClass`: 배지 스타일 클래스 (기본값: 'bg-success' - 철재용 초록색) - `$user_idtem`: 사용자 아이템 (개발자 모드용) - `$process`: 프로세스 타입 (예: '견적서') - `$mode`: 모드 (예: 'view', 'edit') ## 📊 테이블 구조 분석 ### 🎯 **테이블 헤더 구조 (6단계 계층)** #### **1단계 헤더 (기본 정보)** ```html 행추가
삭제 일련
번호 층수 부호 제품명 투시창선택 종류 가이드레일 ①오픈사이즈 ②-1제작사이즈
(철재) ②-2제작사이즈
(부자재) ③면적 ④중량 투시창
수량 셔터
수량 연동제어기 ⑤모터 절곡 부자재 ``` #### **2단계 헤더 (주요 카테고리)** ```html ⑥가이드레일(한쌍) ⑦케이스(셔터박스) ⑧하단마감재 ⑨감기샤프트 ⑩각파이프 조인트바 앵글 ``` #### **3단계 헤더 (모터 상세)** ```html 모터 견적가 포함 전원 유/무선 용량 브라케트 ``` #### **4단계 헤더 (세부 구성요소)** ```html 가이드레일 마감/보강재 하부base1 하부base2 레일용 연기차단재
W50 케이스 케이스용
연기차단재 하장바 x 인치 원형파이프 50*30*1.4T ``` #### **5단계 헤더 (구체적 사양)** ```html 설치유형 마감유형 가로 높이 가로 높이 가로 높이 매립 노출 매립형
뒷박스 가로*세로 사이즈 받침용
앵글 size 2438 3000 3500 4000 4300 2438 3000 3500 4000 4300 셔터박스 상부덮개 마구리 W80 60*40 x x 4 5 6 8 ``` #### **6단계 헤더 (최종 세부사항)** ```html 규격
(사이즈,전면밑,레일폭,점검구방향) size 1219 2438 3000 3500 4000 4150 1219*@ size 날개 수량 3000 size 3000 4000 x 철재x 3000 4500 6000 6000 7000 8200 3000 6000 7000 8000 8200 보강개수환산 size 3000 6000 300 2500 ``` ## 🎨 UI/UX 특징 ### 📱 **반응형 디자인** - Bootstrap `table-responsive` 클래스 활용 - 모바일 최적화된 테이블 레이아웃 - 스크롤 가능한 테이블 구조 ### 🔘 **버튼 시스템** ```html + ``` ### 🎯 **색상 코딩 시스템** - **초록색 (bg-success)**: 철재 스라트 기본 색상 - **파란색 (text-primary)**: 철재 관련 항목 - **빨간색 (text-danger)**: 부자재 관련 항목 - **초록색 (text-success)**: 개발자 모드 컬럼 번호 ## 🔧 개발자 모드 기능 ### 👨‍💻 **개발자 모드 활성화** ```php if ($user_idtem === 'pro') { echo ""; // 1) 기본 col1~col4 for ($i = 1; $i <= 4; $i++) { echo "col{$i}"; } // 2) col4 다음에 col4_quartz (투시창 선택) echo "col4_quartz"; // 3) col5~col18 (특수 처리 포함) for ($i = 5; $i <= 18; $i++) { if($i==10) { $j = 'col10_SW'; // 철재제작치수 가로 echo "$j"; $j = 'col11_SH'; // 철재제작치수 높이 echo "$j"; echo "col{$i}"; } else { echo "col{$i}"; } } // 4) col19 이전에 추가할 3개 (모터 관련) echo "col19_brand"; echo "col19"; echo "col19_wireless"; // 5) 나머지 col20~col46 for ($i = 20; $i <= 46; $i++) { echo "col{$i}"; } echo "col46_wing"; // 6) col47~col77 for ($i = 47; $i <= 77; $i++) { echo "col{$i}"; } echo ""; // 컬럼 번호 표시 행 echo " idx "; for ($i = 0; $i <= 82; $i++) { echo "$i"; } echo ""; } ``` ### 📊 **특수 컬럼 처리** - **col4_quartz**: 투시창 선택 (철재 특화) - **col10**: 철재제작사이즈 (3개 컬럼으로 분할) - `col10_SW`: 가로 사이즈 - `col11_SH`: 세로 사이즈 - `col10`: 통합 사이즈 - **col19**: 모터 관련 (3개 컬럼으로 분할) - `col19_brand`: 계산서 발행 주체 - `col19`: 전원 - `col19_wireless`: 유/무선 - **col46_wing**: 마구리 윙 관련 - `col46`: 기본 필드 - `col46_wing`: 마구리 날개 여부 ## 📊 컬럼 구조 (84개 컬럼) ### 🎯 **컬럼별 분류** #### **기본 정보 (1-15)** - **col1**: 행추가/삭제 버튼 - **col2**: 일련번호 - **col3**: 층수 - **col4**: 부호 - **col4_quartz**: 투시창선택 (철재 특화) - **col5**: 제품명 - **col6**: 종류 - **col7-8**: 가이드레일 (가로/높이) - **col9-10**: 오픈사이즈 (가로/높이) - **col11-12**: 제작사이즈 철재 (가로/높이) - **col13-14**: 제작사이즈 부자재 (가로/높이) - **col15**: 면적 - **col16**: 중량 - **col17**: 투시창수량 (철재 특화) - **col18**: 셔터수량 #### **연동제어기 (19-21)** - **col19**: 연동제어기 관련 설정 #### **모터 (22-28)** - **col22**: 모터 견적가 포함 - **col23**: 전원 (220V/380V) - **col24**: 유/무선 - **col25**: 용량 - **col26-28**: 브라켓 관련 #### **가이드레일 (29-36)** - **col29-34**: 가이드레일 마감/보강재 - **col35**: 하부base1 - **col36**: 하부base2 #### **케이스 (37-54)** - **col37-41**: 레일용 연기차단재 W50 - **col42-53**: 셔터박스 관련 설정 - **col54**: 케이스용 연기차단재 #### **하단마감재 (55-64)** - **col55-57**: 하장바 - **col58-64**: 기타 하단마감재 #### **감기샤프트 (65-77)** - **col65**: 인치 - **col66-77**: 원형파이프 (다양한 길이) #### **각파이프 (78-81)** - **col78-81**: 50*30*1.4T 각파이프 #### **부자재 (82-84)** - **col82**: 조인트바 - **col83**: 앵글 - **col84**: 기타 부자재 ## 🔧 개발자 사용법 ### 📝 **기본 사용법** ```php // 기본 철재 스라트 테이블 생성 generateTableSection_slat('estimateSlat', '철재 스라트 견적', 'bg-success', '', '견적서', 'edit'); // 개발자 모드로 테이블 생성 generateTableSection_slat('estimateSlat', '철재 스라트 견적', 'bg-success', 'pro', '견적서', 'view'); ``` ### 🎯 **조건부 버튼 표시** ```php // 견적서 모드에서만 단가표 버튼 표시 if($process == '견적서') { echo ""; // 뷰 모드에서만 견적서/산출내역서 버튼 표시 if($mode === 'view') { echo ""; echo ""; } } ``` ### 🔄 **동적 테이블 ID 생성** ```php // 테이블 ID를 동적으로 생성하여 JavaScript에서 참조 $tableId = $id . 'Table'; echo ""; ``` ## 🚨 주의사항 ### ⚠️ **필수 의존성** - Bootstrap 5.x - Bootstrap Icons - jQuery (JavaScript 연동용) ### 🔒 **보안 고려사항** - 사용자 권한에 따른 버튼 표시 제어 - XSS 방지를 위한 출력 이스케이프 처리 - SQL 인젝션 방지를 위한 서버 사이드 검증 ### 📱 **성능 최적화** - 대용량 테이블 렌더링 시 성능 고려 - 조건부 렌더링으로 불필요한 요소 제거 - CSS 클래스 최적화 ## 🐛 디버깅 가이드 ### 🔍 **개발자 모드 활용** ```php // 개발자 모드에서 컬럼명과 번호 확인 if ($user_idtem === 'pro') { // 컬럼명 표시 echo ""; // 컬럼 번호 표시 echo ""; } ``` ### 🛠️ **일반적인 문제 해결** #### 1. 테이블이 표시되지 않는 경우 ```php // 테이블 ID 확인 echo ""; // 컨테이너 확인 echo ""; ``` #### 2. 버튼이 작동하지 않는 경우 ```javascript // JavaScript에서 테이블 ID 확인 console.log('Table ID:', '{$id}Table'); // 이벤트 바인딩 확인 $('#{$id}Table').on('click', '.add-row-slat', function() { console.log('Add row clicked'); }); ``` #### 3. 컬럼 수가 맞지 않는 경우 ```php // 컬럼 수 계산 $totalColumns = 84; // 기본 컬럼 수 if ($user_idtem === 'pro') { $totalColumns += 2; // 개발자 모드 추가 컬럼 } echo ""; ``` ## 📚 관련 파일 ### 🔗 **의존성 파일** - `Bootstrap CSS/JS`: UI 프레임워크 - `Bootstrap Icons`: 아이콘 라이브러리 - `jQuery`: JavaScript 라이브러리 ### 🔗 **연관 파일** - `common_addrowJS.php`: 행 추가 JavaScript - `common_screen.php`: 스크린 테이블 생성 - `estimateSlat.php`: 철재 스라트 견적 메인 페이지 - `write_form.php`: 견적 작성 폼 ### 🔗 **JavaScript 연동** - `estimateslat_view`: 테이블 표시/숨김 - `viewEstimateSlatUnit`: 단가표 보기 - `viewEstimateSlat`: 견적서 보기 - `viewEstimateSlatDetail`: 산출내역서 보기 - `add-row-slat`: 행 추가 기능 ## 🎯 스크린 vs 철재 차이점 ### 🔍 **주요 차이점** #### **1. 투시창 기능** - **스크린**: 투시창 관련 컬럼 없음 - **철재**: `col4_quartz` (투시창선택) 추가 #### **2. 수량 구분** - **스크린**: 셔터수량만 존재 - **철재**: 투시창수량 + 셔터수량 분리 #### **3. 색상 테마** - **스크린**: 파란색 (`bg-primary`) - **철재**: 초록색 (`bg-success`) #### **4. 컬럼 수** - **스크린**: 77개 컬럼 - **철재**: 84개 컬럼 (7개 추가) #### **5. 특수 컬럼** - **스크린**: `col18_brand`, `col18`, `col18_wireless` - **철재**: `col19_brand`, `col19`, `col19_wireless` ## 🎯 향후 개선 방향 ### 🔄 **코드 리팩토링** - 함수 분리 및 모듈화 - 설정 파일 분리 - 템플릿 엔진 도입 고려 ### 🎨 **UI/UX 개선** - 드래그 앤 드롭 컬럼 재정렬 - 컬럼 숨김/표시 기능 - 실시간 검증 메시지 ### ⚡ **성능 최적화** - 가상 스크롤링 도입 - 지연 로딩 구현 - 메모리 사용량 최적화 ### 🔧 **기능 확장** - 동적 컬럼 추가/제거 - 사용자 정의 테이블 템플릿 - 다국어 지원 --- **📅 문서 버전**: 1.0 **👨‍💻 작성자**: 개발팀 **📝 최종 수정일**: 2024-12-24 **🔗 관련 문서**: [견적 시스템 전체 가이드](./README.md), [common_addrowJS 개발자 가이드](./common_addrowJS_developer_guide.md), [common_screen 개발자 가이드](./common_screen_developer_guide.md)
col{$i}{$i}