팝업레이어 커스텀

팝업레이어 커스텀

QA

팝업레이어 커스텀

본문

팝업레이어(/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 변수에 개수가 들어갑니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 17,126
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT