그누보드,탑빌더 사용중입니다. 팝업 쿠키이용한 팝업 실행 종료 문의드립니다.

그누보드,탑빌더 사용중입니다. 팝업 쿠키이용한 팝업 실행 종료 문의드립니다.

QA

그누보드,탑빌더 사용중입니다. 팝업 쿠키이용한 팝업 실행 종료 문의드립니다.

답변 2

본문

어제 팝업 에러메시지는 set_cookie 함수가  common.js에서 선언 되었다가 popup에서는 실행이 되지 않는 문제로 인해 Q&A 질문을 올리고 도움을 받고

popup_control.js에서 set_cookie,get_cookie 등등 선언을 해주어서 문제 해결은 되었습니다.,

실제로 컴퓨터에 만들어진 쿠키도 확인 하였습니다.

 

하지만, popup.lib.php 와 viewpop.skin.php 에서 popup을 실행할 때

get_cookie 를 불러와서 비교하는 스크립트가 없는듯 한데요.. 혹시 이부분을

어디를 참고해야하며, 혹시 수정하시어 사용하시는 분 계시면 조언 부탁드립니다.

버젼은 //    탑빌더

- 개발날짜 : 2009년 09월 18일   
//    - 저작권 : topschool
//    - 개발자 : 정진호
 

 

이시고 basic 버젼입니다.  

아래는 phpup.lib.php 입니다.


<?
if (!defined('_GNUBOARD_')) exit;
function get_popup_contents($content){
    global $zindex, $rs;
    $content = str_replace("{zindex}", $zindex, $content);
    $content = str_replace("{title}", $rs[po_subject], $content);
    $content = str_replace("{content}", $rs[po_content], $content);
    $content = str_replace("{expirehours}", $rs[po_expirehours], $content);
    $content = str_replace("{id}", $rs[po_id], $content);
    $content = str_replace("{po_left}", $rs[po_left], $content);
    $content = str_replace("{po_top}", $rs[po_top], $content);
    $content = str_replace("{po_width}", $rs[po_width], $content);
    $content = str_replace("{po_height}", $rs[po_height], $content);
    
    if($rs[po_scrollbar] == "1"){
        $content = str_replace("{overflow}", "auto", $content);
    }else{
        $content = str_replace("{overflow}", "hidden", $content);
    }
    return $content;
}

// 팝업창
$zindex = 1000000;
$popcnt = 1;
$jscnt = 1;
$sql = "select * from $g4[popup_table] where po_start_date < '$g4[time_ymdhis]' and po_end_date > '$g4[time_ymdhis]' and po_openchk = '1'";
$result = sql_query($sql);
if ($result) {
    while($rs = sql_fetch_array($result)) {
        if ( ( $rs[po_dir] == $_SERVER[PHP_SELF] || !$rs[po_dir] || ($bo_table == $rs[po_dir] && strstr($_SERVER[PHP_SELF],"/bbs/board.php")) ) && !strstr($_SERVER[PHP_SELF],"/viewpop.skin.php") ) {
            if($jscnt == 1){
                echo "<script src=\"{$g4[path]}/skin/popup/{$rs[po_skin]}/popup_control.js\"></script>";
                $jscnt++;
            }
            if (trim($set_COOKIE["it_ck_pop_".$rs[po_id]]) != "done") {
                $popup_skin_path = "$g4[path]/skin/popup/$rs[po_skin]";
                if($rs[po_popstyle] == "1"){
                    ob_start("get_popup_contents");
                    include("$popup_skin_path/viewlayer.skin.php");
                    ob_end_flush();
                }else{
                    echo "<script>\n";
                    if($popcnt == 1){
                        echo "function popup(url,scroll,po_left,po_top,po_width,po_height,popname) {\n";
                        if($rs[po_leftcenter])
                        echo "po_left = (screen.width / 2) + po_left;";
                        if($rs[po_topcenter])
                        echo "po_top = (screen.height / 2) + po_top;";
                        echo "var settings = 'left='+po_left+','\n";
                        echo "settings += 'top='+po_top+','\n";
                        echo "settings += 'width='+po_width+','\n";
                        echo "settings += 'height='+po_height+','\n";
                        echo "settings += 'scrollbars='+scroll+','\n";
                        echo "window.open(url,popname,settings);";
                        echo "\n}\n";
                        $popcnt++;
                    }
                    echo "popup(\"$popup_skin_path/viewpop.skin.php?po_id=$rs[po_id]\",$rs[po_scrollbar],$rs[po_left],$rs[po_top],$rs[po_width],$rs[po_height],\"pop{$zindex}\");\n";
                    echo "</script>";
                }
                $zindex++;
            }
        }
    }
}
?>

