first commit 2
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
<?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="팝업 닫기">×</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; ?>
|
||||
Reference in New Issue
Block a user