로그인 회원가입

개발실

업그레이드/패치소식

thumb

xZine에 문의폼관리 기능 추가

관리자모두 게시판관리 서브메뉴 마지막에 문의/신청관리 추가 http://localhost/lab.xzine.kr/web/admin   - 문의관리 목록 - 목록 우측 상단에 문의 폼관리 버튼 - 문의 폼 생성, 구글폼 스타일 항목 임의 생성, 문의폼 다중 생성 가능(메뉴관리에서 메뉴타입에 문의폼 연결, 문의폼 명칭 선택으로 연결사용) - 문의 폼 명칭, 항목 무제한 추가, 글쓰기 권한(비회원, 레벨1~), 항목별 속성(텍스트라인, textarea, 날짜피커, select, radio box, check box 등 사용가능한 모든 속성), 필수, 기본값(placeholder), 목록표시 - 문의 폼 작성시 무조건 비밀글, 작성자와 관리자만 내용 볼 수 있게 (신청 내역은 사이트에서 목록으로(목록표시 체크된 항목만(제목, 작성자, 작성일, 처리(관리자가 답변, 준비 중 등으로 체크) 필수), 하단 12개 목록기준 페이징) - 문의 답변, 원글 -> 답글, 재문의, 재답변 등 가능 - 관리자모드 문의관리는 문의 항목별로, 신청내역 목록 클릭하면 문의 내역, 여기서도 답변 가능하게(답변, 준비중 등 상태표시), 목록 우측 상단에 엑셀 저장, 문의 폼당 모든 항목 셀로 저장     관리자 화면 (/admin/inquiry, 게시판관리 서브메뉴 맨 아래): 문의폼 목록 + 우측 상단 격인 "문의폼 생성" 탭에서 폼 명칭/슬러그(URL)/작성권한(비회원 또는 회원 레벨1↑)/노출여부 설정 각 폼의 "항목관리"에서 텍스트/여러줄텍스트/날짜/드롭다운/라디오/체크박스 항목을 무제한 추가, 필수여부·기본값(placeholder)·목록표시 여부·정렬순서까지 설정 각 폼의 "신청내역"에서 목록표시 체크된 항목만 컬럼으로 노출 + 제목/작성자/작성일/처리상태는 항상 표시, 12개씩 페이징 신청내역 클릭 → 전체 항목 상세 + 답변/재문의 스레드 + 처리상태(대기/준비중/답변완료) 변경 목록 우측 상단 "엑셀 저장" 버튼 → 해당 폼의 모든 항목을 컬럼으로 하는 CSV 다운로드 (엑셀에서 한글 깨짐 없도록 UTF-8 BOM 처리) 메뉴관리 연동: "메뉴 타입"에 "문의폼 연결" 추가 → 등록된 문의폼 중 선택하면 /inquiry/{슬러그}로 자동 연결 (게시판/웹진/페이지 연결과 동일한 방식) 공개 화면: /inquiry/{슬러그} — 항목 유형에 맞는 입력폼 렌더링, 작성권한 없으면 로그인 안내 제출 시 무조건 비밀글 처리, 비회원은 이름+확인비밀번호 입력 /inquiry/view/{id} — 작성자 본인(로그인 세션 일치) 또는 관리자만 즉시 열람, 비회원은 비밀번호 확인 후 열람 → 원글 내용 + 답변/재문의 스레드 확인, 재문의 작성 가능 전체 흐름(폼 생성 → 항목 추가 → 공개 작성 폼 → 제출 → 비밀글 확인 → 재문의)을 실제로 curl로 테스트해서 정상 동작을 확인했습니다.
2026.07.05
thumb

메인 레이아웃에 일반 페이지 단독 사용 추가

홈은 지금 원래 상태(히어로 슬라이더 + 요금제 3종)로 복원해뒀습니다. 추가된 기능 http://localhost/lab.xzine.kr/web/admin/design?tab=main_layout 최상단에 "[ ] 일반페이지 사용" 체크박스가 생겼습니다. 체크하면 그 아래 캔버스 레이아웃 대신 원하는 일반페이지를 고르는 드롭다운이 나타나고, 페이지를 선택하면 즉시 저장됩니다(별도 "저장" 버튼 클릭). 체크박스를 켜고 페이지를 선택하면, 홈 화면이 그 일반페이지의 콘텐츠 + 전용 CSS/JS 파일을 그대로 보여줍니다 (기존 캔버스 메인슬라이드/레이아웃은 무시). 체크를 끄면 즉시 기존 캔버스 레이아웃으로 돌아갑니다. 테넌트별로 독립적으로 관리됩니다 (tenant_settings.home_use_page, home_page_id 컬럼 추가) — 다른 테넌트의 페이지를 실수로 선택해도 서버에서 소유권을 검증해서 막습니다. 존재하지 않는 페이지가 선택된 상태로 남아있어도 fatal error 없이 "페이지를 찾을 수 없습니다" 안내 문구만 뜨도록 안전장치를 넣었습니다. 작업 중 발견한 별개 버그: 이번에 컬럼을 추가하는 마이그레이션 스크립트가 최초 실행 시 .env의 DB_NAME(=web.xzine_db)을 못 읽고 기본값 xzine_db에 잘못 컬럼을 만들었습니다 — CLI로 직접 실행하는 마이그레이션 스크립트들이 Env::load()를 안 부르면 실제 서비스가 쓰는 DB와 다른 DB에 붙는 문제였습니다. 잘못 만든 컬럼은 지우고 web.xzine_db에 정확히 다시 만들어뒀습니다.
2026.07.04

