그누보드,탑빌더 사용중입니다. 팝업 쿠키이용한 팝업 실행 종료 문의드립니다.
본문
어제 팝업 에러메시지는 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 을 넣던 다른걸 넣던 하는 내용이 있을것 같네요
제가 봤을땐
if (trim($set_COOKIE["it_ck_pop_".$rs[po_id]]) != "done") {
이부분이 쿠키값을 확인하는것 같은데
$set_COOKIE 값을 어디서 가져오는지 확인해보셔야 할것 같습니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.