Files
dnssash/theme/rd.dnssash/skin/newwin/modal/newwin.skin.php
T
2026-06-11 18:47:38 +09:00

109 lines
4.8 KiB
PHP

<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
// 💡 [핵심 수정] 이 스킨 파일이 직접 팝업 데이터를 가져오도록 DB 조회 로직을 추가합니다.
// 이 로직은 head.php에서 이 파일을 include 하기 전에 $result 변수를 준비합니다.
if (!defined('_SHOP_')) {
$pop_division = 'comm';
} else {
$pop_division = 'shop';
}
$sql = " SELECT * FROM {$g5['new_win_table']}
WHERE '".G5_TIME_YMDHIS."' BETWEEN nw_begin_time AND nw_end_time
AND nw_device IN ( 'both', 'pc' )
AND nw_division IN ( 'both', '{$pop_division}' )
ORDER BY nw_id ASC ";
$result = sql_query($sql, false);
// 이 스킨의 CSS 파일을 불러옵니다.
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/skin/newwin/modal/style.css?ver='.G5_CSS_VER.'">', 0);
// 💡 [핵심] 표시할 팝업이 있는지 먼저 확인합니다.
$popups_to_show = [];
// 💡 [안정성] sql_query()가 실패할 경우를 대비하여 $result가 유효한지 확인합니다.
if ($result) {
while ($nw = sql_fetch_array($result)) {
// 쿠키가 설정된 팝업은 건너뜁니다.
if (isset($_COOKIE["rb_newwin_{$nw['nw_id']}"]) && $_COOKIE["rb_newwin_{$nw['nw_id']}"]) {
continue;
}
$popups_to_show[] = $nw;
}
}
$popup_count = count($popups_to_show);
?>
<?php if ($popup_count > 0): // 💡 표시할 팝업이 1개 이상일 때만 전체 구조를 출력합니다. ?>
<!-- 팝업레이어 시작 -->
<!-- 💡 [접근성 개선] role과 aria 속성을 추가하여 스크린 리더 사용자에게 더 나은 경험을 제공합니다. -->
<div id="rb_newwin_modal_wrapper" class="rb-modal-overlay" role="dialog" aria-modal="true">
<div class="rb-modal-grid-container">
<?php
foreach ($popups_to_show as $nw) {
?>
<div id="rb_newwin_<?php echo $nw['nw_id'] ?>" class="rb-modal-card">
<div class="rb-modal-content" style="width:<?php echo (int)$nw['nw_width'] ?>px;">
<!-- 💡 [접근성 개선] aria-label을 추가하여 버튼의 역할을 명확히 합니다. -->
<button type="button" class="rb-modal-close" data-nw-id="<?php echo $nw['nw_id']; ?>" aria-label="팝업 닫기">&times;</button>
<div class="rb-modal-body" style="height:<?php echo (int)$nw['nw_height'] ?>px;">
<div class="rb-modal-body-inner">
<?php echo conv_content($nw['nw_content'], 1); ?>
</div>
</div>
<div class="rb-modal-footer">
<button type="button" class="rb-modal-reject" data-nw-id="<?php echo $nw['nw_id']; ?>" data-hours="<?php echo (int)$nw['nw_disable_hours']; ?>">
<strong><?php echo (int)$nw['nw_disable_hours']; ?></strong>시간 동안 보지 않기
</button>
<button type="button" class="rb-modal-close" data-nw-id="<?php echo $nw['nw_id']; ?>">닫기</button>
</div>
</div>
</div>
<?php
} // end foreach
?>
</div>
</div>
<script>
jQuery(function($) {
const $wrapper = $("#rb_newwin_modal_wrapper");
/**
* 💡 [리팩토링] 팝업 카드를 닫는 공통 함수
* @param {string} nw_id - 닫을 팝업의 ID
*/
function closePopupCard(nw_id) {
const $card = $("#rb_newwin_" + nw_id);
$card.fadeOut(300, function() {
// 카드가 사라진 후, 보이는 카드가 없으면 전체 오버레이를 닫습니다.
if ($wrapper.find('.rb-modal-card:visible').length === 0) {
$wrapper.fadeOut();
}
});
}
// "n시간 동안 보지 않기" 버튼 클릭 시
$wrapper.on("click", ".rb-modal-reject", function() {
const nw_id = $(this).data("nw-id");
const hours = parseInt($(this).data("hours"), 10);
if (hours > 0) {
set_cookie("rb_newwin_" + nw_id, 1, hours, g5_cookie_domain);
}
closePopupCard(nw_id); // 💡 공통 함수 호출
});
// "닫기" 버튼 클릭 시 (이벤트 위임 사용)
$wrapper.on("click", ".rb-modal-close", function() {
const nw_id = $(this).data("nw-id");
closePopupCard(nw_id); // 💡 공통 함수 호출
});
});
</script>
<!-- 팝업레이어 끝 -->
<?php endif; ?>