일반 페이지 추가 생성안되는 문제

found it — the actual page 폼(form)들이 잘못된 URL로 제출되고 있었습니다. pages.php의 폼 action이 여전히 BASE_URL을 쓰고 있어서 요청 자체가 컨트롤러에 도달하지 못하고 있었습니다. 읽기 파일 1개, 실행됨 명령 1개 Now let's check the rest of the codebase for the same action="<?= BASE_URL ?>/admin/... pattern in every admin view, since this has proven to be a recurring copy-paste bug. 실행됨 명령 3개 Good, that's the only remaining instance and it's dead/unrouted code (not referenced anywhere), so it's not affecting anything live. Let's verify the fix with a syntax/response check. 실행됨명령 진짜 원인을 찾았습니다. 이전에 컨트롤러의 리다이렉트(header("Location: ..."))는 고쳤지만, 그보다 앞단에서 폼 자체가 잘못된 URL로 제출되고 있었습니다. views/admin/pages.php의 폼 3개가 여전히 BASE_URL(테넌트 경로 없음)로 제출하고 있었습니다: 99번째 줄: 삭제 폼 → BASE_URL/admin/pages/delete/... 115번째 줄: 페이지 복사 폼 → BASE_URL/admin/pages/save 139번째 줄: 생성/수정 폼 → BASE_URL/admin/pages/save 라우터는 URL 첫 세그먼트를 테넌트 핸들(namroki)로 인식해서 떼어내는 구조라, admin이 테넌트로 인식되지 않아 요청이 컨트롤러(pagesSave())에 아예 도달하지 못했습니다. 그래서 DB에 아무것도 저장되지 않고, 에러 메시지도 없이 조용히 다른 곳으로 흘러간 것입니다. 다른 정상 동작하는 관리자 화면들(boards.php, design.php 등)은 전부 TENANT_BASE_URL을 쓰고 있었는데, pages.php만 예전 코드가 남아있었습니다. 세 곳 모두 TENANT_BASE_URL로 수정했습니다. 이제 http://localhost/lab.xzine.kr/namroki/admin/pages에서 생성/수정/삭제/복사가 정상적으로 컨트롤러에 도달할 것입니다. 다시 한 번 새 페이지 생성을 시도해보세요. 참고: 페이지 ID 중복 체크(pagesSave())가 테넌트별로 구분되지 않고 전체 테넌트에서 공통으로 검사되는 점을 발견했습니다 (provision, privacy 같은 페이지 ID는 이미 다른 테넌트(ms01)가 쓰고 있어 같은 ID로는 생성 불가). 지금 요청하신 문제와는 별개라 손대지 않았는데, 특정 페이지 ID로 생성이 안 될 경우 이 부분이 원인일 수 있어 참고로 남깁니다.
2026.07.04

일반페이지 추가, 게시판 삭제시 문제

 관리자 라우트에서 리다이렉트할 때 테넌트 경로(namroki)가 빠진 BASE_URL을 사용해서, 처리는 끝났는데(생성/삭제 자체는 성공) 엉뚱한 비테넌트 URL로 리다이렉트되어 라우터가 이를 처리 못하고 메인(홈)으로 튕겨나가는 현상이었습니다. 1. 일반페이지 생성 src/Controllers/AdminController.php:896 pagesSave() — 페이지는 실제로 DB에 INSERT 됐지만, 저장 후 header("Location: " . BASE_URL . "/admin/pages")로 리다이렉트되어 테넌트 인식 실패 → 메인으로 이동 같은 함수의 pagesDelete()(905줄)도 동일한 버그라 함께 수정 콘솔에 뜬 정규식 에러는 별개 이슈: views/admin/pages.php:160의 pattern="[a-zA-Z0-9_-]+"가 최신 브라우저의 정규식 파서(v 플래그) 버그에 걸려 컴파일 실패 — pattern="[a-zA-Z0-9_\-]+"로 하이픈을 이스케이프해서 수정 (같은 패턴이 있던 tenant_create.php도 함께 수정) 2. 게시판 삭제 src/Controllers/AdminController.php:698 boardsDelete() — 삭제는 정상 실행되지만 header("Location: " . BASE_URL . "/admin/boards")로 리다이렉트되어 역시 메인으로 이동 추가로 발견해 함께 고친 동일 버그 (아직 리포트 안 하셨지만 같은 증상이 났을 항목들) delete() (게시글 삭제, 357줄) — BASE_URL . "/" → TENANT_BASE_URL . "/" popupsSave() / popupsDelete() (758, 779줄) — 팝업 저장·삭제 후 리다이렉트 전부 TENANT_BASE_URL로 통일했습니다. 이제 일반페이지 생성 시 저장 후 목록 페이지에 정상적으로 남고, 게시판/게시글/팝업 삭제 후에도 각 관리 목록으로 돌아옵니다.
2026.07.04
0
웹장이 1:1 상담톡
운영자 부재 중입니다. 대화를 남겨두시면 확인 후 순차 답변 드립니다.