first commit 2
@@ -0,0 +1,64 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* 페이지 스킨 통합 설정 파일
|
||||
* theme/rd.laser/skin/page/config.php
|
||||
*/
|
||||
|
||||
// 💡 [수정] $current_page_skin 변수가 이미 정의되어 있으면 그 값을 사용하고, 없으면 빈 문자열
|
||||
$current_page_skin = isset($current_page_skin) ? $current_page_skin : '';
|
||||
|
||||
// 기본 설정 (모든 페이지에 공통 적용)
|
||||
$page_common_config = array(
|
||||
'left_ad' => false, // 좌측 광고 기본값
|
||||
'right_ad' => false, // 우측 광고 기본값
|
||||
);
|
||||
|
||||
// 페이지별 개별 설정
|
||||
$page_specific_config = array(
|
||||
'greeting' => array(
|
||||
'left_ad' => true,
|
||||
'right_ad' => true,
|
||||
),
|
||||
'history' => array(
|
||||
'left_ad' => false,
|
||||
'right_ad' => true,
|
||||
),
|
||||
'team' => array(
|
||||
'left_ad' => false,
|
||||
'right_ad' => false,
|
||||
),
|
||||
'lasertech' => array(
|
||||
'left_ad' => true,
|
||||
'right_ad' => false,
|
||||
),
|
||||
'moldjournal' => array(
|
||||
'left_ad' => false,
|
||||
'right_ad' => true,
|
||||
),
|
||||
'greeting_new' => array(
|
||||
'left_ad' => true,
|
||||
'right_ad' => true,
|
||||
),
|
||||
'lasertech_new' => array(
|
||||
'left_ad' => true,
|
||||
'right_ad' => false,
|
||||
),
|
||||
'moldjournal_new' => array(
|
||||
'left_ad' => false,
|
||||
'right_ad' => true,
|
||||
),
|
||||
// 필요한 페이지 스킨을 여기에 추가하세요.
|
||||
);
|
||||
|
||||
// 현재 페이지에 맞는 설정을 병합합니다.
|
||||
$page_skin_config = $page_common_config; // 기본값으로 초기화
|
||||
|
||||
if ($current_page_skin && isset($page_specific_config[$current_page_skin])) {
|
||||
$page_skin_config = array_merge($page_skin_config, $page_specific_config[$current_page_skin]);
|
||||
}
|
||||
|
||||
// 하위 호환성을 위해 기존 변수명도 지원 (선택 사항)
|
||||
// $greeting_skin_config = $page_skin_config;
|
||||
?>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '인사말';
|
||||
$greeting_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* greeting 정보형 페이지 전용 스타일
|
||||
*/
|
||||
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 본문 콘텐츠 래퍼 */
|
||||
.greeting-content-wrapper {
|
||||
display: flex;
|
||||
gap: 40px;
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
.greeting-figure {
|
||||
flex: 0 0 250px; /* 이미지 너비 고정 */
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.greeting-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* 본문 스타일 */
|
||||
.prose {
|
||||
flex: 1; /* 남은 공간을 모두 차지 */
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3; /* 테마 메인 컬러 */
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
.prose h3:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #0056b3;
|
||||
}
|
||||
|
||||
/* 서명 */
|
||||
.signature {
|
||||
margin-top: 40px;
|
||||
text-align: right;
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.signature strong {
|
||||
display: block;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
.signature span {
|
||||
display: block;
|
||||
color: #666;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
/* 반응형 스타일 */
|
||||
@media (max-width: 992px) {
|
||||
.greeting-content-wrapper {
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
}
|
||||
.greeting-figure {
|
||||
margin-bottom: 30px;
|
||||
max-width: 300px;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
.info-page-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 1024px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
// 통합 설정 파일이 없을 경우 기본값 설정
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
|
||||
// 3. 스킨 경로 정의
|
||||
$current_page_skin = 'greeting';
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '신뢰와 전문성으로, 산업의 미래를 함께 만듭니다',
|
||||
'subtitle' => '대표 발행인 박준성',
|
||||
'content' => '
|
||||
<h3><i class="fas fa-hands-helping"></i> 환영의 인사</h3>
|
||||
<p>월간 레이저기술과 금형공구(舊. 금형저널)를 아껴주시는 독자 여러분, 그리고 (주)레이저월드 홈페이지를 찾아주신 모든 분들께 진심으로 환영의 인사를 드립니다.</p>
|
||||
<h3><i class="fas fa-rocket"></i> 미디어의 역할과 비전</h3>
|
||||
<p>(주)레이저월드(LW, Laser World)는 (주)한국산업정보센타가 오랜 기간 축적해온 레이저 전문 콘텐츠와 산업 네트워크를 기반으로 새롭게 설립된 레이저 기술 전문 미디어 기업입니다. 저희는 <strong>월간 레이저기술</strong>을 중심으로 단행본 발간, 세미나 개최 등 다양한 지식 플랫폼을 통해 국내외 레이저산업의 발전을 함께 만들어가고자 합니다. 불필요한 공백을 제거했습니다.</p>
|
||||
<p>1993년 창간한 월간 레이저기술은 30년 넘게 산업의 변화를 기록해온 국내 유일의 레이저 전문지로서, 앞으로도 깊이 있고 정확한 정보로 산업 발전의 중심에서 역할을 다하겠습니다.</p>
|
||||
<h3><i class="fas fa-gem"></i> 우리의 다짐</h3>
|
||||
<p>(주)레이저월드는 금형과 레이저라는 두 분야에 깊이 뿌리내린 전문성을 토대로, 산업 종사자에게 가장 신뢰할 수 있는 정보를 제공하는 것을 목표로 합니다. 정제된 콘텐츠, 현장 중심 취재, 그리고 산업과 함께 성장하겠다는 마음가짐으로 늘 한결같이 노력하겠습니다.</p>',
|
||||
'image_url' => $page_skin_url . '/images/caricature.jpg',
|
||||
'image_alt' => '대표 캐리커처',
|
||||
'sign_name' => '박준성 / 대표 발행인',
|
||||
'sign_company' => '(주)레이저월드'
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1']; // 여분필드 1: 부제목
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
// 첨부파일 (이미지)
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
// 본문 내 이미지 추출 시도
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
// 💡 [수정] 이미지 경로가 상대 경로인 경우 전체 URL로 변환
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
// /data/ 로 시작하면 G5_URL을 붙여줌 (그누보드 에디터 이미지 경로 특성 고려)
|
||||
// 만약 이미 도메인이 포함되어 있지 않다면 추가
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = ''; // 이미지가 없으면 빈 값
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2']; // 여분필드 2: 서명 이름
|
||||
$page_data['sign_company'] = $view['wr_3']; // 여분필드 3: 서명 소속
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div class="info-page-container">
|
||||
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<div class="greeting-content-wrapper">
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="greeting-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="greeting-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '인사말';
|
||||
$greeting_new_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
]
|
||||
?>
|
||||
@@ -0,0 +1,193 @@
|
||||
/*
|
||||
* greeting 정보형 페이지 전용 스타일
|
||||
*/
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 80px;
|
||||
background: #fff;
|
||||
min-height: 500px;
|
||||
}
|
||||
|
||||
.container {
|
||||
/* max-width: 1200px; !important; */ /* 💡 [수정] 고정 너비 제거 */
|
||||
width: 90%; !important;/* 💡 [추가] 화면 너비의 90% 사용 (좌우 5% 여백) */
|
||||
max-width: 1600px; /* 💡 [추가] 너무 넓어지는 것 방지 (선택 사항) */
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing-md);
|
||||
}
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
이미지 | (한글 위 / 영어 아래) 2컬럼 구성
|
||||
기존 flex → grid 로 변경
|
||||
===================================================== */
|
||||
.greeting-content-wrapper {
|
||||
display: grid; /* [변경] */
|
||||
grid-template-columns: 250px 1fr; /* 이미지 | 텍스트 */
|
||||
column-gap: 40px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
.greeting-figure {
|
||||
flex: 0 0 250px; /* [유지] */
|
||||
margin: 0;
|
||||
grid-row: 1 / 3; /* 🔥 한글+영문 전체 높이 차지 */
|
||||
}
|
||||
|
||||
.greeting-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
.signature {
|
||||
text-align: right;
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.signature strong {
|
||||
display: block;
|
||||
font-weight: 600;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
오른쪽 컬럼 내부 정렬
|
||||
===================================================== */
|
||||
.prose {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 한글 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:first-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
/* 영문 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:last-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
/* 제목 스타일 */
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.prose h3:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
📱 모바일 대응 (기존 유지 + grid 대응 추가)
|
||||
===================================================== */
|
||||
@media (max-width: 768px) {
|
||||
.greeting-content-wrapper {
|
||||
grid-template-columns: 1fr; /* 세로 스택 */
|
||||
}
|
||||
|
||||
.greeting-figure {
|
||||
grid-row: auto;
|
||||
max-width: 300px;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 7.4 KiB |
|
After Width: | Height: | Size: 53 KiB |
@@ -0,0 +1,127 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
|
||||
// 3. 스킨 경로 정의
|
||||
$current_page_skin = 'greeting_new';
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '신뢰와 전문성으로, 산업의 미래를 함께 만듭니다',
|
||||
'subtitle' => '', // 기존 코드에 주석 처리되어 있어 빈 값으로 설정
|
||||
'content' => '
|
||||
<h3><i class="fas fa-hands-helping"></i> 환영의 인사</h3>
|
||||
<p>
|
||||
월간 레이저기술과 금형공구(舊. 금형저널)를 아껴주시는 독자 여러분, 그리고 (주)레이저월드 홈페이지를 찾아주신 모든 분들께 진심으로 환영의 인사를 드립니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-rocket"></i> 미디어의 역할과 비전</h3>
|
||||
<p>
|
||||
(주)레이저월드(LW, Laser World)는 (주)한국산업정보센타가 오랜 기간 축적해온 레이저 전문 콘텐츠와 산업 네트워크를 기반으로 새롭게 설립된 레이저 기술 전문 미디어 기업입니다.
|
||||
<br>저희는 <strong>월간 레이저기술</strong>을 중심으로 단행본 발간, 세미나 개최 등 다양한 지식 플랫폼을 통해 국내외 레이저산업의 발전을 함께 만들어가고자 합니다.
|
||||
</p>
|
||||
<p>
|
||||
1993년 창간한 월간 레이저기술은 30년 넘게 산업의 변화를 기록해온 국내 유일의 레이저 전문지로서, 앞으로도 깊이 있고 정확한 정보로 산업 발전의 중심에서 역할을 다하겠습니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-gem"></i> 우리의 다짐</h3>
|
||||
<p>
|
||||
(주)레이저월드는 금형과 레이저라는 두 분야에 깊이 뿌리내린 전문성을 토대로, 산업 종사자에게 가장 신뢰할 수 있는 정보를 제공하는 것을 목표로 합니다.<br> 정제된 콘텐츠, 현장 중심 취재, 그리고 산업과 함께 성장하겠다는 마음가짐으로 늘 한결같이 노력하겠습니다.
|
||||
</p>',
|
||||
'image_url' => $page_skin_url . '/images/caricature.jpg',
|
||||
'image_alt' => '대표 캐리커처',
|
||||
'sign_name' => '박준성 / 대표 발행인',
|
||||
'sign_company' => '(주)레이저월드'
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content1">
|
||||
<div class="info-page-container">
|
||||
<div class="flex_box layout-col" data-layout="pag-content-<?php echo $current_page_skin; ?>">
|
||||
<!-- --><?php //echo rb_get_modules('main-content-'.$row_name); ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// history 페이지 스킨 광고 영역 설정
|
||||
$history_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,6 @@
|
||||
/* history style (reuse) */
|
||||
.fade-in{ opacity: 0; animation: fadeIn 0.8s ease-out forwards; }
|
||||
@keyframes fadeIn { to { opacity: 1; } }
|
||||
|
||||
.prose p { margin-top: 0.8rem; margin-bottom: 0.8rem; line-height: 1.9; }
|
||||
.prose h2 { margin-top: 1.2rem; margin-bottom: 0.6rem; color: #111827; }
|
||||
|
After Width: | Height: | Size: 60 KiB |
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
$current_page_skin = 'history';
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'history';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '회사 연혁',
|
||||
'subtitle' => '레이저월드가 걸어온 길',
|
||||
'content' => '
|
||||
<ul class="list-disc pl-5">
|
||||
<li><strong>1984</strong> - 월간 금형·공구 창간 (한국금형공업협동조합)</li>
|
||||
<li><strong>1991</strong> - (주)한국산업정보센타 설립</li>
|
||||
<li><strong>1993</strong> - 월간 레이저기술 창간</li>
|
||||
<li><strong>2025-09-03</strong> - (주)레이저월드 설립</li>
|
||||
</ul>
|
||||
<p class="mt-4">지속적인 콘텐츠 축적과 산업 네트워크를 바탕으로 전문 미디어로 성장해 왔습니다.</p>',
|
||||
'image_url' => '',
|
||||
'image_alt' => '',
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div class="info-page-container">
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<div class="greeting-content-wrapper">
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="greeting-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="greeting-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('History page loaded');
|
||||
});
|
||||
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '레이저기술';
|
||||
// lasertech 페이지 스킨 광고 영역 설정
|
||||
$lasertech_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* lasertech 정보형 페이지 전용 스타일
|
||||
*/
|
||||
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.8rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
|
||||
/* 💡 [최종 수정] 이미지 컨테이너의 크기를 절반으로 줄이고 중앙 정렬 */
|
||||
.info-page-figure {
|
||||
margin: 0 auto 40px auto; /* 상하 마진 유지, 좌우는 auto로 중앙 정렬 */
|
||||
max-width: 25%; /* 최대 너비를 25%로 제한 */
|
||||
text-align: center; /* 내부 이미지 정렬 */
|
||||
}
|
||||
|
||||
.info-page-image {
|
||||
max-width: 100%; /* 부모 요소의 너비를 넘지 않도록 */
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* 본문 스타일 */
|
||||
.prose {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3; /* 테마 메인 컬러 */
|
||||
margin-top: 30px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #0056b3;
|
||||
}
|
||||
|
||||
/* 구분선 */
|
||||
.info-page-divider {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-color: #e9e9e9;
|
||||
margin: 50px 0;
|
||||
}
|
||||
|
||||
/* 반응형 스타일 */
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
.info-page-title {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
.info-page-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 1024px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 478 KiB |
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'lasertech';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '미래를 조각하는 정밀한 빛',
|
||||
'subtitle' => '월간 레이저기술 | 국내 유일의 레이저산업 전문 종합 기술 플랫폼',
|
||||
'content' => '
|
||||
<h3><i class="fas fa-history"></i> 우리의 역사: 30년 혁신의 기록</h3>
|
||||
<p>
|
||||
1993년 9월 15일 창간 이래, <strong>월간 레이저기술</strong>은 30년 넘게 국내 유일의 레이저산업 전문지로서 대한민국 레이저 기술 발전의 역사를 함께 써왔습니다. 🚀 글로벌 트렌드부터 최신 기술, 혁신적인 제품, 그리고 연구 개발 성과까지 깊이 있게 다루며 미래 산업의 로드맵을 제시해왔습니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-bullseye"></i> 우리의 비전: 핵심 지식 허브</h3>
|
||||
<p>
|
||||
의료, 통신, 제조 등 다양한 분야에서 혁신을 이끄는 레이저 기술! 💡 특히 가공, 절단, 마킹, 용접 등 현장의 실용 기술 정보에 대한 갈증을 해소하기 위해, 월간 레이저기술은 <strong>정교한 정보와 심층 분석</strong>을 제공하여 국내 레이저 기술 생태계의 건강한 성장을 돕는 것을 목표로 합니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-hands-helping"></i> 우리의 약속: 신뢰할 수 있는 길잡이</h3>
|
||||
<p>
|
||||
변화하는 기술 패러다임을 누구보다 빠르게 읽고, 레이저 기술이 열어갈 새로운 가능성을 가장 먼저 독자 여러분께 전달하겠습니다. 저희의 정보가 여러분의 현장 고민을 해결하고, 미래 전략을 세우는 데 든든한 길잡이가 되기를 바랍니다. 여러분의 관심과 의견은 저희가 발전하는 가장 큰 원동력입니다. 🌟
|
||||
</p>
|
||||
|
||||
<hr class="info-page-divider">
|
||||
|
||||
<h3><i class="fas fa-globe-americas"></i> Monthly Laser Technology: Our Story</h3>
|
||||
<p>
|
||||
Since our first issue on September 15, 1993, <strong>Monthly Laser Technology Magazine</strong> has been Korea\'s one-and-only specialized laser publication for over 30 years. We\'ve documented the nation\'s laser technology evolution, from global trends to R&D breakthroughs, serving as a <strong>key knowledge hub</strong> that maps out the future of the industry. 🚀
|
||||
</p>
|
||||
<p>
|
||||
Laser tech is sparking innovation in medicine, telecom, and manufacturing. 💡 We know there\'s a huge thirst for practical, hands-on information. That\'s why we deliver the <strong>precise insights and in-depth analysis</strong> needed to help our domestic laser ecosystem thrive.
|
||||
</p>
|
||||
<p>
|
||||
We\'re always the first to spot changing tech paradigms and share exciting new possibilities. We hope our insights become your trusted guide for solving real-world challenges and building future strategies. Your interest and feedback are what drive us forward. Let\'s illuminate the bright future of the laser industry, together!
|
||||
</p>',
|
||||
'image_url' => $page_skin_url . '/images/lasertech.jpg',
|
||||
'image_alt' => '레이저 가공 기술',
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div class="info-page-container">
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="info-page-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="info-page-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
$g5['title'] = '레이저기술';
|
||||
// lasertech_new 페이지 스킨 광고 영역 설정
|
||||
$lasertech_new_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,181 @@
|
||||
/*
|
||||
* greeting 정보형 페이지 전용 스타일
|
||||
*/
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 80px;
|
||||
background: #fff;
|
||||
min-height: 500px;
|
||||
}
|
||||
.container {
|
||||
/* max-width: 1200px; !important; */ /* 💡 [수정] 고정 너비 제거 */
|
||||
width: 90%; !important;/* 💡 [추가] 화면 너비의 90% 사용 (좌우 5% 여백) */
|
||||
max-width: 1600px; /* 💡 [추가] 너무 넓어지는 것 방지 (선택 사항) */
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing-md);
|
||||
}
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
이미지 | (한글 위 / 영어 아래) 2컬럼 구성
|
||||
기존 flex → grid 로 변경
|
||||
===================================================== */
|
||||
.greeting-content-wrapper {
|
||||
display: grid; /* [변경] */
|
||||
grid-template-columns: 250px 1fr; /* 이미지 | 텍스트 */
|
||||
column-gap: 40px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
.greeting-figure {
|
||||
flex: 0 0 250px; /* [유지] */
|
||||
margin: 0;
|
||||
grid-row: 1 / 3; /* 🔥 한글+영문 전체 높이 차지 */
|
||||
}
|
||||
|
||||
.greeting-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
오른쪽 컬럼 내부 정렬
|
||||
===================================================== */
|
||||
.prose {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 한글 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:first-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
/* 영문 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:last-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
/* 제목 스타일 */
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.prose h3:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
📱 모바일 대응 (기존 유지 + grid 대응 추가)
|
||||
===================================================== */
|
||||
@media (max-width: 768px) {
|
||||
.greeting-content-wrapper {
|
||||
grid-template-columns: 1fr; /* 세로 스택 */
|
||||
}
|
||||
|
||||
.greeting-figure {
|
||||
grid-row: auto;
|
||||
max-width: 300px;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 6.8 MiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 543 KiB |
@@ -0,0 +1,154 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'lasertech_new';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '미래를 조각하는 정밀한 빛',
|
||||
'subtitle' => '월간 레이저기술 | 국내 유일의 레이저산업 전문 종합 기술 플랫폼',
|
||||
'content' => '
|
||||
<h3><i class="fas fa-history"></i> 우리의 역사: 30년 혁신의 기록</h3>
|
||||
<p>
|
||||
1993년 9월 15일 창간 이래, <strong>월간 레이저기술</strong>은 30년 넘게 국내 유일의 레이저산업 전문지로서 대한민국 레이저 기술 발전의 역사를 함께 써왔습니다. <br> 글로벌 트렌드부터 최신 기술, 혁신적인 제품, 그리고 연구 개발 성과까지 깊이 있게 다루며 미래 산업의 로드맵을 제시해왔습니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-bullseye"></i> 우리의 비전: 핵심 지식 허브</h3>
|
||||
<p>
|
||||
의료, 통신, 제조 등 다양한 분야에서 혁신을 이끄는 레이저 기술! <br> 특히 가공, 절단, 마킹, 용접 등 현장의 실용 기술 정보에 대한 갈증을 해소하기 위해, 월간 레이저기술은 <strong>정교한 정보와 심층 분석</strong>을 제공하여 국내 레이저 기술 생태계의 건강한 성장을 돕는 것을 목표로 합니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-hands-helping"></i> 우리의 약속: 신뢰할 수 있는 길잡이</h3>
|
||||
<p>
|
||||
변화하는 기술 패러다임을 누구보다 빠르게 읽고, 레이저 기술이 열어갈 새로운 가능성을 가장 먼저 독자 여러분께 전달하겠습니다.<br> 저희의 정보가 여러분의 현장 고민을 해결하고, 미래 전략을 세우는 데 든든한 길잡이가 되기를 바랍니다. 여러분의 관심과 의견은 저희가 발전하는 가장 큰 원동력입니다.
|
||||
</p>
|
||||
|
||||
<hr class="info-page-divider">
|
||||
|
||||
<h3><i class="fas fa-globe-americas"></i> Monthly Laser Technology: Our Story</h3>
|
||||
<p>
|
||||
Since our first issue on September 15, 1993, <strong>Monthly Laser Technology Magazine</strong> has been Korea\'s one-and-only specialized laser publication for over 30 years. We\'ve documented the nation\'s laser technology evolution, from global trends to R&D breakthroughs, serving as a <strong>key knowledge hub</strong> that maps out the future of the industry.
|
||||
</p>
|
||||
<p>
|
||||
Laser tech is sparking innovation in medicine, telecom, and manufacturing. We know there\'s a huge thirst for practical, hands-on information. That\'s why we deliver the <strong>precise insights and in-depth analysis</strong> needed to help our domestic laser ecosystem thrive.
|
||||
</p>
|
||||
<p>
|
||||
We\'re always the first to spot changing tech paradigms and share exciting new possibilities. We hope our insights become your trusted guide for solving real-world challenges and building future strategies. Your interest and feedback are what drive us forward. Let\'s illuminate the bright future of the laser industry, together!
|
||||
</p>',
|
||||
'image_url' => $page_skin_url . '/images/img.png',
|
||||
'image_alt' => '레이저기술',
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<div class="info-page-container">
|
||||
|
||||
<!-- 페이지 헤더 -->
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<!-- 본문 콘텐츠 -->
|
||||
<div class="greeting-content-wrapper">
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="greeting-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="greeting-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '금형저널';
|
||||
|
||||
// moldjournal 페이지 스킨 광고 영역 설정
|
||||
$moldjournal_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
* lasertech 정보형 페이지 전용 스타일
|
||||
*/
|
||||
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.8rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
|
||||
/* 💡 [최종 수정] 이미지 컨테이너의 크기를 절반으로 줄이고 중앙 정렬 */
|
||||
.info-page-figure {
|
||||
margin: 0 auto 40px auto; /* 상하 마진 유지, 좌우는 auto로 중앙 정렬 */
|
||||
max-width: 25%; /* 최대 너비를 25%로 제한 */
|
||||
text-align: center; /* 내부 이미지 정렬 */
|
||||
}
|
||||
|
||||
.info-page-image {
|
||||
max-width: 100%; /* 부모 요소의 너비를 넘지 않도록 */
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
|
||||
}
|
||||
|
||||
/* 본문 스타일 */
|
||||
.prose {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3; /* 테마 메인 컬러 */
|
||||
margin-top: 30px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #0056b3;
|
||||
}
|
||||
|
||||
/* 구분선 */
|
||||
.info-page-divider {
|
||||
border: 0;
|
||||
height: 1px;
|
||||
background-color: #e9e9e9;
|
||||
margin: 50px 0;
|
||||
}
|
||||
|
||||
/* 반응형 스타일 */
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
.info-page-title {
|
||||
font-size: 2.2rem;
|
||||
}
|
||||
.info-page-subtitle {
|
||||
font-size: 1.1rem;
|
||||
}
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 1024px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 349 KiB |
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'moldjournal';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '月刊 금형공구',
|
||||
'subtitle' => '금형 정보 활성화를 위한 국내 대표 금형 전문지',
|
||||
'content' => '
|
||||
<h3><i class="fas fa-history"></i> 한국 금형산업 발전의 역사</h3>
|
||||
<p>
|
||||
1984년 창간한 <strong>월간 금형공구</strong>는 금형·공구 산업의 국내외 동향, 신기술, 신제품, 기술개발 정보를 체계적으로 전하며 한국 금형산업 발전을 이끌어 온 전문지입니다. 산업 변화와 기술 패러다임 전환을 가장 가까운 자리에서 기록하며 주요 이슈를 신뢰도 높은 분석과 함께 소개해 왔습니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-industry"></i> 제조업의 기반, 핵심 산업</h3>
|
||||
<p>
|
||||
금형산업은 완구에서 우주항공까지 전 제조업의 기반을 이루는 기술집약적 핵심 산업으로, 제품 품질 향상과 공정 고도화를 좌우하는 국가 전략 분야입니다. 이에 따라 정교한 기술 정보와 최신 산업 동향 파악이 무엇보다 중요합니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-hands-helping"></i> 신뢰의 약속</h3>
|
||||
<p>
|
||||
(주)한국산업정보센터는 한국금형공업협동조합 설립 이후 조합원에게 전문 정보를 제공하고자 창간된 월간 금형·공구의 이념을 이어 발전시켜 왔습니다. 오늘날 월간 금형공구는 국내 금형 분야에서 가장 오랜 전통과 권위를 보유한 매체로 자리매김하고 있습니다. 앞으로도 산업 현장의 목소리를 담아 유용한 기술 정보와 통찰을 제공하며 금형산업의 미래를 함께 열어가겠습니다.
|
||||
</p>
|
||||
|
||||
<hr class="info-page-divider">
|
||||
|
||||
<h3><i class="fas fa-globe-americas"></i> Monthly Mold & Tooling: Our Story</h3>
|
||||
<p>
|
||||
First published in 1984, <strong>Monthly Mold & Tooling</strong> has delivered structured and reliable coverage of domestic and global trends, new technologies, product developments, and technical advancements within the mold and tooling industry.
|
||||
</p>
|
||||
<p>
|
||||
The mold industry is a technology-intensive foundation for nearly all manufacturing—from toys to aerospace—and a strategic national field that drives product quality and advanced production processes. Accurate and up-to-date technical information is therefore essential.
|
||||
</p>
|
||||
<p>
|
||||
Today, it stands as Korea’s oldest and most authoritative magazine in the mold sector. Moving forward, Monthly Mold & Tooling will continue delivering practical insights and industry-focused knowledge, serving as a reliable partner for the future of mold technology.
|
||||
</p>',
|
||||
'image_url' => $page_skin_url . '/images/' . rawurlencode('금형표지.jpg'),
|
||||
'image_alt' => '월간 금형공구 표지',
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div class="info-page-container">
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="info-page-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="info-page-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,11 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '금형저널';
|
||||
|
||||
// moldjournal_new 페이지 스킨 광고 영역 설정
|
||||
$moldjournal_new_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* greeting 정보형 페이지 전용 스타일
|
||||
*/
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 80px;
|
||||
background: #fff;
|
||||
min-height: 500px;
|
||||
}
|
||||
.container {
|
||||
/* max-width: 1200px; !important; */ /* 💡 [수정] 고정 너비 제거 */
|
||||
width: 90%; !important; /* 💡 [추가] 화면 너비의 90% 사용 (좌우 5% 여백) */
|
||||
max-width: 1600px; /* 💡 [추가] 너무 넓어지는 것 방지 (선택 사항) */
|
||||
margin: 0 auto;
|
||||
padding: 0 var(--spacing-md);
|
||||
}
|
||||
.info-page-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.05);
|
||||
}
|
||||
|
||||
/* 페이지 헤더 */
|
||||
.info-page-header {
|
||||
text-align: center;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 900;
|
||||
color: #222;
|
||||
line-height: 1.3;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.info-page-subtitle {
|
||||
font-size: 1.3rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
이미지 | (한글 위 / 영어 아래) 2컬럼 구성
|
||||
기존 flex → grid 로 변경
|
||||
===================================================== */
|
||||
.greeting-content-wrapper {
|
||||
display: grid; /* [변경] */
|
||||
grid-template-columns: 250px 1fr; /* 이미지 | 텍스트 */
|
||||
column-gap: 40px;
|
||||
align-items: start;
|
||||
}
|
||||
|
||||
/* 대표 이미지 */
|
||||
.greeting-figure {
|
||||
flex: 0 0 250px; /* [유지] */
|
||||
margin: 0;
|
||||
grid-row: 1 / 3; /* 🔥 한글+영문 전체 높이 차지 */
|
||||
}
|
||||
|
||||
.greeting-image {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
object-fit: cover;
|
||||
box-shadow: 0 5px 15px rgba(0,0,0,0.1);
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
🔥 [수정 핵심]
|
||||
오른쪽 컬럼 내부 정렬
|
||||
===================================================== */
|
||||
.prose {
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 한글 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:first-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 1;
|
||||
}
|
||||
|
||||
/* 영문 콘텐츠 */
|
||||
.greeting-content-wrapper .prose:last-of-type {
|
||||
grid-column: 2;
|
||||
grid-row: 2;
|
||||
}
|
||||
|
||||
/* 제목 스타일 */
|
||||
.prose h3 {
|
||||
font-size: 1.6rem;
|
||||
font-weight: 700;
|
||||
color: #0056b3;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 15px;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 2px solid #f0f0f0;
|
||||
}
|
||||
|
||||
.prose h3:first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
.prose h3 .fas {
|
||||
margin-right: 10px;
|
||||
font-size: 1.4rem;
|
||||
}
|
||||
|
||||
.prose p {
|
||||
margin-bottom: 1.5em;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
.prose strong {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
/* =====================================================
|
||||
📱 모바일 대응 (기존 유지 + grid 대응 추가)
|
||||
===================================================== */
|
||||
@media (max-width: 768px) {
|
||||
.greeting-content-wrapper {
|
||||
grid-template-columns: 1fr; /* 세로 스택 */
|
||||
}
|
||||
|
||||
.greeting-figure {
|
||||
grid-row: auto;
|
||||
max-width: 300px;
|
||||
margin: 0 auto 30px;
|
||||
}
|
||||
|
||||
.prose {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.info-page-container {
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.info-page-title {
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 3단 레이아웃 스타일 (기존 코드 유지)
|
||||
*/
|
||||
.three-column-layout {
|
||||
display: flex;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
.layout-sidebar-left {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
.layout-main-content {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.layout-sidebar-right {
|
||||
flex: 0 0 240px;
|
||||
}
|
||||
|
||||
@media all and (max-width: 768px) {
|
||||
.three-column-layout {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.layout-sidebar-left,
|
||||
.layout-main-content,
|
||||
.layout-sidebar-right {
|
||||
flex-basis: 100%;
|
||||
}
|
||||
}
|
||||
|
After Width: | Height: | Size: 349 KiB |
|
After Width: | Height: | Size: 216 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 84 KiB |
@@ -0,0 +1,167 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'moldjournal_new';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '금형저널의 창간 이념을 잇는 전문지',
|
||||
'subtitle' => '금형 정보 활성화를 위한 국내 대표 금형 전문지',
|
||||
'content' => '
|
||||
<h3><i class="fas fa-history"></i> 한국 금형산업 발전의 역사</h3>
|
||||
<p>
|
||||
1984년 창간한 <strong>월간 금형공구</strong>는 금형·공구 산업의 국내외 동향, 신기술, 신제품, 기술개발 정보를 체계적으로 전하며 한국 금형산업 발전을 이끌어 온 전문지입니다.<br>산업 변화와 기술 패러다임 전환을 가장 가까운 자리에서 기록하며 주요 이슈를 신뢰도 높은 분석과 함께 소개해 왔습니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-industry"></i> 제조업의 기반, 핵심 산업</h3>
|
||||
<p>
|
||||
금형산업은 완구에서 우주항공까지 전 제조업의 기반을 이루는 기술집약적 핵심 산업으로, 제품 품질 향상과 공정 고도화를 좌우하는 국가 전략 분야입니다.<br> 이에 따라 정교한 기술 정보와 최신 산업 동향 파악이 무엇보다 중요합니다.
|
||||
</p>
|
||||
|
||||
<h3><i class="fas fa-hands-helping"></i> 신뢰의 약속</h3>
|
||||
<p>
|
||||
(주)한국산업정보센터는 한국금형공업협동조합 설립 이후 조합원에게 전문 정보를 제공하고자 창간된 월간 금형·공구의 이념을 이어 발전시켜 왔습니다.<br>오늘날 월간 금형공구는 국내 금형 분야에서 가장 오랜 전통과 권위를 보유한 매체로 자리매김하고 있습니다.<br>앞으로도 산업 현장의 목소리를 담아 유용한 기술 정보와 통찰을 제공하며 금형산업의 미래를 함께 열어가겠습니다.
|
||||
</p>
|
||||
|
||||
<hr class="info-page-divider">
|
||||
|
||||
<h3><i class="fas fa-globe-americas"></i> Monthly Mold & Tooling: Our Story</h3>
|
||||
<p>
|
||||
First published in 1984, <strong>Monthly Mold & Tooling</strong> has delivered structured and reliable coverage of domestic and global trends, new technologies, product developments, and technical advancements within the mold and tooling industry.
|
||||
</p>
|
||||
<p>
|
||||
The mold industry is a technology-intensive foundation for nearly all manufacturing—from toys to aerospace—and a strategic national field that drives product quality and advanced production processes. Accurate and up-to-date technical information is therefore essential.
|
||||
</p>
|
||||
<p>
|
||||
Today, it stands as Korea’s oldest and most authoritative magazine in the mold sector. Moving forward, Monthly Mold & Tooling will continue delivering practical insights and industry-focused knowledge, serving as a reliable partner for the future of mold technology.
|
||||
</p>',
|
||||
'images' => array( // 💡 [수정] 이미지 배열로 변경
|
||||
array('url' => $page_skin_url . '/images/img.png', 'alt' => '저금형기술'),
|
||||
array('url' => $page_skin_url . '/images/img1.jpg', 'alt' => '금형저널')
|
||||
),
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
$page_data['images'] = array(); // 이미지 배열 초기화
|
||||
|
||||
// 💡 [수정] 모든 첨부파일을 이미지 배열에 추가
|
||||
$sql_files = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no ";
|
||||
$result_files = sql_query($sql_files);
|
||||
while($row_file = sql_fetch_array($result_files)) {
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['images'][] = array(
|
||||
'url' => G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'],
|
||||
'alt' => $row_file['bf_source']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// 첨부파일이 없을 경우 본문에서 이미지 추출
|
||||
if (empty($page_data['images'])) {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
foreach($matches[1] as $img_src) {
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$img_url = G5_URL . $img_src;
|
||||
} else {
|
||||
$img_url = $img_src;
|
||||
}
|
||||
$page_data['images'][] = array(
|
||||
'url' => $img_url,
|
||||
'alt' => $view['wr_subject']
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content1">
|
||||
<div class="info-page-container">
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<div class="greeting-content-wrapper">
|
||||
<!-- 💡 [수정] 여러 이미지 출력 -->
|
||||
<?php if(!empty($page_data['images'])): ?>
|
||||
<figure class="greeting-figure">
|
||||
<?php foreach($page_data['images'] as $image): ?>
|
||||
<img src="<?php echo $image['url']; ?>" alt="<?php echo $image['alt']; ?>" class="greeting-image">
|
||||
<?php endforeach; ?>
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,12 @@
|
||||
// 이 페이지 전용 커스텀 자바스크립트
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
// 예: 특정 요소에 애니메이션 추가 등
|
||||
// const title = document.querySelector('.section-title');
|
||||
// if(title) {
|
||||
// title.style.opacity = 0;
|
||||
// setTimeout(() => {
|
||||
// title.style.transition = 'opacity 0.5s';
|
||||
// title.style.opacity = 1;
|
||||
// }, 100);
|
||||
// }
|
||||
});
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
$g5['title'] = '제품메인';
|
||||
$greeting_new_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
]
|
||||
?>
|
||||
@@ -0,0 +1,129 @@
|
||||
@import url('https://cdn.jsdelivr.net/gh/orioncactus/pretendard/dist/web/static/pretendard.css');
|
||||
|
||||
body { background-color: #0b0f1a; font-family: 'Pretendard', sans-serif; margin: 0; padding: 0; }
|
||||
|
||||
/*.map-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
border-radius: 24px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 40px 80px -20px rgba(0, 0, 0, 0.8);
|
||||
border: 1px solid rgba(255,255,255,0.1);
|
||||
background: #161b26;
|
||||
}
|
||||
|
||||
.map-container {
|
||||
position: relative;
|
||||
width: 1600px;
|
||||
height: 980px;
|
||||
background-size: 100% 100%;
|
||||
cursor: crosshair;
|
||||
}
|
||||
|
||||
.hotspot {
|
||||
position: absolute;
|
||||
background: rgba(255, 200, 150, 0.02);
|
||||
border: 1px dashed rgba(255, 200, 150, 0.1);
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
border-radius: 4px;
|
||||
}*/
|
||||
/* 1. 맵 컨테이너 크기를 rb.layout과 동일하게 1600x980으로 고정 */
|
||||
.map-container {
|
||||
position: relative;
|
||||
width: 1600px !important;
|
||||
height: 980px !important;
|
||||
background-size: 100% 100% !important; /* 이미지 늘림 방식을 동일하게 설정 */
|
||||
cursor: crosshair;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* 2. 핫스팟의 중심점을 좌표 정중앙으로 보정 */
|
||||
.hotspot {
|
||||
position: absolute;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
/* ... 기존 색상/애니메이션 스타일 유지 ... */
|
||||
|
||||
/* 💡 이 부분이 rb.layout의 계산 방식과 일치해야 좌표가 안 어긋납니다 */
|
||||
transform: translate(-50%, -50%) !important;
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
/* 3. 부모 wrapper 설정 (스크롤 방지 및 정렬) */
|
||||
.map-wrapper {
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
width: 1600px;
|
||||
border-radius: 24px;
|
||||
overflow: hidden;
|
||||
background: #161b26;
|
||||
}
|
||||
.hotspot:hover {
|
||||
background: rgba(59, 130, 246, 0.15);
|
||||
border: 1.5px solid rgba(59, 130, 246, 0.6);
|
||||
box-shadow: 0 0 25px rgba(59, 130, 246, 0.3);
|
||||
transform: translate(-50%, -50%) scale(1.1);
|
||||
}
|
||||
|
||||
#hover-preview {
|
||||
position: fixed;
|
||||
pointer-events: none;
|
||||
z-index: 1000;
|
||||
display: none;
|
||||
background: rgba(15, 23, 42, 0.96);
|
||||
backdrop-filter: blur(20px);
|
||||
border: 1px solid rgba(255, 255, 255, 0.1);
|
||||
border-radius: 20px;
|
||||
padding: 24px;
|
||||
width: 540px;
|
||||
box-shadow: 0 30px 60px -12px rgba(0, 0, 0, 0.9);
|
||||
}
|
||||
|
||||
.products-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(2, 1fr);
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.product-item {
|
||||
background: rgba(255, 255, 255, 0.02);
|
||||
border: 1px solid rgba(255, 255, 255, 0.05);
|
||||
border-radius: 16px;
|
||||
padding: 14px;
|
||||
}
|
||||
|
||||
.product-img-box {
|
||||
width: 100%;
|
||||
height: 130px;
|
||||
background: #000;
|
||||
border-radius: 12px;
|
||||
margin-bottom: 12px;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.product-img-box img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
}
|
||||
|
||||
.coord-guide {
|
||||
position: absolute;
|
||||
bottom: 15px;
|
||||
right: 15px;
|
||||
background: rgba(0,0,0,0.6);
|
||||
color: #10b981;
|
||||
padding: 6px 14px;
|
||||
border-radius: 8px;
|
||||
font-family: monospace;
|
||||
font-size: 11px;
|
||||
border: 1px solid rgba(16, 185, 129, 0.3);
|
||||
}
|
||||
|
After Width: | Height: | Size: 28 MiB |
|
After Width: | Height: | Size: 15 MiB |
|
After Width: | Height: | Size: 12 MiB |
|
After Width: | Height: | Size: 16 MiB |
|
After Width: | Height: | Size: 8.9 MiB |
|
After Width: | Height: | Size: 11 MiB |
|
After Width: | Height: | Size: 15 MiB |
|
After Width: | Height: | Size: 11 MiB |
|
After Width: | Height: | Size: 25 MiB |
|
After Width: | Height: | Size: 14 MiB |
|
After Width: | Height: | Size: 4.1 MiB |
@@ -0,0 +1,101 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 현재 스킨 폴더의 URL 경로 계산
|
||||
$skin_url = G5_THEME_URL . '/skin/page/products_main';
|
||||
|
||||
$today = G5_TIME_YMD;
|
||||
|
||||
// 1. 게시판 데이터 로드 시도
|
||||
$bo_table = 'bconstruction'; // 게시판 ID
|
||||
$sql = " select * from {$g5['write_prefix']}$bo_table
|
||||
WHERE wr_is_comment = 0 AND wr_10 = '0' AND (wr_9 = 'IMMEDIATE' OR (wr_9 = 'RESERVED' AND '{$today}' BETWEEN wr_2 AND wr_3))
|
||||
ORDER BY CASE wr_1 WHEN 'IMMEDIATE' THEN 1 ELSE 2 END, wr_num, wr_reply LIMIT 1 ";
|
||||
//where wr_is_comment = 0 order by wr_id asc ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
$db_products = array();
|
||||
while($row = sql_fetch_array($result)) {
|
||||
// 💡 [수정] 게시판의 첫 번째 첨부파일(bf_no = 0)을 가져옵니다.
|
||||
$sql_file = " select bf_file from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$row['wr_id']}' and bf_no = 0 ";
|
||||
$file = sql_fetch($sql_file);
|
||||
|
||||
if (isset($file['bf_file']) && $file['bf_file']) {
|
||||
// 실제 업로드된 파일 경로
|
||||
$img_url = G5_DATA_URL . '/file/' . $bo_table . '/' . $file['bf_file'];
|
||||
} else {
|
||||
// 파일이 없을 경우 기본 이미지 또는 기존 방식 사용 (fallback)
|
||||
$encoded_filename = rawurlencode($row['wr_subject']);
|
||||
$img_url = $skin_url . '/images/' . $encoded_filename . '.png';
|
||||
}
|
||||
|
||||
$db_products[] = array(
|
||||
"title" => $row['wr_subject'],
|
||||
"page" => $row['wr_4'],
|
||||
"desc" => strip_tags($row['wr_content']),
|
||||
"xPct" => (float)$row['wr_5'],
|
||||
"yPct" => (float)$row['wr_6'],
|
||||
"img_url" => $img_url
|
||||
);
|
||||
}
|
||||
if (empty($db_products)) {
|
||||
$db_products = [
|
||||
["title" => "입면분할창", "page" => "20p", "desc" => "조망권과 환기를 극대화한 시스템", "img_url" => $skin_url . '/images/1.jpg', 'xPct'=> 63.0, 'yPct'=> 24.0],
|
||||
|
||||
["title" => "프로젝트창", "page" => "48p", "desc" => "기밀성이 우수한 상부 개폐식 창호", "img_url" => $skin_url . '/images/2' . '.jpg', "xPct" => 71.0, "yPct" => 30.3],
|
||||
|
||||
["title" => "소형단창,이중창", "page" => "36p", "desc" => "침실 소형 전용 슬라이딩 창호", "img_url" => $skin_url . '/images/3' . '.jpg', "xPct" => 78.9, "yPct" => 41.0],
|
||||
["title" => "학교창", "page" => "40p", "desc" => "안전 기능이 강화된 환기창", "img_url" => $skin_url . '/images/5' . '.jpg', "xPct" => 78.9, "yPct" => 41.0],
|
||||
|
||||
["title" => "대형이중창", "page" => "28p", "desc" => "방음 및 풍압 견딤력이 우수한 이중창", "img_url" => $skin_url . '/images/7' . '.jpg', "xPct" => 36.0, "yPct" => 27.3],
|
||||
|
||||
["title" => "대형단창", "page" => "32p", "desc" => "발코니 전용 단열 슬라이딩 단창", "img_url" => $skin_url . '/images/6' . '.jpg', "xPct" => 25.1, "yPct" => 35.1],
|
||||
["title" => "스마트 발코니 전용창", "page" => "12p", "desc" => "외창 전용 고기밀 샷시", "img_url" => $skin_url . '/images/8' . '.jpg', "xPct" => 25.1, "yPct" => 35.1],
|
||||
|
||||
["title" => "스마트 이중창", "page" => "24p", "desc" => "보안이 강화된 자동잠금 이중창", "img_url" => $skin_url . '/images/9' . '.jpg', "xPct" => 48.3, "yPct" => 18.3],
|
||||
["title" => "발코니 확장 이중창", "page" => "16p", "desc" => "거실 확장용 고단열 이중창", "img_url" => $skin_url . '/images/10' . '.jpg', "xPct" => 48.3, "yPct" => 18.3],
|
||||
|
||||
// ["title" => "판넬창", "page" => "44p", "desc" => "벽체 마감용 내구성 우수 창호", "img_url" => $skin_url . '/images/판넬창' . '.jpg', "xPct" => 5.7, "yPct" => 91.4],
|
||||
];
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>WINDOW INDEX MASTER MAP</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="<?php echo $skin_url; ?>/css/products.css">
|
||||
</head>
|
||||
<body class="bg-[#0b0f1a]">
|
||||
|
||||
<div class="products-main-page">
|
||||
<div class="mb-10 text-center">
|
||||
<h1 class="text-white text-3xl font-black mb-2 tracking-tight">E-CLEAN <span class="text-blue-500">MASTER MAP</span></h1>
|
||||
<p class="text-slate-400 text-sm">그누보드 DB 연동 스마트 제품 인덱스 맵</p>
|
||||
</div>
|
||||
|
||||
<div class="map-wrapper">
|
||||
<div class="map-container" id="main-map" style="background-image: url('<?php echo $skin_url; ?>/images/main.png');">
|
||||
<div id="hotspot-layer"></div>
|
||||
</div>
|
||||
<div id="coord-display" class="coord-guide">X: 0.0%, Y: 0.0%</div>
|
||||
</div>
|
||||
|
||||
<div id="hover-preview">
|
||||
<div class="flex items-center gap-3 mb-5 border-b border-white/10 pb-4">
|
||||
<i class="fa-solid fa-box-open text-blue-500"></i>
|
||||
<h2 class="text-white font-bold text-lg">제품 정보 상세</h2>
|
||||
</div>
|
||||
<div class="products-grid" id="preview-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="<?php echo $skin_url; ?>/js/products.js"></script>
|
||||
<script>
|
||||
initProducts(<?php echo json_encode($db_products); ?>);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,67 @@
|
||||
function initProducts(productsData) {
|
||||
const map = document.getElementById('main-map');
|
||||
const hotspotLayer = document.getElementById('hotspot-layer');
|
||||
const preview = document.getElementById('hover-preview');
|
||||
const previewGrid = document.getElementById('preview-grid');
|
||||
const coordDisplay = document.getElementById('coord-display');
|
||||
|
||||
// 그룹화 로직
|
||||
const groups = {};
|
||||
productsData.forEach(p => {
|
||||
const key = `${parseFloat(p.xPct).toFixed(1)}_${parseFloat(p.yPct).toFixed(1)}`;
|
||||
if (!groups[key]) groups[key] = [];
|
||||
groups[key].push(p);
|
||||
});
|
||||
|
||||
Object.keys(groups).forEach(key => {
|
||||
const group = groups[key];
|
||||
const hs = document.createElement('div');
|
||||
hs.className = 'hotspot';
|
||||
hs.style.left = group[0].xPct + '%';
|
||||
hs.style.top = group[0].yPct + '%';
|
||||
hs.style.transform = 'translate(-50%, -50%)';
|
||||
|
||||
hs.onmouseenter = () => {
|
||||
preview.style.display = 'block';
|
||||
previewGrid.innerHTML = group.map(p => `
|
||||
<div class="product-item">
|
||||
<div class="product-img-box"><img src="${p.img_url}" onerror="this.src='https://via.placeholder.com/200x120?text=No+Image'"></div>
|
||||
<div class="text-[10px] text-blue-400 font-bold mb-1">${p.page}</div>
|
||||
<h4 class="text-white text-[13px] font-bold truncate">${p.title}</h4>
|
||||
<p class="text-slate-500 text-[10px] line-clamp-2">${p.desc}</p>
|
||||
</div>
|
||||
`).join('');
|
||||
};
|
||||
hs.onmouseleave = () => preview.style.display = 'none';
|
||||
hs.onmousemove = (e) => {
|
||||
let x = e.clientX + 30;
|
||||
let y = e.clientY + 30;
|
||||
if (x + 540 > window.innerWidth) x = e.clientX - 560;
|
||||
if (y + preview.offsetHeight > window.innerHeight) y = window.innerHeight - preview.offsetHeight - 20;
|
||||
preview.style.left = x + 'px';
|
||||
preview.style.top = y + 'px';
|
||||
};
|
||||
hotspotLayer.appendChild(hs);
|
||||
});
|
||||
|
||||
// 좌표 도구
|
||||
map.onmousemove = (e) => {
|
||||
const r = map.getBoundingClientRect();
|
||||
// 💡 스크롤 높이(window.pageYOffset)를 고려하여 더 정확하게 계산
|
||||
const x = ((e.clientX - r.left) / r.width * 100).toFixed(1);
|
||||
const y = ((e.clientY - r.top) / r.height * 100).toFixed(1);
|
||||
|
||||
coordDisplay.textContent = `X: ${x}%, Y: ${y}%`;
|
||||
// coordDisplay.textContent = `X: ${((e.clientX-r.left)/r.width*100).toFixed(1)}%, Y: ${((e.clientY-r.top)/r.height*100).toFixed(1)}%`;
|
||||
};
|
||||
map.onclick = (e) => {
|
||||
const r = map.getBoundingClientRect();
|
||||
const x = ((e.clientX - r.left) / r.width * 100).toFixed(1);
|
||||
const y = ((e.clientY - r.top) / r.height * 100).toFixed(1);
|
||||
|
||||
// 💡 layout과 값을 맞추기 위해 팝업창에 뜨는 값을 복사해서 사용하세요
|
||||
prompt("정밀 좌표 (이 값을 사용하세요):", ` "xPct" => ${x}, "yPct" => ${y} `);
|
||||
// const r = map.getBoundingClientRect();
|
||||
// prompt("좌표:", `xPct: ${((e.clientX-r.left)/r.width*100).toFixed(1)}, yPct: ${((e.clientY-r.top)/r.height*100).toFixed(1)}`);
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 현재 스킨 폴더의 URL 경로 계산
|
||||
$skin_url = G5_THEME_URL . '/skin/page/products_main';
|
||||
|
||||
// 💡 [추가] 오늘 날짜 정의
|
||||
$today = G5_TIME_YMD;
|
||||
|
||||
$bo_table = 'bconstruction'; // 게시판 ID
|
||||
$sql = " select * from {$g5['write_prefix']}$bo_table where wr_is_comment = 0 order by wr_id asc ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
$db_products = array();
|
||||
while($row = sql_fetch_array($result)) {
|
||||
// 💡 [수정] 게시판의 첫 번째 첨부파일(bf_no = 0)을 가져옵니다.
|
||||
$sql_file = " select bf_file from {$g5['board_file_table']} where bo_table = '{$bo_table}' and wr_id = '{$row['wr_id']}' and bf_no = 0 ";
|
||||
$file = sql_fetch($sql_file);
|
||||
|
||||
if (isset($file['bf_file']) && $file['bf_file']) {
|
||||
// 실제 업로드된 파일 경로
|
||||
$img_url = G5_DATA_URL . '/file/' . $bo_table . '/' . $file['bf_file'];
|
||||
} else {
|
||||
// 파일이 없을 경우 기본 이미지 또는 기존 방식 사용 (fallback)
|
||||
$encoded_filename = rawurlencode($row['wr_subject']);
|
||||
$img_url = $skin_url . '/images/' . $encoded_filename . '.png';
|
||||
}
|
||||
|
||||
$db_products[] = array(
|
||||
"title" => $row['wr_subject'],
|
||||
"page" => $row['wr_4'],
|
||||
"desc" => strip_tags($row['wr_content']),
|
||||
"xPct" => (float)$row['wr_5'],
|
||||
"yPct" => (float)$row['wr_6'],
|
||||
"img_url" => $img_url
|
||||
);
|
||||
}
|
||||
|
||||
?>
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>WINDOW INDEX MASTER MAP</title>
|
||||
<script src="https://cdn.tailwindcss.com"></script>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="<?php echo $skin_url; ?>/css/products.css">
|
||||
</head>
|
||||
<body class="bg-[#0b0f1a]">
|
||||
|
||||
<div class="products-main-page">
|
||||
<div class="mb-10 text-center">
|
||||
<h1 class="text-white text-3xl font-black mb-2 tracking-tight">E-CLEAN <span class="text-blue-500">MASTER MAP</span></h1>
|
||||
<p class="text-slate-400 text-sm">그누보드 DB 연동 스마트 제품 인덱스 맵</p>
|
||||
</div>
|
||||
|
||||
<div class="map-wrapper">
|
||||
<div class="map-container" id="main-map" style="background-image: url('<?php echo $skin_url; ?>/images/메인.png');">
|
||||
<div id="hotspot-layer"></div>
|
||||
</div>
|
||||
<div id="coord-display" class="coord-guide">X: 0.0%, Y: 0.0%</div>
|
||||
</div>
|
||||
|
||||
<div id="hover-preview">
|
||||
<div class="flex items-center gap-3 mb-5 border-b border-white/10 pb-4">
|
||||
<i class="fa-solid fa-box-open text-blue-500"></i>
|
||||
<h2 class="text-white font-bold text-lg">제품 정보 상세</h2>
|
||||
</div>
|
||||
<div class="products-grid" id="preview-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="<?php echo $skin_url; ?>/js/products.js"></script>
|
||||
<script>
|
||||
initProducts(<?php echo json_encode($db_products); ?>);
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// team 페이지 스킨 광고 영역 설정
|
||||
$team_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 1. 현재 스킨 폴더명 정의 (config.php 로드 전에 설정)
|
||||
|
||||
|
||||
// 2. 통합 설정 파일 로드
|
||||
$config_path = G5_THEME_PATH . '/skin/page/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
} else {
|
||||
$page_skin_config = array('left_ad' => false, 'right_ad' => false);
|
||||
}
|
||||
$current_page_skin = 'team';
|
||||
// 3. 스킨 경로 정의
|
||||
$page_skin_url = G5_THEME_URL . '/skin/page/' . $current_page_skin;
|
||||
$page_skin_path = G5_THEME_PATH . '/skin/page/' . $current_page_skin;
|
||||
|
||||
// 4. CSS/JS 로드
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $page_skin_url . '/css/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
add_javascript('<script src="' . $page_skin_url . '/js/script.js?ver=' . G5_SERVER_TIME . '"></script>', 0);
|
||||
|
||||
// 5. 기본 데이터 정의
|
||||
$page_data = array(
|
||||
'title' => '팀 소개',
|
||||
'subtitle' => '레이저월드를 만들어가는 사람들',
|
||||
'content' => '
|
||||
<p>레이저월드는 편집팀, 취재팀, 디자인팀, 마케팅팀 등으로 구성되어 전문 콘텐츠를 제작합니다.</p>
|
||||
<ul class="list-disc pl-5">
|
||||
<li><strong>대표</strong> 박준성</li>
|
||||
<li><strong>편집장</strong> 김편집</li>
|
||||
<li><strong>취재팀장</strong> 이취재</li>
|
||||
<li><strong>디자인팀장</strong> 장디자인</li>
|
||||
</ul>',
|
||||
'image_url' => '',
|
||||
'image_alt' => '',
|
||||
'sign_name' => '',
|
||||
'sign_company' => ''
|
||||
);
|
||||
|
||||
// 6. 모듈 설정 연동
|
||||
if (!isset($module_config) && isset($md_id) && $md_id) {
|
||||
$module_config = sql_fetch(" SELECT * FROM rb_module WHERE md_id = '{$md_id}' ");
|
||||
}
|
||||
|
||||
if (isset($module_config) && $module_config['md_type'] == 'page') {
|
||||
$target_bo_table = $module_config['md_bo_table_page'];
|
||||
$target_wr_id = $module_config['md_wr_id_page'];
|
||||
|
||||
if ($target_bo_table && $target_wr_id) {
|
||||
$write_table = $g5['write_prefix'] . $target_bo_table;
|
||||
$view = sql_fetch(" SELECT * FROM {$write_table} WHERE wr_id = '{$target_wr_id}' ");
|
||||
|
||||
if ($view) {
|
||||
$page_data['title'] = $view['wr_subject'];
|
||||
$page_data['subtitle'] = $view['wr_1'];
|
||||
$page_data['content'] = conv_content($view['wr_content'], 1);
|
||||
|
||||
$sql_file = " select bf_file, bf_source from {$g5['board_file_table']} where bo_table = '$target_bo_table' and wr_id = '$target_wr_id' order by bf_no limit 1 ";
|
||||
$row_file = sql_fetch($sql_file);
|
||||
if ($row_file['bf_file']) {
|
||||
$page_data['image_url'] = G5_DATA_URL.'/file/'.$target_bo_table.'/'.$row_file['bf_file'];
|
||||
$page_data['image_alt'] = $row_file['bf_source'];
|
||||
} else {
|
||||
$matches = get_editor_image($view['wr_content'], false);
|
||||
if($matches) {
|
||||
$img_src = $matches[1][0];
|
||||
if (!preg_match("/^(http|https):/i", $img_src)) {
|
||||
$page_data['image_url'] = G5_URL . $img_src;
|
||||
} else {
|
||||
$page_data['image_url'] = $img_src;
|
||||
}
|
||||
$page_data['image_alt'] = $view['wr_subject'];
|
||||
} else {
|
||||
$page_data['image_url'] = '';
|
||||
}
|
||||
}
|
||||
|
||||
$page_data['sign_name'] = $view['wr_2'];
|
||||
$page_data['sign_company'] = $view['wr_3'];
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($page_skin_config['left_ad']) && $page_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="<?php echo $current_page_skin; ?>-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div class="info-page-container">
|
||||
<header class="info-page-header">
|
||||
<h2 class="info-page-title"><?php echo $page_data['title']; ?></h2>
|
||||
<?php if($page_data['subtitle']): ?>
|
||||
<p class="info-page-subtitle"><?php echo $page_data['subtitle']; ?></p>
|
||||
<?php endif; ?>
|
||||
</header>
|
||||
<div class="greeting-content-wrapper">
|
||||
<?php if($page_data['image_url']): ?>
|
||||
<figure class="greeting-figure">
|
||||
<img src="<?php echo $page_data['image_url']; ?>" alt="<?php echo $page_data['image_alt']; ?>" class="greeting-image">
|
||||
</figure>
|
||||
<?php endif; ?>
|
||||
<article class="prose">
|
||||
<?php echo $page_data['content']; ?>
|
||||
<?php if($page_data['sign_name'] || $page_data['sign_company']): ?>
|
||||
<div class="signature">
|
||||
<?php if($page_data['sign_name']): ?><strong><?php echo $page_data['sign_name']; ?></strong><?php endif; ?>
|
||||
<?php if($page_data['sign_company']): ?><span><?php echo $page_data['sign_company']; ?></span><?php endif; ?>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<?php if (isset($page_skin_config['right_ad']) && $page_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="<?php echo $current_page_skin; ?>-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
@@ -0,0 +1,3 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
console.log('Team page loaded');
|
||||
});
|
||||