팝업레이어 커스텀
본문
팝업레이어(/bbs/newwin.inc.php) 를 모든 팝업을 가운데정렬로 커스텀해서 사용중인데요.
sql 을 동일한 코드를 2번 불러와야 해결되는데... 이걸 간결하게 하는 방법이 있나 조언을 구하고자 질문드려봅니다
순정 소스코드
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
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);
?>
<!-- 팝업레이어 시작 { -->
<div id="hd_pop">
커스텀 소스코드
<?php
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
if (!defined('_SHOP_')) {
$pop_division = 'comm';
} else {
$pop_division = 'shop';
}
$sql = " select count(*) as cnt 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 ";
$total = sql_fetch($sql); // 출력될 팝업 총 개수 구함.
$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);
$popCookieArr = array(); // 쿠키가 생성된 팝업 배열
for ($i=0; $row=sql_fetch_array($result); $i++) // 출력될 팝업의 nw_id 값으로 생성된 쿠키가 있을 경우 배열에 추가
{
$popCookieArr[] = $_COOKIE["hd_pops_{$row['nw_id']}"];
}
$hiddenCnt = array_count_values($popCookieArr); // 배열의 요소 개수, count($popCookieArr)
/*if( $is_admin ){
print_r2($total);
echo '<br>';
print_r2($hiddenCnt);
}*/
// 출력될 팝업 sql 추가 - 위 sql 과 중복
$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);
?>
<?php if( $total['cnt'] != $hiddenCnt[1] ) { // 출력될 팝업의 수와 숨겨진 팝업 수가 다를 경우 팝업레이어 출력 ?>
<!-- 팝업레이어 시작 { -->
<div id="hd_pop">
이런식으로 커스텀을 했습니다. hd_pop 은 fixed 에 투명도가 살짝 들어간 검정 배경이 깔리게 하고, 안에 돌 팝업들은 가운데정렬로 여러개가 와도 모든 팝업은 중앙정렬되게 구현했는데요...
구현은 잘 됩니다. 중복되는 코드가 자꾸 눈에 밟혀 거슬리네요...;;
위에 한번 선언했으니 아래꺼를 지워봤는데, hd_pop 까지는 출력되나, 떠야할 팝업은 안뜨고 있습니다.
그래서 팝업 출력하기 전에 한번더 $sql - $result 쿼리를 추가했더니 떠가지고... 어쩔 수 없이 중복된 코드를 사용하고 있는데... 더 간결하게는 안될까?? 하는 생각에 신경이 쓰이네요 ㅋㅋㅋ;; 뭔가 간결하게 구현할 수 있는 방법이 있을까요??
!-->!-->답변 1
위에서 배열에서 $result가 사용되어서 그렇습니다.
// 출력될 팝업 sql 추가 - 위 sql 과 중복
$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);
코드를 지우시고
$result = sql_query($sql, false);
로 바꿔보세요.
그리고 추가로 위에 count하는 쿼리도 필요가 없습니다.
$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);
$total = sql_num_rows($result);
이렇게하시면 $total 변수에 개수가 들어갑니다.
!-->!-->!-->
답변을 작성하시기 전에 로그인 해주세요.