아래는 viewpop.skin.php 입니다.


<?
$g4_path = "../../../"; // common.php 의 상대 경로
include_once("$g4_path/common.php");
include_once("$g4[path]/head.sub.php");
$sql = "select * from $g4[popup_table] where po_id = '$po_id'";
$rs = sql_fetch($sql);
?>
<style>
<!--
body{
margin:0;
}
-->
</style>
<table cellpadding="0" cellspacing="0" bgcolor="#edf2fc" width="100%" height="100%">
    <tr>
        <td>
        <table cellspacing="0" cellpadding="0" bgcolor="#ffffff" width="100%" height="<?=$rs[po_height] - 20;?>">
            <tr>
                <td><?=$rs[po_content];?></td>
            </tr>
        </table>
        <div style="width:100%;background:#000000;color:#FFFFFF;text-align:right;padding-right:5px;;font-size:12px;">            
            <input type="checkbox" id="expirehours<?=$rs[po_id];?>" name="expirehours<?=$rs[po_id];?>" value="<?=$rs[po_expirehours];?>"><?=$rs[po_expirehours];?>시간 동안 이 창을 다시 열지 않음
            <a href="javascript:popup_close(<?=$rs[po_id];?>)"><img src="./img/close.jpg" width="11" height="11" border="0"></a>
        </div>
        </td>
    </tr>
</table>
<?
include_once("$g4[path]/tail.sub.php");
?>
<script>
function popup_close(id) {
    var obj = document.getElementById("expirehours"+id);
    if (obj.checked == true) {
        set_cookie("it_ck_pop_"+id, "done", obj.value, window.location.host);
    }
    self.close();
}
</script>

 

 

이 질문에 댓글 쓰기 :

답변 2

popup.lib 를 include 하기전에 $set_COOKIE 를 어디선가 담았을 것으로 추정됩니다.

위쪽으로 계속 찾아나가보셔야 할것 같아요

$set_COOKIE["it_ck_pop_".$rs[po_id]]) != "done"

말그대로 done 이 아니면 내용을 불러오게 처리되있으니

쿠키값을 읽어서 done 을 넣던 다른걸 넣던 하는 내용이 있을것 같네요

하 ~ 결국엔 거기에 펑션네임이 잘못 들어가 있었습니다.. popup_control.js 의 쿠키 입력 set_cookie는 사용자 펑션이었고,, set_cookie 가 아니고 $_cookie  로 변경하니 되더군요,,  좋은 조언에 해결되었습니다.. 감사합니다..^^

제가 봤을땐 



if (trim($set_COOKIE["it_ck_pop_".$rs[po_id]]) != "done") {

이부분이 쿠키값을 확인하는것 같은데

$set_COOKIE 값을 어디서 가져오는지 확인해보셔야 할것 같습니다.

set_cookie 값을 셋팅해주는 거 같은데요.. 혹시 index-> includ 'popup.lib' -> popup_control.js+viewlayar.skin+viewpopup.skin ->includ 'tail.sub' .. 제가 웹쪽은 좀 약한데 이해한 바로는 이렇게 되는 듯 합니다. 그렇다면 popup.lib 에서 viewlayer 과 viewpopup 을 호출 하기 전에
if 문으로 함수 get_cookie 를 호출하여 pc의 쿠키를 읽어오고 난뒤에 비교해서 참이면 close 하고 거짓이면 open 해야 하지 않는 가 싶어서요.. 그렇다면  여기에 올려진 popup.lib의 내용에는 안보이는 듯 한데 맞는지요??

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 145
© SIRSOFT
현재 페이지 제일 처음으로