first commit 2
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: config.php
|
||||
*
|
||||
* '저널' 게시판의 특징과 동작을 정의하는 설정 파일입니다.
|
||||
* 코어 스킨(rb.board.core)은 이 설정을 읽어 그에 맞게 동작합니다.
|
||||
*/
|
||||
|
||||
$board_config = array(
|
||||
// =================================================================================
|
||||
// 1. 글쓰기(write) 페이지 설정
|
||||
// =================================================================================
|
||||
'write' => array(
|
||||
// '요약' 필드 사용 여부 (목록 페이지에 노출될 짧은 내용)
|
||||
'use_summary' => true,
|
||||
'summary_label' => '요약 내용',
|
||||
'summary_placeholder' => '목록에 표시될 간단한 요약 내용을 입력하세요.',
|
||||
|
||||
// '외부 링크' 필드 사용 여부
|
||||
'use_external_link' => true,
|
||||
'external_link_label' => '외부 링크 (URL)',
|
||||
'external_link_placeholder' => 'https://example.com',
|
||||
|
||||
// '시작일', '종료일' 필드 사용 여부 (이벤트/일정 게시판용)
|
||||
'use_dates' => false,
|
||||
|
||||
// 파일 필드별 라벨 및 설명
|
||||
'file_labels' => array(
|
||||
1 => '썸네일 이미지 (필수)',
|
||||
2 => 'PDF 파일 (필수)',
|
||||
),
|
||||
'file_texts' => array(
|
||||
1 => '목록 페이지의 카드형 뷰에 표시될 대표 이미지입니다.',
|
||||
2 => '뷰어에 표시될 PDF 파일을 첨부하세요.',
|
||||
),
|
||||
),
|
||||
|
||||
// =================================================================================
|
||||
// 2. 목록(list) 페이지 설정
|
||||
// =================================================================================
|
||||
'list' => array(
|
||||
// 기본 뷰 모드 ('card' 또는 'list')
|
||||
'default_view_mode' => 'card',
|
||||
|
||||
// 카드형 뷰에서 표시할 정보
|
||||
'card_view' => array(
|
||||
'show_category' => true, // 카테고리
|
||||
'show_thumbnail' => true, // 썸네일
|
||||
'show_summary' => true, // 요약 내용
|
||||
'summary_length' => 120, // 요약 내용 글자 수 제한
|
||||
'show_date' => true, // 날짜
|
||||
'show_hit' => false, // 조회수
|
||||
),
|
||||
|
||||
// 리스트형 뷰에서 표시할 정보
|
||||
'list_view' => array(
|
||||
'show_category' => true, // 카테고리
|
||||
'show_icon_file' => true, // 파일 아이콘 (PDF, ZIP 등)
|
||||
'show_icon_new' => true, // 새 글 아이콘
|
||||
'show_icon_hot' => true, // 인기 글 아이콘
|
||||
'show_date' => true, // 날짜
|
||||
'show_hit' => true, // 조회수
|
||||
),
|
||||
),
|
||||
|
||||
// =================================================================================
|
||||
// 3. 내용(view) 페이지 설정
|
||||
// =================================================================================
|
||||
'view' => array(
|
||||
// 💡 [핵심 추가] 어떤 전문 코어 뷰 파일을 사용할지 정의합니다.
|
||||
'core_type' => 'journal', // 'journal' 타입의 뷰 코어를 사용
|
||||
'use_pdf_viewer' => true, // PDF 뷰어 사용 여부 (전문 코어 내부에서 사용)
|
||||
),
|
||||
);
|
||||
|
||||
// 게시판 설정값을 재정의합니다.
|
||||
$board['bo_upload_count'] = 2; // 썸네일 1 + PDF 1
|
||||
$board['bo_use_dhtml_editor'] = 1; // HTML 에디터 사용
|
||||
|
||||
// 저널 스킨 광고 영역 설정
|
||||
$journal_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,239 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* journal :: style.css
|
||||
* 💡 [최종 수정] 뷰 전환 오류를 해결하기 위해 CSS 선택자를 원래대로 복원하고, 하이브리드 레이아웃을 올바르게 지원합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#journal-board .board-container,
|
||||
#journal-board .board-write-container,
|
||||
#journal-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Header
|
||||
========================================================================== */
|
||||
#journal-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#journal-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#journal-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#journal-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#journal-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#journal-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#journal-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#journal-board .board-search { flex-grow: 1; }
|
||||
#journal-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#journal-board .board-search select,
|
||||
#journal-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#journal-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#journal-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#journal-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#journal-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Hybrid Layout & View Switching
|
||||
========================================================================== */
|
||||
#journal-board .list-separator {
|
||||
text-align: center;
|
||||
padding: 40px 20px;
|
||||
margin: 40px 0;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#journal-board .list-separator p {
|
||||
font-size: 1.1rem;
|
||||
color: #666;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 수정합니다. */
|
||||
#journal-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#journal-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#journal-board .board-list-wrapper .card-list-view,
|
||||
#journal-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Card & List
|
||||
========================================================================== */
|
||||
#journal-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#journal-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#journal-board .card-item { position: relative; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#journal-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#journal-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#journal-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#journal-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#journal-board .badge-pdf, #journal-board .badge-link, #journal-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#journal-board .badge-pdf { background-color: #e74c3c; }
|
||||
#journal-board .badge-link { background-color: #3498db; }
|
||||
#journal-board .badge-featured { background-color: #9b59b6; }
|
||||
#journal-board .card-content { padding: 25px; }
|
||||
#journal-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#journal-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#journal-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#journal-board .list-group { border-top: 2px solid #333; }
|
||||
#journal-board .list-group-header, #journal-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#journal-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#journal-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#journal-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#journal-board .list-cell.num { flex: 0 0 80px; }
|
||||
#journal-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#journal-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#journal-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#journal-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Admin Checkbox Styles
|
||||
========================================================================== */
|
||||
#journal-board .chk-box input[type="checkbox"] {
|
||||
-webkit-appearance: checkbox !important;
|
||||
-moz-appearance: checkbox !important;
|
||||
appearance: checkbox !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
#journal-board .list-cell.chk input[type="checkbox"] {
|
||||
-webkit-appearance: checkbox !important;
|
||||
-moz-appearance: checkbox !important;
|
||||
appearance: checkbox !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
View Page Styles
|
||||
========================================================================== */
|
||||
#journal-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#journal-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#journal-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#journal-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#journal-board .view-content { padding: 30px 0; }
|
||||
|
||||
#journal-board #pdf-viewer-container { display: block; margin-bottom: 40px; border: 1px solid #e0e0e0; border-radius: 8px; }
|
||||
#journal-board #pdf-viewer-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 12px 20px;
|
||||
background: rgba(248, 248, 248, 0.95);
|
||||
backdrop-filter: blur(5px);
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
#journal-board #pdf-viewer-header .page-indicator { font-size: 1rem; color: #333; font-weight: 500; }
|
||||
#journal-board #pdf-viewer-header #page-num-input { width: 60px; text-align: center; border: 1px solid #ddd; border-radius: 5px; padding: 5px; font-size: 1rem; }
|
||||
#journal-board #canvas-wrapper { overflow: auto; background: #f9f9f9; cursor: pointer; }
|
||||
#journal-board #pdf-canvas { display: block; margin: 0 auto; }
|
||||
#journal-board #pdf-loading { padding: 100px 20px; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 20px; font-size: 1.3rem; color: #666; font-weight: 500; }
|
||||
#journal-board .spinner { width: 40px; height: 40px; border: 4px solid #e0e0e0; border-top: 4px solid #0056b3; border-radius: 50%; animation: spin 1s linear infinite; }
|
||||
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
|
||||
|
||||
#journal-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#journal-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#journal-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#journal-board .download-list li:last-child { border-bottom: none; }
|
||||
#journal-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#journal-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#journal-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#journal-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#journal-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#journal-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#journal-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#journal-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#journal-board .view-summary { font-size: 1.1rem; line-height: 1.7; color: #555; padding: 25px; background: #f8f8f8; border-radius: 8px; margin-top: 40px; }
|
||||
#journal-board .view-detail-content { margin-top: 40px; }
|
||||
#journal-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Common Footer & Write Form
|
||||
========================================================================== */
|
||||
#journal-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .pagination-wrapper, #journal-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#journal-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#journal-board .board-footer .btn, #journal-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#journal-board .board-footer .btn:hover, #journal-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .board-footer .btn-secondary, #journal-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .board-footer .btn-primary, #journal-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#journal-board .write-form-group { margin-bottom: 25px; }
|
||||
#journal-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#journal-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#journal-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#journal-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#journal-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#journal-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#journal-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#journal-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
/* 3-Column Layout - PC 전용 */
|
||||
#journal-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; align-self: flex-start; }
|
||||
#journal-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#journal-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#journal-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#journal-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,295 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* journal :: style.css
|
||||
* 💡 [최종 수정] 뷰 전환 오류를 해결하기 위해 CSS 선택자를 원래대로 복원하고, 하이브리드 레이아웃을 올바르게 지원합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#journal-board .board-container,
|
||||
#journal-board .board-write-container,
|
||||
#journal-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Header
|
||||
========================================================================== */
|
||||
#journal-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#journal-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#journal-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#journal-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#journal-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#journal-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#journal-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#journal-board .board-search { flex-grow: 1; }
|
||||
#journal-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#journal-board .board-search select,
|
||||
#journal-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#journal-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#journal-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#journal-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#journal-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Hybrid Layout & View Switching
|
||||
========================================================================== */
|
||||
#journal-board .list-separator {
|
||||
text-align: center;
|
||||
padding: 40px 20px;
|
||||
margin: 40px 0;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#journal-board .list-separator p {
|
||||
font-size: 1.1rem;
|
||||
color: #666;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 수정합니다. */
|
||||
#journal-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#journal-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#journal-board .board-list-wrapper .card-list-view,
|
||||
#journal-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Card & List
|
||||
========================================================================== */
|
||||
#journal-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#journal-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#journal-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#journal-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#journal-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#journal-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#journal-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#journal-board .badge-pdf, #journal-board .badge-link, #journal-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#journal-board .badge-pdf { background-color: #e74c3c; }
|
||||
#journal-board .badge-link { background-color: #3498db; }
|
||||
#journal-board .badge-featured { background-color: #9b59b6; }
|
||||
#journal-board .card-content { padding: 25px; }
|
||||
#journal-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#journal-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#journal-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#journal-board .list-group { border-top: 2px solid #333; }
|
||||
#journal-board .list-group-header, #journal-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#journal-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#journal-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#journal-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#journal-board .list-cell.num { flex: 0 0 80px; }
|
||||
#journal-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#journal-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#journal-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#journal-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
/* ==========================================================================
|
||||
View Page Styles
|
||||
========================================================================== */
|
||||
#journal-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#journal-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#journal-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#journal-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#journal-board .view-content { padding: 30px 0; }
|
||||
|
||||
#journal-board #pdf-viewer-container { display: block; margin-bottom: 40px; border: 1px solid #e0e0e0; border-radius: 8px; }
|
||||
#journal-board #pdf-viewer-header {
|
||||
position: sticky;
|
||||
top: 80px;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 12px 20px;
|
||||
background: rgba(248, 248, 248, 0.95);
|
||||
backdrop-filter: blur(5px);
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
#journal-board #pdf-viewer-header .page-indicator { font-size: 1rem; color: #333; font-weight: 500; }
|
||||
#journal-board #pdf-viewer-header #page-num-input { width: 60px; text-align: center; border: 1px solid #ddd; border-radius: 5px; padding: 5px; font-size: 1rem; }
|
||||
#journal-board #canvas-wrapper { overflow: auto; background: #f9f9f9; cursor: pointer; }
|
||||
#journal-board #pdf-canvas { display: block; margin: 0 auto; }
|
||||
#journal-board #pdf-loading { padding: 100px 20px; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 20px; font-size: 1.3rem; color: #666; font-weight: 500; }
|
||||
#journal-board .spinner { width: 40px; height: 40px; border: 4px solid #e0e0e0; border-top: 4px solid #0056b3; border-radius: 50%; animation: spin 1s linear infinite; }
|
||||
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
|
||||
|
||||
#journal-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#journal-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#journal-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#journal-board .download-list li:last-child { border-bottom: none; }
|
||||
#journal-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#journal-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#journal-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#journal-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#journal-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#journal-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#journal-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#journal-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#journal-board .view-summary { font-size: 1.1rem; line-height: 1.7; color: #555; padding: 25px; background: #f8f8f8; border-radius: 8px; margin-top: 40px; }
|
||||
#journal-board .view-detail-content { margin-top: 40px; }
|
||||
#journal-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Common Footer & Write Form
|
||||
========================================================================== */
|
||||
#journal-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .pagination-wrapper, #journal-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#journal-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#journal-board .board-footer .btn, #journal-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#journal-board .board-footer .btn:hover, #journal-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .board-footer .btn-secondary, #journal-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .board-footer .btn-primary, #journal-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#journal-board .write-form-group { margin-bottom: 25px; }
|
||||
#journal-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#journal-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#journal-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#journal-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#journal-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#journal-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#journal-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#journal-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
/* ==========================================================================
|
||||
3-Column Layout & Responsive
|
||||
========================================================================== */
|
||||
#journal-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; }
|
||||
#journal-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
@media (max-width: 1024px) {
|
||||
#journal-board .three-column-layout { flex-direction: column; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { position: static; flex-basis: 100%; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
#journal-board .board-container, #journal-board .board-write-container, #journal-board .board-view-container { padding: 15px; }
|
||||
#journal-board .board-controls { flex-direction: column-reverse; align-items: stretch; gap: 15px; }
|
||||
#journal-board .card-list { grid-template-columns: 1fr; }
|
||||
#journal-board .list-cell.category, #journal-board .list-cell.name, #journal-board .list-cell.hit { display: none; }
|
||||
#journal-board .view-footer { flex-direction: column; gap: 15px; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { justify-content: center; width: 100%; }
|
||||
#journal-board .view-header h1 { font-size: 1.8rem; }
|
||||
#journal-board .view-meta { flex-direction: column; gap: 5px; }
|
||||
/* ===============================
|
||||
PDF Viewer - Mobile Fix
|
||||
=============================== */
|
||||
#pdf-viewer-container {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 상단 컨트롤 영역 */
|
||||
#pdf-viewer-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
padding: 10px;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
#pdf-viewer-header button,
|
||||
#pdf-viewer-header a {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
font-size: 0.9rem;
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
/* 페이지 표시 영역 */
|
||||
#pdf-viewer-header .page-indicator {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
#page-num-input {
|
||||
width: 60px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* PDF 캔버스 영역 */
|
||||
#canvas-wrapper {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
background: #f5f5f5;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
#pdf-canvas {
|
||||
width: 100% !important;
|
||||
height: auto !important;
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* 로딩 화면 */
|
||||
#pdf-loading {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#journal-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#journal-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#journal-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const journalBoard = document.getElementById('journal-board');
|
||||
if (!journalBoard) return;
|
||||
|
||||
// 💡 [최종 수정] data-view-mode 속성이 있는 실제 요소인 .board-list-wrapper를 선택합니다.
|
||||
const boardListWrapper = journalBoard.querySelector('.board-list-wrapper');
|
||||
if (!boardListWrapper) return;
|
||||
|
||||
const viewModeButtons = document.querySelectorAll('.btn-view-mode');
|
||||
const paginationWrapper = document.querySelector('.pagination-wrapper');
|
||||
const loadMoreWrapper = document.querySelector('.load-more-wrapper');
|
||||
|
||||
viewModeButtons.forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
const mode = this.dataset.mode;
|
||||
viewModeButtons.forEach(btn => btn.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
|
||||
// 💡 [최종 수정] boardListWrapper의 data-view-mode 속성을 변경합니다.
|
||||
boardListWrapper.dataset.viewMode = mode;
|
||||
|
||||
// PHP에서 전달받은 JavaScript 전역 변수를 사용합니다.
|
||||
if (typeof journal_skin_options !== 'undefined') {
|
||||
set_cookie('board_' + journal_skin_options.bo_table + '_view_mode', mode, 365, journal_skin_options.cookie_domain, journal_skin_options.cookie_path);
|
||||
}
|
||||
|
||||
// 뷰 모드에 따라 페이지네이션/더보기 버튼 보이기/숨기기
|
||||
if (paginationWrapper) paginationWrapper.style.display = (mode === 'list') ? 'block' : 'none';
|
||||
if (loadMoreWrapper) loadMoreWrapper.style.display = (mode === 'card') ? 'block' : 'none';
|
||||
});
|
||||
});
|
||||
|
||||
// --- '더보기' 버튼 기능 ---
|
||||
const loadMoreButton = document.getElementById('btn-load-more');
|
||||
if (loadMoreButton) {
|
||||
loadMoreButton.addEventListener('click', function() {
|
||||
let currentPage = parseInt(this.dataset.page, 10);
|
||||
this.textContent = '로딩 중...';
|
||||
this.disabled = true;
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('page', currentPage);
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
|
||||
const newItems = doc.querySelectorAll('#board-list-wrapper .card-item');
|
||||
const cardList = boardListWrapper.querySelector('#board-list-wrapper .card-list'); // boardListWrapper 안에서 찾음
|
||||
|
||||
if (newItems.length > 0 && cardList) {
|
||||
newItems.forEach(item => {
|
||||
cardList.appendChild(item);
|
||||
});
|
||||
|
||||
currentPage++;
|
||||
this.dataset.page = currentPage;
|
||||
this.textContent = '더보기';
|
||||
this.disabled = false;
|
||||
|
||||
const nextLoadMoreButton = doc.getElementById('btn-load-more');
|
||||
if (!nextLoadMoreButton) {
|
||||
this.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
this.textContent = '마지막 페이지입니다.';
|
||||
this.disabled = true;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading more items:', error);
|
||||
this.textContent = '오류 발생';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function set_cookie(name, value, time, domain, path) {
|
||||
let expires = "";
|
||||
if (time) {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() + (time * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=" + path + "; domain=" + domain;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 목록 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- <div class="btn-group">-->
|
||||
<!-- --><?php //if ($list_href) { ?><!--<a href="--><?php //echo $list_href ?><!--" class="btn btn-secondary">목록</a>--><?php //} ?>
|
||||
<!-- --><?php //if ($write_href) { ?><!--<a href="--><?php //echo $write_href ?><!--" class="btn btn-primary">글쓰기</a>--><?php //} ?>
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 목록 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="btn-group">
|
||||
<?php if ($list_href) { ?><a href="<?php echo $list_href ?>" class="btn btn-secondary">목록</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn btn-primary">글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: view.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['left']) && $board_ad_config['view_ad']['left'] === true) || (isset($journal_skin_config['left_ad']) && $journal_skin_config['left_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-view-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 뷰 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/view.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['right']) && $board_ad_config['view_ad']['right'] === true) || (isset($journal_skin_config['right_ad']) && $journal_skin_config['right_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-view-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: write.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['left']) && $board_ad_config['write_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-write-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 글쓰기 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/write.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['right']) && $board_ad_config['write_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-write-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
Reference in New Issue
Block a user