테스트 사이트 - 개발 중인 베타 버전입니다

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

김실장3 4년 전 조회 1,897

어제 팝업 에러메시지는 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 입니다.

</p>

<p><?</p>

<p>if (!defined('_GNUBOARD_')) exit;</p>

<p>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;</p>

<p>}</p>

<p>

// 팝업창

$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++;

            }

        }

    }

}</p>

<p>?></p>

<p>

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

</p>

<p><?

$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></p>

<p>

 

 

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트
i
4년 전

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

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

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

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

댓글을 작성하려면 로그인이 필요합니다.

i
4년 전

제가 봤을땐 

</p>

<pre>
<code>if (trim($set_COOKIE["it_ck_pop_".$rs[po_id]]) != "done") {</code></pre>

<p><font face="monospace"><span style="font-size: 11.7px;">

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

김실장3
4년 전
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의 내용에는 안보이는 듯 한데 맞는지요??

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인